有多种方法可以从 Bitbucket 之类的 SCM 触发 Jenkins 作业,但我具体想要做的是使用作为 Pull 请求源的分支触发构建。
到目前为止,我们已经使用了 Bitbucket Pull Request Builder,但它非常不稳定且不可靠,并且支持不佳。
https://wiki.jenkins-ci.org/display/JENKINS/Bitbucket+pullrequest+builder+plugin
Bitbucket 在 Webhooks 方面确实提供了相当不错的功能,当与 Jenkins Git 插件一起使用时,确实允许根据各种 Bitbucket 事件(例如 Pull Request 更新)触发构建。
还有 Bitbucket Webhook 插件,但是在动态选择要构建的分支方面,它同样没有提供太多帮助。
https://wiki.jenkins-ci.org/display/JENKINS/BitBucket+Plugin
然而,这似乎会触发 repo 的轮询,然后尝试构建任何不同于主分支的分支。
我们的用例是允许开发人员创建自己的分支,然后他们为其创建对开发分支的拉取请求 (Pull Request)。
似乎没有任何方法可以触发使用开发人员创建的分支作为构建分支的构建(除了前面提到的 Bitbucket Pull Request Builder)。
我这样说是对的还是错的?
答案1
我们为每个开发人员创建一个 Jenkins 作业,然后使用参数化的 Jenkins 构建,只需输入分支名称并单击构建即可。我知道它不是完全自动化的,但它运行得足够好。然后,您可以使用 Stash 通知插件向 Bit Bucket 发出信号,表示构建良好 - 您会在 Bit Bucket 中看到一个漂亮的绿色勾号。
答案2
我已经在客户的公司实施了这样的解决方案,我认为 BitBucket 拉取请求插件非常棒,可以满足大多数要求。
你是对的,BitBucket 拉取请求插件是你最好的选择,否则它可能需要你自己开发一个插件,但我真的不认为你应该这样做,因为该插件允许你做你能想到的一切。
根据您的情况,您可以配置插件以仅构建特定分支或所有分支。
假设一个开发人员从开发分支中签出一个新分支,然后他开发并推送提交,配置为多存储库多分支管道的 Jenkins 作业每 10 分钟扫描一次 BitBucket 团队,当它识别出已推送新代码时,它会自动为拉取请求创建一个新作业,并为分支创建一个新作业。
当拉取请求作业完成时,它会将构建状态(成功、失败)通知 BitBucket,然后审阅者会在 Confluence 中看到绿色标记,这意味着该作业已使用新代码正确完成,然后他会审阅代码 - 这给了他两个因素:第一个是代码与开发分支上的代码配合良好,第二个因素是他自己的代码审查,如果他批准代码,那么新代码将合并到开发中,拉取请求将自动关闭(或不关闭 - 它可以在插件中配置),下次扫描运行时,它会识别推送到开发并触发新的运行。
如果您查看插件配置,您可以配置团队内的哪些存储库以及每个存储库内的哪些分支应该自动构建。
您可以查看我为该客户编写的管道我的 Github 账户。
希望我的回答对你有帮助。
答案3
我们也遇到了这个问题,最终发现通用 Webhook 触发器完美满足了我们所有的需求。
此插件使您能够基于 bitbucket webhook 定义触发器,而无需在作业中定义 SCM 步骤,还能够轻松从中提取任何所需的参数事件负载由 Bitbucket 发送。
它对 Freestyle Jobs、Pipeline Jobs 和 Job DSL 有出色的支持。
唯一棘手的部分是将 webhook 与 Jenkins Jobs 匹配,这不会像其他触发器一样使用存储库 URL 自动完成,但我们使用内置令牌机制来控制哪些作业由不同的存储库 webhook 触发,从而为我们提供了所需的映射。
总的来说,我们已经使用这个插件几个月了,它运行良好。