17

我在 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

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"
                 }
              }
          }
      }

该进程未在 docker 容器中启动的原因可能是什么?有关如何进一步调试的任何指示也很有帮助。

4

7 回答 7

8

此错误意味着 Jenkins 进程卡在某些命令上。

一些建议:

  • 升级所有插件并重试。
  • 确保您有正确数量的执行程序,并且作业不会卡在队列中。
  • 如果您正在提取图像(不是您的本地图像),请尝试添加alwaysPull true(下一行到image)。
  • agent内用时stage,去掉外剂。请参阅:詹金斯-63449
  • org.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true在 Jenkins 的Script Console中执行进行调试。
  • 当进程卡住时,SSH 到 Jenkins VM 并运行docker ps以查看正在运行的命令。
  • 运行docker ps -a以查看最新的失败运行。在我的情况下,它试图在cat容器(例如)设置的自定义 CMD 命令旁边运行ansible-playbook cat,这是无效的命令。该cat命令是按设计使用的。要更改入口点,请阅读JENKINS-51307
  • 如果您的容器仍在运行,您可以登录到您的 Docker 容器docker exec -it -u0 $(docker ps -ql) bash并运行ps wuax以查看正在执行的操作。
  • 尝试删除一些全局变量(可能是一个错误),请参阅:parallel jobs not started with docker workflow
于 2020-08-19T15:40:37.090 回答
7

该问题是由 Jenkins 持久任务插件 v1.31 中引入的一些重大更改引起的。

资源:

https://issues.jenkins-ci.org/browse/JENKINS-59907https://github.com/jenkinsci/durable-task-plugin/blob/master/CHANGELOG.md

解决方案:将 Jenkins 持久任务插件升级到 v1.33 为我们解决了这个问题。

于 2019-10-30T12:24:22.887 回答
6

我遇到了同样的问题,就我而言,它与-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

我还使用了一个自定义用户,这是我在构建 Docker 映像时添加的。

agent {
  docker {
    image "app:latest"
    args "-u someuser"
    alwaysPull false
    reuseNode true
  }
}
steps {
  sh '''
    # DO STUFF
  '''
}

使用相同的 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

但在 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

出于某种原因,将其更改为-u root有效。

agent {
  docker {
    image "app:latest"
    args "-u root"      # <=-----------
    alwaysPull false
    reuseNode true
  }
}
于 2020-11-17T08:04:50.937 回答
5

如果您已将耐用任务插件升级到 1.33 或更高版本,但它仍然无法工作,请检查您的管道中是否配置了空环境变量或存储在 Jenkins 配置中(虚线)并将其删除:

Jenkins 配置页面的屏幕截图,全局属性部分,显示一个空的环境变量

于 2020-06-18T18:48:06.207 回答
3

除了kenorb的回答:

  • 检查您正在运行的容器内的权限以及构建主机上的 Jenkins 目录。

我正在运行自定义 docker 容器,经过几个小时的调试后,我发现在尝试执行 Jenkins 试图在正在运行的容器中执行的内容之后(通过 exec 进入容器,运行并一一echo "$(ps waux)"执行这些命令)。sh -c我发现由于 UID 和 GID 不匹配,Jenkins 无法在容器内创建日志文件。

于 2020-09-02T06:34:34.893 回答
0

构建一个在 Docker 容器中运行的 Jenkins 作业,并遇到了同样的错误。Durable-Task 插件的版本是 v1.35,所以这不是问题。我的问题是……我的工作是尝试运行chmod -R 755 *.sh命令,而容器中的活动用户没有足够的权限来执行chmod这些文件。本来预计 Jenkins 会在这里失败,但是使用确实有权运行chmod命令的 ID 启动容器就克服了这个错误。

于 2021-09-29T17:28:59.293 回答
0

如果您在 Docker 内部运行 Jenkins 并为 Jenkins 运行 Docker 作业使用 DinD 容器,请确保将 Jenkins 数据卷安装到提供 Docker 守护程序的服务中的 /var/jenkins_home。守护程序实际上正在尝试创建日志,这意味着守护程序容器需​​要访问具有正在操作的工作空间的卷。

docker-compose.yml 的示例片段:

services:
  dind:
    container_name: dind-for-jenkins
    privileged: true
    image: docker:stable-dind
    volumes:
      - 'jenkins-data:/var/jenkins_home'
于 2020-11-17T00:30:53.560 回答