仅在构建标签时执行 Jenkins Pipeline 步骤

Execute Jenkins Pipeline step only when building a tag

我有特定的构建逻辑,例如发布,我希望 Jenkins 仅在构建 Git 标记时执行。我如何使用 Jenkin 的声明式管道完成此操作?

换句话说,我正在尝试构建等同于 Travis CI 的标签部署功能的功能:

deploy:
  [...]
  on: 
    tags: true

有一个 built-in condition to check the branch,但我没有看到表示标签的。

更新:Pipeline Model Definition Plugin you can now use buldingTag() 的 1.2.8 版本开始:

stage('Deploy') {
  when {
    buildingTag()
  }
  steps {
    echo 'Replace this with your actual deployment steps'
  }
}

使用时Multibranch Pipeline configuration you can use the expression condition along with the TAG_NAME environment variable provided by the underlying Branch API Plugin。不幸的是,你不能直接检查环境变量是否定义在 Groovy 级别(API 限制)所以你必须在 shell:

中测试
stage('Deploy') {
  when { expression { sh([returnStdout: true, script: 'echo $TAG_NAME | tr -d \'\n\'']) } }
  steps {
    echo 'Replace this with your actual deployment steps'
  }
}

以上利用了非空字符串在 Groovy.

中的真实性

以后的版本可能会引入更简单的方法。参见 jenkinsci/pipeline-model-definition-plugin#240

我有一个类似的情况,我通过获取分支名称来处理,如果是标签,它就像 refs/tags/v101.0.0-beta8468 ,所以你必须提取/解析它以检查它是否是一个标签,否则它只是分支名称如 pipeline 。例如

if(env.gitlabBranch.contains("tags"))
    {
        isTag = true
        echo "----------------true----------------"
        branch = env.gitlabBranch.split("/")[2]
        imageTag = branch

    }
    else
    {
        branch = "origin/$env.gitlabBranch"

    }

并在 chekout 步骤中提到分支

 branches: [[name: "${branch}"]

如果您想从同一个项目结帐。 根据 isTag 变量,您可以选择 运行 某个阶段。 喜欢:

if(isTag) {
stage('Deploy') {
   // your logic here
}

将您的 isTag 初始化为 false :)

声明式管道

仅在为标签构建时执行 STAGE

对于整个阶段,@vossad01 已经提供了在 when like

中使用 buildingTag() 的答案
stage('Deploy') {
  when {
    buildingTag()
    beforeAgent true
  }
  steps {
    echo 'deploy something when triggered by tag
  }
}

beforeAgent true 是可选的,确保在代理上执行之前检查条件。

仅在为标签构建时执行 STEP

如果它只是一个阶段中的一个步骤,应该以标签为条件,您可以在 script 块中使用 Groovy 语法(如脚本管道中所用),如下所示。

stage('myStage') {                                              
  steps {                                                       
    echo 'some steps here that should always be executed'
    script {                                                    
      if (env.TAG_NAME) {                                       
        echo "triggered by the TAG:"                                 
        echo env.TAG_NAME                                       
      } else {                                                  
        echo "triggered by branch, PR or ..."                              
      }                                                         
    }                                                           
  }                                                             
}

为标签构建的额外提示

您可能还对 basic-branch-build-strategies-plugin that enables to trigger builds when pushing tags (which is not enabled per default). See here 了解如何使用它感兴趣。您可以通过 Manage Jenkins -> Manage Plugins -> Available tab 安装它,然后使用搜索栏。