当前位置: 首页 > 知识库问答 >
问题:

Jenkins管道中的条件步骤/阶段

郗鹏
2023-03-14

仅当构建特定分支时,如何运行构建步骤/阶段?

例如,仅当分支被称为部署时才运行部署步骤,其他操作保持不变。

共有3个答案

逑禄
2023-03-14

根据其他答案,我添加了平行阶段场景:

pipeline {
    agent any
    stages {
        stage('some parallel stage') {
            parallel {
                stage('parallel stage 1') {
                    when {
                      expression { ENV == "something" }
                    }
                    steps {
                        echo 'something'
                    }
                }
                stage('parallel stage 2') {
                    steps {
                        echo 'something'
                    }
                }
            }
        }
    }
}
姚昊焱
2023-03-14

只需使用ifenv.BRANCH_NAME,例如:

    if (env.BRANCH_NAME == "deployment") {                                          
        ... do some build ...
    } else {                                   
        ... do something else ...
    }                                                                       
游勇军
2023-03-14

在声明式管道语法中执行同样的操作,下面是一些示例:

stage('master-branch-stuff') {
    when {
        branch 'master'
    }
    steps {
        echo 'run this stage - ony if the branch = master branch'
    }
}
stage('feature-branch-stuff') {
    when {
        branch 'feature/*'
    }
    steps {
        echo 'run this stage - only if the branch name started with feature/'
    }
}
stage('expression-branch') {
    when {
        expression {
            return env.BRANCH_NAME != 'master';
        }
    }
    steps {
        echo 'run this stage - when branch is not equal to master'
    }
}
stage('env-specific-stuff') {
    when { 
        environment name: 'NAME', value: 'this' 
    }
    steps {
        echo 'run this stage - only if the env name and value matches'
    }
}

更有效的方法来了-https://issues.jenkins-ci.org/browse/JENKINS-41187
还看-https://jenkins.io/doc/book/pipeline/syntax/#when

如果条件不需要git状态来决定是否运行,可以设置指令beforeAgent true,以避免启动代理来运行条件:

when { beforeAgent true; expression { return isStageConfigured(config) } }

发布帖子和文档

UPDATE
New WHEN子句
REF:https://jenkins.io/blog/2018/04/09/whats-in-declarative

equals——比较两个值——字符串、变量、数字、布尔值——如果它们相等,则返回true。我真的不确定我们怎么会错过之前添加的内容!您可以使用not{equals…}进行“not equals”比较组合也是。

变更请求——以最简单的形式,如果该管道正在构建变更请求,例如GitHub拉取请求,这将返回true。您还可以对变更请求进行更详细的检查,允许您询问“这是针对主分支的变更请求吗?”等等。

buildingTag——一个简单的条件,只检查管道是否针对SCM中的标记运行,而不是分支或特定的提交引用。

标签-一个更详细的等价于BuildingTag,允许您检查标签名称本身。

 类似资料:
  • 问题内容: 仅在构建特定分支时,如何运行构建步骤/阶段? 例如,仅在调用分支的情况下才运行部署步骤,而其他所有都保持不变。 问题答案: 在声明性管道语法中执行相同的操作,以下是一些示例: 出现更有效的方法-https: //issues.jenkins- ci.org/browse/JENKINS-41187 另请 参阅- https://jenkins.io/doc/book/pipeline/

  • 我正在将在UI中配置的Jenkins作业转换为使用声明性管道脚本配置的作业。 这是一个maven构建的Java项目,具有部署到Artifactory的构建后操作 构建和测试步骤很简单。我们可以使用这个UI 并将其转换为mvn命令。 构建后步骤的配置在UI中很简单 选中了三个文本框 部署maven工件 过滤器从构建信息中排除了工件(我不认为有任何) 捕获并发布构建信息 这会生成并上传丰富的build

  • 在Jenkins管道中,我使用构建步骤触发其他几个作业,并向其传递一些参数。除了管道之外,我在可视化我触发的不同工作时遇到了问题。我已经设置了Jenkins Delivery Pipeline插件,但是它的文档非常模糊,我只能可视化管道中的步骤,尽管用阶段和任务名称标记作业。 例子: 我在Jenkins中有两个作业作为管道/工作流作业,具有以下管道脚本: 工作坊: 作业栏: 我如何使它也显示在工作

  • 问题内容: 我正在尝试在前一个阶段周围使用try / catch来复制Jenkins管道中条件阶段的等效内容,然后在该阶段之前设置一个成功变量,该变量用于触发条件阶段。 看起来,尝试catch块是可行的方法,将成功var设置为SUCCESS或FAILED,这将在以后的when语句中用作条件语句(作为条件阶段的一部分)。 我使用的代码如下: 我收到的最新语法错误如下: 我也尝试了很多变化。 我在这里

  • Jenkins版本=2.19 Jenkins多分支管道插件版本=2.92 我有一个Jenkinsfile,其中有一些基于分支的条件阶段。 为了简洁起见,这是我的Jenkinsfile的修改版本: 我正在使用多分支管道插件。 它成功地检测并构建了我所有的分支。 我的问题是,所有构建报告为失败,即使我悬停每个阶段,它报告'成功'。 我附上了一张图片,显示了一个功能分支,其中我想要运行的两个阶段已经运行