#!/bin/bash set -e if [ -z "$JENKINS_URL" ]; then echo 1>&2 "Erro: JENKINS_URL não foi informada." exit 1 fi if [ -z "$JENKINS_SECRET" ]; then echo 1>&2 "Erro: JENKINS_SECRET não foi informado." exit 1 fi if [ -z "$JENKINS_AGENT_NAME" ]; then JENKINS_AGENT_NAME="$(hostname)" fi if [ -z "$JENKINS_AGENT_WORKDIR" ]; then JENKINS_AGENT_WORKDIR="/home/jenkins/agent" fi # Inicia cron (limpeza periódica do docker) sudo service cron start # Sincroniza GID do Docker do Host com o container (Docker-Outside-Of-Docker) DOCKER_GID=$(stat -c '%g' /var/run/docker.sock) sudo groupmod -g $DOCKER_GID docker || true sudo usermod -aG docker jenkins sudo chmod 666 /var/run/docker.sock || true # Garante que jenkins é dono dos volumes montados (volumes Docker nascem como root) sudo chown -R jenkins:jenkins "$JENKINS_AGENT_WORKDIR" 2>/dev/null || true sudo mkdir -p "$JENKINS_AGENT_WORKDIR" sudo chown -R jenkins:jenkins /home/jenkins/.nuget 2>/dev/null || true sudo chown -R jenkins:jenkins /home/jenkins/.npm 2>/dev/null || true # Otimizações de performance do git git config --global core.preloadindex true git config --global gc.auto 256 git config --global fetch.parallel 0 cd "$JENKINS_AGENT_WORKDIR" # Baixa agent.jar do controller a cada boot — garante compatibilidade de versão echo "Baixando agent.jar de ${JENKINS_URL}/jnlpJars/agent.jar..." curl -fsSL "${JENKINS_URL}/jnlpJars/agent.jar" -o agent.jar # Encerramento gracioso quando o container for parado trap 'echo "Encerrando agente..."; exit 0' SIGTERM SIGINT echo "Conectando agente ${JENKINS_AGENT_NAME} ao Jenkins (WebSocket)..." # file.encoding / sun.jnu.encoding: JVM lê nomes de arquivo do filesystem como UTF-8. # Sem isso, stash/archive falha em paths com acentos (ex: ArquivosAuxiliares/Inserção…). exec java \ -Dfile.encoding=UTF-8 \ -Dsun.jnu.encoding=UTF-8 \ -jar agent.jar \ -url "${JENKINS_URL}/" \ -name "${JENKINS_AGENT_NAME}" \ -secret "${JENKINS_SECRET}" \ -workDir "${JENKINS_AGENT_WORKDIR}" \ -webSocket