Fir*_*zan 14 jenkins docker jenkins-pipeline
我在 Jenkins 管道中收到以下奇怪的错误
[Pipeline] withDockerContainer
acp-ci-ubuntu-test does not seem to be running inside a container
$ docker run -t -d -u 1002:1006 -u ubuntu --net=host -v /var/run/docker.sock:/var/run/docker.sock -v /home/ubuntu/.docker:/home/ubuntu/.docker -w /home/ubuntu/workspace/CD-acp-cassandra -v /home/ubuntu/workspace/CD-acp-cassandra:/home/ubuntu/workspace/CD-acp-cassandra:rw,z -v /home/ubuntu/workspace/CD-acp-cassandra@tmp:/home/ubuntu/workspace/CD-acp-cassandra@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** quay.io/arubadevops/acp-build:ut-build cat
$ docker top 83d04d0a3a3f9785bdde3932f55dee36c079147eb655c1ee9d14f5b542f8fb44 -eo pid,comm
[Pipeline] {
[Pipeline] sh
process apparently never started in /home/ubuntu/workspace/CD-acp-cassandra@tmp/durable-70b242d1
(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
[Pipeline] }
$ docker stop --time=1 83d04d0a3a3f9785bdde3932f55dee36c079147eb655c1ee9d14f5b542f8fb44
$ docker rm -f 83d04d0a3a3f9785bdde3932f55dee36c079147eb655c1ee9d14f5b542f8fb44
[Pipeline] // withDockerContainer
Run Code Online (Sandbox Code Playgroud)
Jenkins 流水线中对应的阶段是
stage("Build docker containers & coreupdate packages") {
agent {
docker {
image "quay.io/arubadevops/acp-build:ut-build"
label "acp-ci-ubuntu"
args "-u ubuntu --net=host -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/.docker:/home/ubuntu/.docker"
}
}
steps {
script {
try {
sh "export CI_BUILD_NUMBER=${currentBuild.number}; cd docker; ./build.sh; cd ../test; ./build.sh;"
ciBuildStatus="PASSED"
} catch (err) {
ciBuildStatus="FAILED"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
进程未在 docker 容器内启动的原因可能是什么?关于如何进一步调试的任何指示也很有帮助。
此错误意味着 Jenkins 进程卡在某个命令上。
一些建议:
alwaysPull true(下一行到image)。agentinside 时stage,去除外部代理。请参阅:JENKINS-63449。org.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true在 Jenkins 的Script Console 中执行以进行调试。docker ps以查看正在运行的命令。docker ps -a以查看最新的失败运行。在我的情况下,它试图在cat容器(例如ansible-playbook cat)设置的自定义 CMD 命令旁边运行,这是无效的命令。该cat命令由设计使用。要更改入口点,请阅读JENKINS-51307。docker exec -it -u0 $(docker ps -ql) bash并运行ps wuax以查看正在执行的操作。小智 6
该问题是由 Jenkins 持久任务插件 v1.31 中引入的一些重大更改引起的。
来源:
https://issues.jenkins-ci.org/browse/JENKINS-59907和 https://github.com/jenkinsci/durable-task-plugin/blob/master/CHANGELOG.md
解决方案:将 Jenkins 持久任务插件升级到 v1.33 为我们解决了这个问题。
我遇到了同样的问题,就我而言,它与-u <user>传递给代理的arg有关。最后,更改我的管道以使用-u root解决了问题。
在原帖中,我注意到 a-u ubuntu用于运行容器:
docker run -t -d -u 1002:1006 -u ubuntu ... -e ******** quay.io/arubadevops/acp-build:ut-build cat
Run Code Online (Sandbox Code Playgroud)
我还使用了一个自定义用户,这是我在构建 Docker 映像时添加的。
agent {
docker {
image "app:latest"
args "-u someuser"
alwaysPull false
reuseNode true
}
}
steps {
sh '''
# DO STUFF
'''
}
Run Code Online (Sandbox Code Playgroud)
使用相同的 Jenkins 命令在本地启动容器工作正常:
docker run -t -d -u 1000:1000 -u someuser app:image cat
docker top <hash> -eo pid,comm
docker exec -it <hash> ls # DO STUFF
Run Code Online (Sandbox Code Playgroud)
但在 Jenkins 中,它失败并出现相同的“进程从未启动......”错误:
$ docker run -t -d -u 1000:1000 -u someuser app:image cat
$ docker top <hash> -eo pid,comm
[Pipeline] {
[Pipeline] unstash
[Pipeline] sh
process apparently never started in /home/jenkins/agent/workspace/branch@tmp/durable-f5dfbb1c
Run Code Online (Sandbox Code Playgroud)
出于某种原因,将其更改为-u root有效。
agent {
docker {
image "app:latest"
args "-u root" # <=-----------
alwaysPull false
reuseNode true
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14718 次 |
| 最近记录: |