如何从Bitbucket仓库触发Jenkins管道

32

我已经成功在Bitbucket中为一个Jenkins自由风格项目设置了Webhook触发器,用于测试目的。

不幸的是,我的Jenkins项目使用Pipeline格式,我无法让Bitbucket触发这种类型的项目。问题似乎是没有注册Jenkins项目以从Bitbucket Webhook引用的存储库中拉取代码,并且Jenkins会回复:

Error: Jenkins response: No git jobs using repository: ssh://git@myhost:7999/xxx/testing-jenkins.git and branches: master No Git consumers using SCM API plugin for: ssh://git@myhost:7999/xxx/testing-jenkins.git

管道项目的设置方式是在给定的存储库(ssh://git@myhost:7999/xxx/testing-jenkins.git)中找到Jenkinsfile,使用“从SCM获取管道脚本”选项。

因此实际上存在一种“git消费者”用于管道,但这似乎没有被Jenkins考虑到,可能是因为这不是真正的项目源,而是管道源。

是否有将Bitbucket和Jenkins管道项目集成的示例?我无法找到任何示例。


很不幸,我一直在尝试寻找解决这个问题的方法,如果我找到了解决方案或示例,我会继续搜索并更新。 - Signus
有进展了吗?到目前为止我也没做出来。 - Cross
https://issues.jenkins-ci.org/browse/JENKINS-38447 这是进展。 - Gujarat Santana
7个回答

17
如果你正在寻找完整的Bitbucket和Jenkins Pipeline,我强烈建议使用Bitbucket Branch Source Plugin。该插件将发现所有分支和拉取请求,并构建所有在存储库根目录中具有JenkinsFile的分支和拉取请求。
你也可以创建一个作为Bitbucket团队的项目,它将扫描您组织的所有存储库: enter image description here 请参见CloudBees的官方文档

6
虽然这个回答提供了一个不错的建议,但它并没有完全解决问题。我已经安装了这个插件,但是仍然无法在流水线中触发任务:“Jenkins响应:没有使用该存储库的git任务”(而这在自由风格作业中是可以工作的)。 - Sven

11

我曾经也遇到过同样的问题,下面是我跟随的关键点。

在Jenkins流水线作业中,

  1. 在构建触发器下勾选“远程触发构建(例如从脚本)”,并填写某些随机且唯一的令牌作为“身份验证令牌”。

在BitBucket存储库中,

  1. 进入“设置 > 服务”

  2. 从下拉菜单中选择“Jenkins”,然后点击“添加服务”。

    • 勾选“Csrf Enabled”

    • 端点http://username:apitoken@yourjenkinsurl.com/

      您可以在Jenkins主页上找到用户名和API令牌。选择用户,然后点击配置。在“API令牌”下,点击“显示API令牌”按钮,就能看到用户名和API令牌了。

    • 模块名称 :这是可选的。它可以是任何要监视的特定文件或文件夹。

    • 项目名称 :Jenkins中的项目名称。

      如果作业位于某个文件夹结构中,例如我有'MyTestFolder/MyTestPipelineJob',则要填写的项目名称为'MyTestFolder/job/MyTestPipelineJob'。

    • 令牌 :在Jenkins作业中创建的“身份验证令牌”。

准备好了!!

我参考了http://felixleong.com/blog/2012/02/hooking-bitbucket-up-with-jenkins/ 和我的一些直觉。 :)


19
不再得到Bitbucket的支持。请参考此链接了解有关Jenkins服务管理的信息:https://confluence.atlassian.com/bitbucket/jenkins-service-management-251724180.html - Morgan Christiansson
2
以上已确认。 - Cross

4
一个简单的解决方案是在Jenkins中使用通用Webhook触发器插件
你需要做以下几点:
  • 在自由式或流水线作业中启用它。
  • 配置一个令牌字符串。
  • 构建JSONPath:s以从Bitbucket Webhook中收集所需内容。
  • 在Bitbucket中添加插件终端。JENKINS_URL/generic-webhook-trigger/invoke?token=whatever_you_picked
当触发插件时,该插件将为你提供清晰的反馈,以便于故障排除。
从Webhook中选择所需的值以克隆正确的存储库或执行其他操作取决于你。

3
我也遇到了这个问题。我的解决方法是创建一个自由风格项目,可以通过WebHook触发,并在该项目完成后触发Pipeline。
同时,您可以关注Jenkins的以下bug以获取修复信息: https://issues.jenkins-ci.org/browse/JENKINS-38447

2

花了好几个小时才在2017.10年找到如何做到以下内容:

  1. 像@JPLemelin描述的那样,使用Bitbucket团队/项目新建一个Jenkins项目
  2. 参考文档:https://support.cloudbees.com/hc/en-us/articles/115000051132-How-to-Trigger-Multibranch-Jobs-from-BitBucket-Cloud-,安装插件:The BitBucket Branch Source plugin.
  3. 进入Bitbucket,添加Webhook:${your-jenkins-url}/bitbucket-scmsource-hook/notify

完成以上三个步骤后,我终于成功让流水线作业在提交到Bitbucket之后运行。


1
我的结果是:Jenkins 响应:java.lang.Exception: 未找到 X-Event-Key HTTP 标头。我不确定第一步是否正确,我已经为所有内容创建了“组织文件夹”,它可以正确扫描 Bitbucket。 - Sven

1
我遇到了完全相同的问题......原因是使用了 */master 作为分支指定器。我需要明确写出:origin/master(不带通配符)。现在它正常工作了。

1

我最终成功地使用Jenkinsfile在Multi Branch Pipeline中完成了这项工作:

在Bitbucket中,我创建了一个带有我的Jenkins-URL和克隆URL的Webhook,在Webhook中,我放置了以下URL(与Jenkins项目中的URL完全相同):

http://<jenkins>/git/notifyCommit?url=http://<user>@<bitbucket>/scm/<project>/<repo>.git

当我测试触发器时,结果如下:
No git jobs using repository: http://<user>@<bitbucket>/scm/<project>/<repo>.git and branches: 
Scheduled indexing of <repo>

所以它没有触发任何作业,但它触发了多分支扫描,因此我的更改的分支正在构建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接