将Jenkins Git轮询限制为一个分支

问题描述

设置当前Jenkins Pipeline作业以构建从Git签出的分支。要进行结帐,我们使用SCM插件

  triggers {
    pollSCM scmpoll_spec: ''
  }

  checkout(
    poll: true,scm: [$class: 'GitSCM',branches: [[name: 'refs/heads/develop']],userRemoteConfigs: [
        [url: 'https://git-server/repo.git',name: 'origin',refspec: '+refs/heads/develop:refs/remotes/origin/develop',credentialsId: 'XXX']
      ],extensions: [
        [$class: 'WipeWorkspace'],[$class: 'CloneOption',honorRefspec: true,noTags: true,reference: '',shallow: false],[$class: 'LocalBranch',localBranch: 'develop']
      ],browser: [$class: 'GitList',repoUrl: 'https://git-server/gitlist/repo.git']
    ]
  )

在构建期间,会调用npm version patch,该更新将更新package.json文件,在本地提交并创建标签。然后,我们将其推回服务器端git存储库。为了阻止Jenkins开始另一个构建,我们使用options进行推送,并且post-receive挂钩将忽略这些推送:

git push origin develop --follow-tags --push-option=nobuild

用户按下时,服务器上的后接收挂钩仅POST到Jenkins,因为他们不会使用以下选项:

"https://jenkins-server/git/notifyCommit?url=https://git-server/repo.git"

这一切都工作得很好,但是问题是,当开发人员提交到feature分支时,将启动develop分支的构建。我猜这是问题的原因:

  1. 提交/推送到develop分支
  2. 在构建develop分支期间创建的标签
  3. feature分支上提交/推送
  4. Jenkins在开发branch上看到新标签并开始构建

因此,我正在寻找一种方法来强制Jenkins仅考虑对特定分支的提交/推送以触发特定构建。或者在考虑开始构建时强制Jenkins忽略作为标签一部分的更改。

解决方法

虽然文档中似乎没有,但我再次寻找答案时遇到了这张 Jenkins 票证:JENKINS-29574 - notifyCommit branch parameter is ignored。看来您可以向 URL 添加一个额外的参数:&branches=<branch-name>

作为 Git post-receive 钩子脚本的一部分,我可以找到分支名称并将其用作 POST 的一部分:

https://jenkins-server/git/notifyCommit?url=https://git-server/repo.git&branches=develop

这现在仅使用该特定分支启动构建。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...