1

当前的 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 开始另一个构建,我们使用选项推送,并且 post-receive 挂钩忽略这些推送:

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

服务器上的 post-receive 挂钩仅在用户推送时向 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 忽略作为标签一部分的更改。

注意,我发现了另一个 SO 帖子:Jenkins git commit for specific branch triggers build jobs for other branches too

4

1 回答 1

1

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

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

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

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

于 2021-02-08T06:04:23.677 回答