【发布时间】:2018-06-21 22:52:19
【问题描述】:
我确信我不是唯一一个对如何处理这样的事情感兴趣的人:Jenkins 管道中的 docker build stage 失败,出现 Unexpected EOF(可能有很多原因,在我的情况下,docker 守护进程已重新启动在奴隶上)
appImage = docker.build ("${projectName}:${env.BRANCH_NAME}-${gitCommit}", "--build-arg APP_ENV=${appEnv} --build-arg SKIP_LINT=true .")
部署阶段开始,因为 Unexpected EOF 实际上并没有抛出任何错误,没有异常可以捕获,因此构建状态为 null。
我知道这不是正常情况,但我们仍然如何处理这样的事情,以便在构建中断的情况下不会运行以下阶段。
其他细节: @JRichardsz,感谢您的回答!通常是 currentBuild.result 。默认为空,例如https://issues.jenkins-ci.org/browse/JENKINS-46325 因此,除非您在成功阶段执行时明确将其设置为成功,否则它将为空。但总而言之,可以通过 try catch 来实现:
if (deployableBranches.contains(env.BRANCH_NAME)) {
try {
stage('Build image') {
ansiColor('xterm') {
appImage = docker.build
("${projectName}:${env.BRANCH_NAME}-${gitCommit}", "--build-arg
SKIP_LINT=true .")
}
}
stage('Push image') {
docker.withRegistry("${registryUrl}", "${dockerCredsId}") {
appImage.push()
appImage.push "${env.BRANCH_NAME}-latest"
}
}
stage('Deploy') {
build job: 'kubernetes-deploy', parameters: [
/////
]
}
} catch (e) {
// A shell step returns with a nonzero exit code
// When pipeline is in a shell step, and a user presses abort
if (e.getMessage().contains('script returned exit code 143')) {
currentBuild.result = "ABORTED"
} else {
currentBuild.result = "FAILED"
}
throw e
} finally {
// Success or failure or abort, always send notifications
stage('Send deployment status') {
helpers.sendDeploymentStatus(projectName, currentBuild.result,
helpers.getCommitHashShort())
}
}
}
但问题是 stage('Build image') 可能会在没有任何错误代码的情况下退出,就像我的情况一样。
【问题讨论】:
-
这可能会在 docker 18.09 中修复,如果我正在考虑同样的错误:github.com/moby/moby/pull/37771
标签: docker exception jenkins groovy jenkins-pipeline