Я не знаю, можно ли считать это дубликатом, поскольку это проблема для конкретного случая.
В настоящее время я создал внешний образ докера для обработки моего агента Jenkins, который будет выполнять автоматический перезапуск без использования супервизора в качестве решения (отсутствие поддержки python 3.7), и тем самым, поскольку я использую openjdk:slim
в качестве базовый образ, и я не хочу устанавливать какие-либо дополнительные зависимости, которые я выбрал, чтобы компенсировать отсутствие таких инструментов, как lsof
и ps
, или других для проверки, запущен процесс или нет, записав pid запущенного процесса на файл, который будет использоваться для проверки, существует ли процесс по пути /proc/pid/status
. В настоящее время это работает и является основной причиной создания этого решения для автоматического запуска агентов.
Но мой вопрос: это лучший или более подходящий подход?
Пожалуйста, найдите следующий код с реализацией:
#!/bin/bash
set -e
agent_runner() {
while :
do
if [ ! -f "/proc/$(cat /tmp/agent.pid)/status" ]
then
curl $JNLP_AGENT_DOWNLOAD_URL -o agent.jar
java \
-Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=300 \
-Dhttps.protocols=TLSv1.2 \
-jar agent.jar \
-jnlpUrl $JNLP_AGENT_URL \
-secret $JENKINS_SECRET \
-workDir "$JENKINS_WORKDIR" &
echo $! > /tmp/agent.pid
else
:
fi
sleep 10
done
}
while :
do
if [ cat < /dev/tcp/"$TARGET" ]; then
echo "Starting Agent"
agent_runner
else
echo "Jenkins master is offline, waiting...."
fi
sleep 10
done
Ссылка на репозиторий: https://github.com/thcp/jenkins-agent-dod