问题描述
创建了一个Jenkins Pipeline Job,并激活了“当有变更推送到Bitbucket时构建”触发器。用户还指定了要构建的分支。但是,Pipeline被所有分支的变更触发。用户还创建了一个具有类似配置的自由风格的作业,并且触发器正常工作。通用Webhook没有帮助,它触发了Jenkins中的所有作业。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
虽然我不知道Bitbucket的具体解决方案,但是当涉及到触发Jenkins构建时,我更喜欢使用一个简单的post-receive Git钩子。
在Jenkins中选择“远程触发此构建”(或类似的选项,通常是“构建触发器”部分的第一个选项),然后设置post-receive钩子,例如:
#!/bin/bash
username=user
token=1234567890abcdefgh
echo "Executing hook"
while read oldrev newrev refname
do
branch_received=$(git rev-parse --symbolic --abbrev-ref $refname)
echo " /==============================="
echo " | PUSH RECEIVED"
echo " | Old revision: $oldrev"
echo " | New revision: $newrev"
echo " | Reference : $refname"
echo " | Branch name : $branch_received"
echo " \=============================="
curl -X POST -d "BRANCH=$branch_received" http://$username:$token@jenkins/job/job_name/buildWithParameters?token=$token
res=$?
if test "$res" != "0"; then
echo "The curl command failed with: $res"
fi
done
exit 0
当然,上述代码对每个分支都会运行,并将分支名称作为参数传递给作业。在您的情况下,由于每个分支都有不同的作业,您将根据推送的分支调用不同的URL,并且可能使用build
而不是buildWithParameters
端点。
方案2
我建议使用Bitbucket Branch Source插件,它比默认的Pipeline作业类型提供了更好的控制推送构建触发器。
您当前设置的问题是,“要构建的分支”设置仅配置了Jenkins检出的存储库的分支,而不一定是哪些分支将触发构建。
- 您是否建议使用“Bitbucket Team/Project”类型的项目?我只需要一个作业来处理单个分支。
是的,Bitbucket Team/Project类型的项目可以更好地满足您的需求。您可以为每个分支创建一个单独的作业,并使用Bitbucket Branch Source插件来控制推送构建触发器。这样,只有在特定分支上进行推送时,相应的作业才会触发构建。
正文完