如何通过Bitbucket中特定分支的推送触发Jenkins Pipeline

48次阅读
没有评论

问题描述

创建了一个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检出的存储库的分支,而不一定是哪些分支将触发构建。

  1. 您是否建议使用“Bitbucket Team/Project”类型的项目?我只需要一个作业来处理单个分支。
    是的,Bitbucket Team/Project类型的项目可以更好地满足您的需求。您可以为每个分支创建一个单独的作业,并使用Bitbucket Branch Source插件来控制推送构建触发器。这样,只有在特定分支上进行推送时,相应的作业才会触发构建。

正文完