如果Docker管道插件withRun命令返回非零退出代码,我如何使Jenkins构建失败?

时间:2017-06-21 23:33:27

标签: docker jenkins jenkins-plugins jenkins-pipeline

我正在使用Docker Pipeline Plugin通过Docker容器执行构建脚本。我注意到,如果我在一个inside()命令中执行时有一个脚本返回非零退出代码,Jenkins会将管道执行标记为失败。这个示例Jenkinsfile说明了这种情况:

docker.image('alpine').inside() {
  sh 'exit 1'
}

但是,如果我使用withRun()命令,类似的Jenkins文件将导致构建失败,即使docker ps -l命令显示容器已退出非零状态:

node() {
  sh 'touch ./test.sh'
  sh 'echo "exit 1" >> ./test.sh'
  sh 'chmod 755 ./test.sh'

  docker.image('alpine').withRun("-v ${WORKSPACE}:/newDir", '/bin/sh /newDir/test.sh') {container ->
    sh "docker logs ${container.id} -f"
    sh 'docker ps -l'
  }
}

如果容器以非零代码退出,是否有办法让withRun()失败?

3 个答案:

答案 0 :(得分:1)

我无法从withRun()命令中找到有关退出代码的更多信息,因此我最终只是从docker run步骤执行sh命令:

node() {
  sh 'touch ./test.sh'
  sh 'echo "exit 1" >> ./test.sh'
  sh 'chmod 755 ./test.sh'
  sh "docker run --rm -v ${WORKSPACE}:/newDir alpine /bin/sh /newDir/test.sh"
}

答案 1 :(得分:1)

可能的解决方案之一:

>>> for i in range(3): a[:,i] = a[0,i] * a[:,i] / np.sum(a[:,i])
>>> a
array([[0.02041667, 0.42772512, 0.01939597],
       [0.07875   , 0.17109005, 0.0433557 ],
       [0.04083333, 0.35118483, 0.10724832]])
>>> np.sum(a,axis=0)
array([0.14, 0.95, 0.17])

答案 2 :(得分:0)

docker wait怎么样?

sh "exit $(docker wait ${container.id})"

wait显示容器的退出代码,如果发生错误,则根据sh docs生成失败:

  

通常,以非零状态代码退出的脚本将导致该步骤失败并出现异常。