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

h7wcgrx3  于 2022-12-03  发布在  Jenkins
关注(0)|答案(5)|浏览(256)

如何仅在构建特定分支时运行构建步骤/阶段?
例如,仅当分支名为deployment时才运行部署步骤,其他所有内容保持不变。

0mkxixxg

0mkxixxg1#

在声明性管道语法中执行同样的操作,下面是几个示例:
第一个
更有效的方法即将出现-https://issues.jenkins-ci.org/browse/JENKINS-41187
另请参阅-https://jenkins.io/doc/book/pipeline/syntax/#when
指令beforeAgent true可以设置为避免启动代理来运行条件,如果条件不需要git state来决定是否运行:

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

Release post和文档

更新

新建WHEN子句
参考:https://jenkins.io/blog/2018/04/09/whats-in-declarative
equals -比较两个值-字符串、变量、数字、布尔值-如果它们相等,则返回true。老实说,我不知道我们之前怎么漏掉了这个!您也可以使用not { equals...}组合进行“not equals”比较。
changeRequest -最简单的形式是,如果这个管道正在构建一个变更请求,比如GitHub pull请求,它将返回true。你也可以对变更请求做更详细的检查,允许你询问“这是一个针对master分支的变更请求吗?”等等。
buildingTag -一个简单的条件,仅检查管道是否针对SCM中的标记运行,而不是针对分支或特定的提交引用。
tag -buildingTag的更详细对等用法,可让您检查标签名称本身。

c0vxltue

c0vxltue2#

只需使用ifenv.BRANCH_NAME,例如:

if (env.BRANCH_NAME == "deployment") {                                          
        ... do some build ...
    } else {                                   
        ... do something else ...
    }
elcex8rz

elcex8rz3#

我添加这个答案是为了明确地提到在 step 中使用条件,而不是在 stage 中使用条件,两者都在 * 声明性管道 * 中。

宣告式管缐阶段中的条件

正如@Chandan Nayak和其他人所示,这可以基于when完成,如下所示

stage('myConditionalStage') {
    when {
        branch 'myBranch'
    }
    steps {
        echo 'triggered by myBranch'
    }
}

因此,阶段myConditionalStage将仅在由到myBranch的推送触发时才运行。

声明性管道阶段的步骤中的条件

但是,如果您需要在阶段的步骤部分中使用条件,则可以使用 Scripted pipelines 中使用的Groovy语法(本例中为if/else)。对于 *Declarative pipelines *,您必须将其放入script块中,如下所示:

stage('myStage') {
    steps {
        echo 'within myStage'
        script {
            if (env.BRANCH_NAME == "myBranch") {
                echo 'triggered by myBranch'
            } else {
                echo 'triggered by something else'
            }
        }
    }
}

对于 Scripted pipeline,您可以在没有script块的情况下使用它,如@Krzysztof Krasoń所示

bbmckpt7

bbmckpt74#

根据其他答案,我添加了并行阶段方案:

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'
                    }
                }
            }
        }
    }
}
l3zydbqr

l3zydbqr5#

我创建了更多的嵌套阶段,如下所示:

pipeline {
     
      // Agent To Run On
      agent none
    
      stages {

   
    // Processing OpenCV Optimizer
    stage('OpenCV Processing'){

      when {
          expression { inputOptimizer == "OpenCV DNN" }
      }

      stages {

        // Checkout and Compile stage
        stage('SCM Checkout & Build'){

          parallel {

            stage('Test On Windows') {
                agent {
                    label "Stagging-Node"
                }
                steps {
                    echo "first stage"
                }
            }//Test On Windows

            stage('Test On Linux') {
                agent {
                    label "Stagging-Node"
                }
                steps {
                    echo "second stage"
                }

            }//Test On Linux

            stage('Testing '){
              agent {
                    label "Stagging-Node"
                }
                steps {
                    echo "second dddd"
                }
            }//Testing

          }

        }

        // Docker Build
        stage("Docker Build"){
      
          steps {

            echo "Build stage"

          }
        
        }

      }

    }

    // Processing OpenVino Optimizer
    stage('OpenVino Processing'){

      when {
          expression { inputOptimizer == "OpenVino CPU Yolov7" }
      }

      stages {

        // Checkout and Compile stage
        stage('SCM Checkout & Build'){

          parallel {

            stage('Test On Windows') {
                agent {
                    label "Stagging-Node"
                }
                steps {
                    echo "first stage"
                }
            }//Test On Windows

            stage('Test On Linux') {
                agent {
                    label "Stagging-Node"
                }
                steps {
                    echo "second stage"
                }

            }//Test On Linux

            stage('Testing '){
              agent {
                    label "Stagging-Node"
                }
                steps {
                    echo "second dddd"
                }
            }//Testing

          }

        }

        // Docker Build
        stage("Docker Build"){
      
          steps {

            echo "Build stage"

          }
        
        }

      }

    }
      
  }//end of stages

}//end of pipeline

相关问题