我有一个 groovy 脚本来在 Jenkins 中设置计划作业。
我想在构建失败时执行一些 shell 脚本。
如果我在创建作业后手动创建脚本,然后通过 groovy 脚本更新作业,它们就会运行。
但groovy脚本没有添加它:
job('TestingAnalysis') {
triggers {
cron('H 8 28 * *')
}
steps {
shell('some jiberish to create error')
}
publishers {
postBuildScripts {
steps {
shell('echo "fff"')
shell('echo "FFDFDF"')
}
onlyIfBuildSucceeds(false)
onlyIfBuildFails(true)
}
retryBuild {
rerunIfUnstable()
retryLimit(3)
fixedDelay(600)
}
}
}
一切正常,除了:
postBuildScripts {
steps {
shell('echo "fff"')
shell('echo "FFDFDF"')
}
onlyIfBuildSucceeds(false)
onlyIfBuildFails(true)
}
我尝试了 postBuildSteps
并且也遇到了错误。
我也尝试过,但出现错误:
postBuildScripts {
steps {
sh' echo "ggg" '
}
onlyIfBuildSucceeds(false)
onlyIfBuildFails(true)
}
最佳答案
看看JENKINS-66189似乎 PostBuildScript
3.0 版存在问题,其中不再支持旧语法(您正在使用的)。为了在 Job Dsl 脚本中使用新版本,您需要使用 Dynamic DSL syntax .
在您自己的 Jenkins 实例中使用以下链接来查看正确的用法:
YOUR_JENKINS_URL/plugin/job-dsl/api-viewer/index.html#path/freeStyleJob-publishers-postBuildScript。
它将帮助您构建正确的命令。在你的情况下它将是:
job('TestingAnalysis') {
triggers {
cron('H 8 28 * *')
}
steps {
shell('some jiberish to create error')
}
publishers {
postBuildScript {
buildSteps {
postBuildStep {
stopOnFailure(false) // Mandatory setting
results(['FAILURE']) // Replaces onlyIfBuildFails(true)
buildSteps {
shell {
command('echo "fff"')
}
shell {
command('echo "FFDFDF"')
}
}
}
}
markBuildUnstable(false) // Mandatory setting
}
}
}
请注意,您现在只需将相关构建结果列表传递给 results
函数,而不是使用 onlyIfBuildSucceeds
和 onlyIfBuildFails
等函数。 (成功、不稳定、失败、NOT_BUILT、中止)
关于Jenkins 发布者 postBuildScripts 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68551832/