【问题标题】:How to let Jenkins pipeline build only for given branches如何让 Jenkins 管道只为给定的分支构建
【发布时间】:2021-08-13 14:25:07
【问题描述】:

在下面的管道中,我试图只签出开发分支来构建给定的项目。如何确保管道仅运行开发、主和发布分支? 我应该为主分支添加单独的阶段,为发布分支添加另一个阶段。相反,我试图仅在开发或主或发布分支发生更改时才构建此管道,而忽略为任何其他分支构建。

在 Jenkins > Freestyle 项目 > 源代码管理 > Git > 用户可以在分支说明符中输入特定的分支。如何使用管道实现类似的?

pipeline {
agent any
tools {
    maven "${mvnHome}"
    jdk  'jdk8'
}
stages {
stage('Checkout project') {
    steps {
        git branch: 'develop',
            credentialsId: 'someid',
            url: 'https://project.git'
    }
}

    stage('build') {
        steps {
            sh '''
             mvn clean deploy
            '''
            }
        }
    }
}

【问题讨论】:

  • 不是这个问题的答案(见下文),但您的 ${mvnHome} 的内容不是您的 Maven 主目录,而是 like in this answer from me to you Maven 的 全局工具配置 名称。

标签: jenkins-pipeline jenkins-groovy


【解决方案1】:

好吧,您可以使用 when 语句在 groovy 中编写条件来执行此操作。像这样的

stage('build'){
  when {
    expression {
      env.BRANCH_NAME == 'develop' || env.BRANCH_NAME == 'master'
      }
  }
 steps{
   script{
   sh 'mvn clean deploy '
   }
 }
}

【讨论】:

【解决方案2】:

您可以使用 Multibranch Pipeline 项目并在其 Branch Sources 处添加 → Git行为

  • 按名称过滤(使用正则表达式)

    Java regular expression 来限制名称。与提供的正则表达式不匹配的名称将被忽略。
    注意:此过滤器将应用于所有类似分支的事物,包括更改请求

  • 按名称过滤(使用通配符)

    • 包括

    要考虑的名称模式的空格分隔列表。您可以使用* 作为通配符;例如:master release*
    注意:此过滤器将应用于所有类似分支的事物,包括更改请求

    • 排除

    即使与包含列表匹配,也要忽略的以空格分隔的名称模式列表。例如:release alpha-* beta-*
    注意:此过滤器将应用于所有类似分支的事物,包括更改请求

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多