当前的 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
。我猜以下是问题的原因:
- 提交/推送到
develop
分支 develop
在构建分支期间创建的标签- 提交/推送
feature
分支 - Jenkins 在开发中看到新标签
branch
并开始构建
所以我正在寻找一种方法来强制 Jenkins 只考虑提交/推送到特定分支以触发特定构建。或者在考虑开始构建时强制 Jenkins 忽略作为标签一部分的更改。
注意,我发现了另一个 SO 帖子:Jenkins git commit for specific branch triggers build jobs for other branches too