Groovy 如何对文件中失败的生成执行操作
如果在Jenkins文件中生成失败,是否有方法执行清理(或回滚) 我想通知我们的Atlassian隐藏实例,构建失败(通过在正确的URL上执行Groovy 如何对文件中失败的生成执行操作,groovy,jenkins-workflow,jenkinsfile,Groovy,Jenkins Workflow,Jenkinsfile,如果在Jenkins文件中生成失败,是否有方法执行清理(或回滚) 我想通知我们的Atlassian隐藏实例,构建失败(通过在正确的URL上执行curl) 基本上,当构建状态设置为失败时,这将是一个后期步骤 我应该使用试试{}catch()?如果是这样的话,我应该捕获什么样的异常类型?我目前也在寻找这个问题的解决方案。到目前为止,我能想到的最好办法是创建一个包装函数,在try-catch块中运行管道代码。如果还希望在成功时通知,可以将异常存储在变量中,并将通知代码移动到finally块。还要注意,
curl
)
基本上,当构建状态设置为失败时,这将是一个后期步骤
我应该使用
试试{}catch()
?如果是这样的话,我应该捕获什么样的异常类型?我目前也在寻找这个问题的解决方案。到目前为止,我能想到的最好办法是创建一个包装函数,在try-catch块中运行管道代码。如果还希望在成功时通知,可以将异常存储在变量中,并将通知代码移动到finally块。还要注意,您必须重新显示异常,以便Jenkins认为构建失败。也许有些读者会找到一种更优雅的方法来解决这个问题
pipeline('linux') {
stage 'Pull'
stage 'Deploy'
echo "Deploying"
throw new FileNotFoundException("Nothing to pull")
// ...
}
def pipeline(String label, Closure body) {
node(label) {
wrap([$class: 'TimestamperBuildWrapper']) {
try {
body.call()
} catch (Exception e) {
emailext subject: "${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - FAILURE (${e.message})!", to: "me@me.com",body: "..."
throw e; // rethrow so the build is considered failed
}
}
}
}
自2017年2月3日起,可用于实现此构建后步骤功能
它是一种用于构建管道的新语法,它使用预定义的结构和一些新步骤扩展管道,使用户能够定义代理、post操作、环境设置、凭据和阶段
下面是一个具有声明性语法的示例文件:
pipeline {
agent label:'has-docker', dockerfile: true
environment {
GIT_COMMITTER_NAME = "jenkins"
GIT_COMMITTER_EMAIL = "jenkins@jenkins.io"
}
stages {
stage("Build") {
steps {
sh 'mvn clean install -Dmaven.test.failure.ignore=true'
}
}
stage("Archive"){
steps {
archive "*/target/**/*"
junit '*/target/surefire-reports/*.xml'
}
}
}
post {
always {
deleteDir()
}
success {
mail to:"me@example.com", subject:"SUCCESS: ${currentBuild.fullDisplayName}", body: "Yay, we passed."
}
failure {
mail to:"me@example.com", subject:"FAILURE: ${currentBuild.fullDisplayName}", body: "Boo, we failed."
}
}
}
post代码块是处理post步骤操作的代码块
声明性管道语法引用是我使用try:finally解决了它。如果此阶段引发错误,则该阶段将显示为红色,并最终运行代码,但如果该阶段正常,则该阶段将显示为绿色,并最终运行代码
stage('Tests'){
script{
try{
sh """#!/bin/bash -ex
docker stop \$(docker ps -a -q)
docker rm \$(docker ps -a -q)
export DOCKER_TAG=${DOCKER_TAG}
docker-compose -p ${VISUAL_TESTING_PROJECT_TAG} build test
docker-compose -p ${VISUAL_TESTING_PROJECT_TAG} up --abort-on-container-exit --exit-code-from test
"""
}
finally{
sh """#!/bin/bash -ex
export DOCKER_TAG=${DOCKER_TAG}
docker-compose -p ${VISUAL_TESTING_PROJECT_TAG} down
"""
}
}
}
对于
timestamerbuildwrapper
,我不知道它存在。我在Jenkins文件的几个地方使用了try{}finally{}
,效果非常好。我还想指出,try/catch/finally块不需要被分解成单独的函数或包装器函数——它们在脚本管道中的任何地方都可以正常工作。thnx可以节省我们的时间