Итак, погнали ставить агента на self-hosted решение. Я за докер в любых решениях, но давайте попробуем и другой взгляд на мир. Сделаем свой сборщик и подключим к мастер-узлу и обязательно отключаем функционал воркера на основном узле.

Установка Jenkins Worker (Аналогично мастеру)
# apt install default-jdk -y
# curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
# echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
# apt update -y
Инструкция по запуску агента
Переделываем агента в сервис
На мастер-узле устанавливаем число задач выполняемых его воркером в 0
Обычно инструкция по запуску агента на узле выглядит примерно так.
# echo 879fe284TOKEN > secret-file
# curl -sO https://jenkins.interlan.xyz/jnlpJars/agent.jar
# java -jar agent.jar -jnlpUrl https://jenkins.interlan.xyz/manage/computer/srv%2Dprod%2Djenkins%2Dbuilder/jenkins-agent.jnlp -secret @secret-file -workDir “/var/jenkins”
Это инструкция для одноразового запуска и нам надо переделать это в сервис. Последовательность действий аналогичная для запуска любого jar в качестве сервиса, мы создаем пользователя, home будет в /opt/jenkins-builder и workDir положим там же в хомачке.
За основу возьмем заметку Простой “SystemD-сервис для запуска Java-приложений” и погнали банальную подготовку окружения сборщика.
# useradd jenkins-builder –base-dir /opt
# mkdir /opt/jenkins-builder
# chown -R jenkins-builder:jenkins-builder /opt/jenkins-builder
# su – jenkins-builder
Выглядит норм, но shell поменяем ему на bash или по вкусу.
SystemD-сервис для запуска агента:
[Unit]
Description=Jenkins Agent
After=syslog.target
[Service]
WorkingDirectory=/opt/jenkins-builder
User=jenkins-builder
ExecStart=/usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar agent.jar -jnlpUrl https://jenkins.interlan.xyz/manage/computer/srv%%2Dprod%%2Djenkins%%2Dbuilder/jenkins-agent.jnlp -secret 879TOKEN -workDir “/opt/jenkins-builder/”
[Install]
WantedBy=multi-user.target
Важные моменты:
- Если URL содержит %, то его надо экранировать как %%
- В чистом виде токен лучше не прописывать, а использовать хранилище в виде файла и передавать как @secret-file
Активируем агента:
# systemctl daemon-reload
# systemctl enable jenkins-agent
# systemctl start jenkins-agent