说我有一个简单的Jenkins管道文件,如下所示:
pipeline {
agent any
stages {
stage('Test') {
steps {
sh ...
}
}
stage('Build') {
steps {
sh ...
}
}
stage('Publish') {
when {
buildingTag()
}
steps {
sh ...
send_slack_message("Built tag")
}
}
}
post {
failure {
send_slack_message("Error building tag")
}
}
}
由于每天都有很多非标签构建,所以我不想发送任何有关非标签构建的懈怠消息。但是对于标记构建,无论它在哪个阶段失败,我都希望发送成功消息或失败消息。
对于上面的示例,我想要:
据我所知,Jenkins管道语法中没有“条件发布区”之类的东西,它确实可以在这里帮助我。所以我的问题是,还有其他方法可以做到吗?
答案 0 :(得分:3)
post {
failure {
script {
if (isTagBuild) {
send_slack_message("Error building tag")
}
}
}
}
其中isTagBuild
是区分标签或不构建标签的任何方式。
您还可以应用相同的逻辑,并将send_slack_message("Built tag")
下移到success
后期。
答案 1 :(得分:0)
在构建后步骤中,您还可以在内部使用脚本步骤并使用if。在此步骤中,您可以添加emailext插件。
答案 2 :(得分:0)
好吧,对于那些只想要一些可复制复制代码的人,这就是我根据@ eez0的回答而得出的结论。
pipeline {
agent any
environment {
BUILDING_TAG = 'no'
}
stages {
stage('Setup') {
when {
buildingTag()
}
steps {
script {
BUILDING_TAG = 'yes'
}
}
}
stage('Test') {
steps {
sh ...
}
}
stage('Build') {
steps {
sh ...
}
}
stage('Publish') {
when {
buildingTag()
}
steps {
sh ...
}
}
}
post {
failure {
script {
if (BUILDING_TAG == 'yes') {
slackSend(color: '#dc3545', message: "Error publishing")
}
}
}
success {
script {
if (BUILDING_TAG == 'yes') {
slackSend(color: '#28a745', message: "Published")
}
}
}
}
}
如您所见,我真的依靠Jenkins内置的buidingTag()
函数,通过使用env-var作为“桥梁”来帮助我解决问题。我真的不擅长Jenkins管道,因此,如果您有任何建议,请发表评论。