【问题标题】:Getting a jenkinsfile stage to run on master branch and tag让 jenkinsfile 阶段在主分支和标签上运行
【发布时间】:2021-05-04 13:12:44
【问题描述】:

当用户推送到主分支或将标签推送到源时,我试图让一个阶段运行。这是我在舞台上设置的when 条件:

  when {
    expression {
      branch 'master' || tag 'v*'
    }
  }

它会引发No such field found: field org.jenkinsci.plugins.structs.describable.UninstantiatedDescribable v* 的错误。是否有另一种方法可以以这样的方式执行条件表达式?

【问题讨论】:

  • 你在构建标签吗?
  • 没有。我希望舞台在 2 个条件下运行:当分支是 master 或 tag 是 v1.0.0
  • AFAIU,您的存储库中有标签,但您没有构建标签——您正在构建一个分支。当您构建的分支恰好也被标记时,您希望您的条件捕捉到它吗?

标签: jenkins-pipeline


【解决方案1】:

我有一个 Jenkinsfile 来自动化构建 docker 映像并将其推送到 docker 注册表的过程。在此示例中,当有人在 master 分支中推送标签时构建 docker 映像:

stage('Master Docker Prepare') {
      when {
        expression {
                      return (env.BRANCH_NAME=="master" && env.GIT_TAG!=null && env.GIT_TAG != '')
                   }
      }
      steps {
        echo 'Deploying'
        script {
            dockerImage = docker.build DOCKER_REGISTRY_PUT+"/"+DOCKER_IMAGE + ":" + env.GIT_TAG
        }
        script {
            docker.withRegistry( 'http://'+DOCKER_REGISTRY_PUT, DOCKER_REGISTRY_CREDENTIAL ) {
                        dockerImage.push()
            }
        }
   }
}

我认为你可以制作类似的东西。

【讨论】:

    【解决方案2】:

    when中使用anyOf如下图

    when { 
       anyOf { 
            branch 'master'
            expression { tag =~ 'v*' }
             } 
    }
    

    【讨论】:

      猜你喜欢
      • 2022-11-16
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2013-01-13
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      相关资源
      最近更新 更多