【发布时间】:2018-10-31 11:40:52
【问题描述】:
我不知道这是否可以被视为重复,因为它是特定案例的问题。
目前,我已经在 docker 映像之外创建了一个 docker 来处理我的 Jenkins 代理,该代理将执行自动重启而不使用主管作为解决方案(缺乏对 python 3.7 的支持),并且由于我使用 openjdk:slim 作为基本映像,我不想安装任何额外的依赖项,我选择通过将启动的进程 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
【问题讨论】:
-
为什么不在 docker swarm 服务中运行该服务?如果服务死了,swarm 只会在任何可用的主机上重新启动服务?
-
对于这个特定的场景,我们的代理在 powerpc 或 x86 虚拟机下,对于一些项目我们不能使用 docker swarm。