#!/bin/bash set -e if [ -z "$AZP_URL" ]; then echo 1>&2 "Erro: AZP_URL não foi informada." exit 1 fi if [ -z "$AZP_TOKEN" ]; then echo 1>&2 "Erro: AZP_TOKEN (PAT) não foi informado." exit 1 fi if [ -z "$AZP_AGENT_NAME" ]; then AZP_AGENT_NAME="$(hostname)" fi if [ -z "$AZP_POOL" ]; then AZP_POOL="Automatizados" fi # Inicia o serviço do cron (como root se necessário) sudo service cron start # Sincroniza o GID do Docker do Host com o container DOCKER_GID=$(stat -c '%g' /var/run/docker.sock) sudo groupmod -g $DOCKER_GID docker || true sudo usermod -aG docker azureuser # Garante a permissão no socket sudo chmod 666 /var/run/docker.sock || true # Garante que o azureuser é dono dos volumes montados (Docker volumes são criados como root) sudo chown -R azureuser:azureuser /home/azureuser/myagent/_work 2>/dev/null || true sudo mkdir -p /home/azureuser/myagent/_work/_tool sudo chown -R azureuser:azureuser /home/azureuser/myagent/_work/_tool sudo chown -R azureuser:azureuser /home/azureuser/.npm 2>/dev/null || true sudo chown -R azureuser:azureuser /home/azureuser/.cache 2>/dev/null || true export AGENT_ALLOW_RUNASROOT="1" # Otimizações de performance do git git config --global core.preloadindex true git config --global gc.auto 256 git config --global fetch.parallel 0 # Arquivo .env lido pelo Agent.Listener antes de cada job # Injeta variáveis em todos os workers sem alterar o YAML das pipelines # Reescrito a cada boot para garantir que não some após restart do container cat > .env << 'AGENTENV' DOTNET_CLI_TELEMETRY_OPTOUT=1 DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 DOTNET_NOLOGO=1 NUGET_XMLDOC_MODE=skip NODE_OPTIONS=--max-old-space-size=4096 CYPRESS_VERIFY_TIMEOUT=120000 AGENTENV # Captura sigterm e remove o agente de forma graciosa se o container for parado trap 'sudo -E ./config.sh remove --unattended --auth PAT --token "$AZP_TOKEN"; exit 0' SIGTERM SIGINT # Se o agente já está configurado, apenas reinicia if [ -f .agent ]; then echo "Agente já configurado, iniciando direto..." ./run.sh & wait $! exit 0 fi # Configura o MinIO Client (mc) se as credenciais foram fornecidas if [ -n "$MINIO_ACCESS_KEY" ] && [ -n "$MINIO_SECRET_KEY" ]; then echo "Configurando MinIO Client..." mkdir -p /home/azureuser/.mc cat > /home/azureuser/.mc/config.json <