只在推送到主分支时触发构建。

15

我正在使用Jenkins和Github插件,通过集成GitHub的webhooks,它可以完美地工作,但每次将代码推送到存储库时都会触发构建。

有没有办法仅在对远程分支master进行更改时才触发构建?


问: 远程分支被更改是什么意思? GitHub Git 存储库可以包含分支,但不包括远程分支。 - Verhagen
3
他说:github是他的远程仓库,他想知道如何限制构建只有在github上的'master'分支更新时才会触发。 - Brandon
2个回答

5

行动计划

  • 打开Jenkins任务配置
  • 转到“源代码管理”部分
  • Git部分中
    • 对于要构建的分支字段,添加值*/ master

这告诉Jenkins仅在将内容推送到master分支时执行该作业。

图示:显示仅构建master分支的配置。

enter image description here


11
对我来说那行不通。提交请求到开发分支触发了 Jenkins 作业,并设置为“*/master”分支。 - bancer
3
现在我在“分支规范输入”中有“refs/heads/master”。除此之外,该构建还带有名称为“sha1”的参数和默认值为“master”。在构建触发器的高级选项中,还有一个名为“白名单目标分支”的选项,其中包括“master”。 - bancer
对我来说,它没有起作用,因为我没有管道/工作流选项。最终,我使用普通的自由风格项目为该管道创建了一个触发器。 - Stefan Rogin
9
答案不正确,因为作业将会在所有分支的所有更改上执行,并且它只会在所有执行触发器中构建主分支。 - Saeed Mohtasham
1
正如@SaeedMohtasham所说,这个答案是不正确的。不应该被接受。 - Aros
1
这个答案不正确。不应该被接受。 - zOthix

0

使用带有when语句的流水线作业是一种可能的选择。

这里有一个示例,它从您的repo检出所有分支,并使用git for-each-ref --sort=committerdate refs/remotes/扫描分支,以查看哪个分支最后更新。如果最近更新了main,则检出并运行其他阶段。

def do_build = true

pipeline {
    agent any

    stages {
        stage('Checkout SCM') {
          steps {
            // checkout all branches
            checkout([$class: 'GitSCM',
              branches: [[name: '*/*']],
              userRemoteConfigs: [[credentialsId:  'YOUR_JENKINS_SSH_KEY', url: 'ssh://git@<YOUR-GIT-REPO-URL>']]])
            script {
              def last_git = sh (
                  script: 'git for-each-ref --sort=committerdate refs/remotes/',
                  returnStdout: true
              ).trim()
              do_build = last_git.endsWith("main")
            }
          }
        }
        stage('Build') {
          when {
            expression { do_build }
          }
          steps {
            echo "checkout main"
            checkout([$class: 'GitSCM',
              branches: [[name: '*/main']],
              userRemoteConfigs: [[credentialsId:  'YOUR_JENKINS_SSH_KEY', url: 'ssh://git@<YOUR-GIT-REPO-URL>']]])
            // DO OTHER STUFF ON MAIN BRANCH E.G. TESTS
          }
        }
    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接