61

我在 BitBucket 上托管了一个 git 存储库,并在存储库和我的 Jenkins 服务器之间设置了 SSH 身份验证。我可以在 Jenkins 上手动构建,但无法让 BitBucket 上的 Jenkins 服务触发构建。

Jenkins configuration:  
- Project Name: [my_jenkins_job]  
- Build Triggers:  
--Trigger Builds Remotely:  
---Token: [token]

BitBucket configuration:  
- Endpoint: http://[my_jenkins_address]/job/[my_jenkins_job]/build (I've also tried build?token=[token])  
- Project Name: [my_jenkins_job]  
- Module Name: [blank]  
- Token: [token]

访问http:// {my_jenkins_address}/job/ {my_jenkins_job}/build?token={token}会正确启动构建。

为什么推送对 BitBucket 的更改不会导致 Jenkins 启动构建?

4

7 回答 7

79

由于 Bitbucket 的 Jenkins Hook 对我来说根本不起作用,而且我为不同的分支有不同的 Jenkins 项目,我来到了这个解决方案:

  • 在您的 Jenkins 上安装Bitbucket 插件
  • 将普通的 Post 作为 Hook 添加到您的 Bitbucket 存储库(Settings -> Hooks)并使用以下 url:

https:// YOUR.JENKINS.SERVER:PORT /bitbucket-hook/

如果你在 jenkins 上设置了身份验证,那么 URL 必须像

https:// USERNAME:PASSWORD@YOUR.JENKINS.SERVER:PORT /bitbucket-hook/

  • 按如下方式配置您的 Jenkins 项目:
  • under build trigger enable将更改推送到 BitBucket 时生成
  • 源代码管理下选择GIT;输入您的凭据并定义要构建的分支(如**feature/*

通过这种方式,我有三个构建项目,一个用于所有功能,一个用于开发,一个用于发布分支。确保在 URL 末尾包含斜杠 ('/'),​​否则钩子将不起作用。

最好的是,您不必为新的 Jenkins 项目添加新的钩子。

于 2015-01-31T10:15:16.343 回答
40

我将我们的 Jenkins 实例设置为每分钟轮询存储库。这还不足以满足您的需求吗?

我们的 Jenkins 配置:

构建触发器 > 轮询 SCM = 已选中

构建触发器 > 轮询 SCM > 计划 =

# every 1 minute
*/1 * * * *
于 2012-06-27T16:44:50.880 回答
12

实际上,您可以使用 Bitbucket 服务在 Jenkins 中使用它,但需要一些时间才能使其正常工作。

如果您使用身份验证,则可以从可以创建构建的用户之一获取 API 令牌。我为 Bitbucket 创建了一个单独的帐户。您至少需要Jenkins 1.426 才能使用 API 令牌。然后,您可以将 HTTP 身份验证与 API 令牌用作 Bitbucket 服务的密码。

这是我的设置方式:

端点: http://[bitbucket]:[APITOKEN]@[www.example.com/jenkins/]

项目名称: [NameOfMyJenkinsProject]

模块名称: [空]

令牌: [在 Jenkins 项目设置中找到的令牌]

在我这样设置之后,我能够使用令牌和身份验证来启用来自 Bitbucket 的推送触发构建。

于 2012-12-21T01:05:14.333 回答
11

如果您在 Jenkins 中使用身份验证,则令牌是无用的。

使用 Git 插件,并在其中使用 POST 挂钩http[s]://your.site.com[/jenkins]/git/notifyCommit?url=git@bitbucket.org:your-username/your-repo.git。确保轮询已开启并按某个值安排,否则这将不起作用。

于 2012-09-04T02:07:03.633 回答
6

使用 Poll SCM 很好,但是它也有一些缺点,它会从你的 GIT 存储库中获取元数据,无论如何它会使用你的 bitbucket 服务器和 Jenkins 服务器的一定百分比的带宽。

如果有新的更新到来,最好让 Bitbucket 知道何时触发 Jenkins。如果您使用的是 bitbucket 最新版本,则有一个插件名称“Stash webhooks for Jenkins”现在与 Bitbucket 兼容。

在这个插件中,您只需指定 Jenkins URL 和 JOB 名称,这也为 Jenkins 和 Bitbucket 之间提供了额外的安全层。 在此处输入图像描述

这是插件(Stash webhooks for Jenkins,不称为 Bitbucket webhooks for Jenkins),可以从 Atlassian Marketplace 下载。

在此处输入图像描述 以上是附加设置,您必须在其中指定 Jenkins URL 和 Repo Clone URL。使用触发器,您还可以检查连接等。

插件链接:Jenkins 的 Bitbucket webhooks

这个插件是如何工作的:

  1. 在 Jenkins 中安装 Git 插件。将您的项目配置为使用 Git 进行源代码管理。您需要将用于配置的存储库 URL 保留在 Stash 中。在 Build Triggers 中启用 Poll SCM 选项。这是远程触发构建所必需的。由于我们真的不需要轮询,您可以将轮询频率设置为非常不频繁地轮询。保存您的项目配置。
  2. 输入 Jenkins 实例的 URL 和配置 Jenkins 使用的存储库 URL。您可以使用下拉列表获取每个支持的协议的克隆 URL。之后,随意更改它以匹配您的 Jenkins 实例。
  3. 就是这样!

现在配置了 Jenkins 和 Stash,如果您提交代码,将自动发生构建触发器。发生的情况是 post-receive 钩子向 Jenkins 发出 GET 请求,然后告诉它轮询存储库(为什么需要打开轮询)。投票检查是否真的有任何变化。既然有,它就会触发构建!

于 2016-03-30T06:46:33.247 回答
4

只需安装 bitbucket 插件并按照插件页面上的说明进行操作:

使用 URL JENKINS_URL/bitbucket-hook(不需要凭据)使用 POST 挂钩配置您的 BitBucket 存储库。每次提交时,将触发所有启用了“将更改推送到 BitBucket 时构建”选项的作业。

见这里:https ://wiki.jenkins-ci.org/display/JENKINS/BitBucket+Plugin

于 2014-11-28T18:40:26.310 回答
0

我在这个问题上苦苦挣扎了很久,在 Jenkins 文档中找不到解决方案,我在 Cloudbees 支持站点找到了一个解决方案。

您只需将这些两个 webhook 添加到您的 bitbucket 存储库中,它就可以正常工作:

https://JENKIN_URL/bitbucket-scmsource-hook/notify
https://JENKIN_URL/bitbucket-hook

我为所有管道工作,甚至是 MultiBranch 的。

希望这对某人有帮助;)

ADA

于 2019-01-26T14:13:52.463 回答