Jenkins管道错误-“进程显然从未在...中启动”

时间:2019-10-11 18:53:02

标签: docker jenkins 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

詹金斯管道的相应阶段是


    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容器中无法启动进程的原因可能是什么?关于如何进一步调试的任何指示也很有帮助。

7 个答案:

答案 0 :(得分:4)

此错误表示Jenkins进程卡在某些命令上。

一些建议:

  • 升级所有插件,然后重试。
  • 确保您有适当数量的执行程序,并且作业没有卡在队列中。
  • 如果要提取图像(而不是本地图像),请尝试添加 @foreach($jobs as $job) <input type="checkbox" name="jobs[]" value="{{$user->id}}"> @endforeach //$jobs variable pointing to read records from jobs table in database alwaysPull true的下一行)。
  • image中使用agent时,请除去外部代理。请参阅:JENKINS-63449
  • 在Jenkins的脚本控制台中执行stage进行调试。
  • 当进程卡住时,通过SSH到Jenkins VM并运行org.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true来查看正在运行的命令。
  • 运行docker ps以查看最新的失败运行。就我而言,它尝试在容器设置的自定义CMD命令(例如docker ps -a)旁边运行cat,这是无效命令。 cat command is used by design。要更改入口点,请阅读JENKINS-51307
  • 如果您的容器仍在运行,则可以通过ansible-playbook cat登录到Docker容器并运行docker exec -it -u0 $(docker ps -ql) bash来查看正在执行的操作。
  • 尝试删除一些全局变量(可能是一个错误),请参阅:parallel jobs not starting with docker workflow

答案 1 :(得分:3)

使用耐用任务插件v1.33

  • Jenkins 2.176.2核心

  • 管道:节点和进程2.35

  • docker管道1.21

Jenkinsfile

pipeline {
    agent { label "slave" }
    stages {
        stage("test") {
            steps {
                withDockerContainer (image: 'busybox') {
                         sh 'pwd'
                }

            }
        }
    }
}

日志:

$ docker run -t -d -u 1003:1003 -w /srv/jenkins/workspace/My_Pipeline_master -v /srv/jenkins/workspace/My_Pipeline_master:/srv/jenkins/workspace/My_Pipeline_master:rw,z -v /srv/jenkins/workspace/My_Pipeline_master@tmp:/srv/jenkins/workspace/My_Pipeline_master@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 ******** busybox cat
$ docker top e38aaf9336221725b254e6cc273764d13890941c5b29b8191a4c990606da3fb1 -eo pid,comm
[Pipeline] {
[Pipeline] sh
process apparently never started in /srv/jenkins/workspace/My_Pipeline_master@tmp/durable-92981ede
(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
[Pipeline] }

答案 2 :(得分:2)

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

来源:

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

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

答案 3 :(得分:2)

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

Screen capture of the Jenkins Configuration page, Global Properties section, showing an empty environment variable

答案 4 :(得分:2)

除了kenorb的答案:

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

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

答案 5 :(得分:0)

如果您正在Docker内部运行Jenkins,并且为运行Docker作业的Jenkins使用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'

答案 6 :(得分:0)

我遇到了同样的问题,就我而言,这与传递给代理的-u <user arg有关。最后,将管道更改为使用-u root可以解决此问题。


在原始帖子中,我注意到使用了-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
  }
}