我试图在声明式语法中编写Jenkinsfile,这里的要求是,如果set环境变量不匹配,则管道阶段应该描述为“中止”,但是构建状态可以是中止的,也可以是不稳定的,在Jenkins在线文档和代码段生成器中确实看到了下面的样式
catchError(buildResult: 'ABORTED', stageResult: 'ABORTED') {
// some block
}catchError不符合我的目的,因为当阶段内的脚本不返回true或如果存在执行错误时,使用它是合适的,尽管默认的(当詹金斯声明式语法中的条件合适时),Jenkins不允许设置阶段结果“中止”。
when {
expression {
SCM_BRANCH_NAME ==~ /(master|QA)/
}
expression{
ENVIRONMENT ==~ /(QA)/
}
allOf{
environment ignoreCase: true,name: 'PRODUCT_NAME' , value: 'PRODUCT-1'
}
}请使用if和else格式的示例Jenkinsfile查看下面的示例Jenkinsfile
pipeline {
agent {
node {
label 'master'
}
}
environment{
ENVIRONMENT = "QA"
PRODUCT_NAME = "PRODUCT-1"
SCM_BRANCH_NAME = "master"
}
stages{
stage('Testing-1') {
when{
expression{
ENVIRONMENT ==~ /(QA)/
}
}
steps {
script {
if (PRODUCT_NAME == PRODUCT-1){
sh """
echo "Reached Here ${ENVIRONMENT} - ${PRODUCT_NAME} - ${SCM_BRANCH_NAME}"
// do testing for product 1
"""
}
else{
stageResult = 'ABORTED'
echo "PRODUCT not Available for Testing"
}
}
}
}
stage('Testing-2'){
steps{
sh '''
echo "Reached Second Stage"
'''
}
}
}
} 对于如何实现不满足条件的方案的任何建议,请将stageResult设为Abort,任何使用插件或示例符号脚本的建议都将受到极大的赞赏。
谢谢
发布于 2020-08-04 11:21:53
下面的片段为我工作。您可以使用catch错误块,并在满足某些条件时从该块抛出错误。还可以在“阶段后故障”部分捕获异常。
pipeline {
agent {
node {
label 'master'
}
}
environment{
ENVIRONMENT = "QA"
PRODUCT_NAME = "PRODUCT-1"
SCM_BRANCH_NAME = "master"
}
stages{
stage('Testing-1') {
when{
expression{
ENVIRONMENT ==~ /(QA)/
}
}
steps {
script {
catchError(buildResult: 'FAILURE', stageResult: 'ABORTED'){
if (PRODUCT_NAME != PRODUCT-1) {
error ("PRODUCT not Available for Testing")
}
sh """
echo "Reached Here ${ENVIRONMENT} - ${PRODUCT_NAME} - ${SCM_BRANCH_NAME}"
// do testing for product 1
"""
}
}
}
post {
failure {
echo "Something Failed and error has been catched"
}
}
}
stage('Testing-2'){
steps{
sh '''
echo "Reached Second Stage"
'''
}
}
} https://stackoverflow.com/questions/63238923
复制相似问题