【问题标题】:How do I get Jenkins to build on push to a BitBucket git repository?如何让 Jenkins 在推送到 BitBucket git 存储库的基础上进行构建?
【发布时间】:2012-06-29 04:07:14
【问题描述】:

我在 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 启动构建?

【问题讨论】:

  • 在 IIS 中通过反向代理运行时,是否有人遇到以下解决方案的问题?

标签: git jenkins bitbucket


【解决方案1】:

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

  • 在您的 Jenkins 上安装 Bitbucket Plugin
  • 将普通的 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 项目:
  • 构建触发器 下启用 在将更改推送到 BitBucket 时构建
  • 源代码管理下选择GIT;输入您的凭据并定义要构建的分支(如 **feature/*

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

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

【讨论】:

  • 如果我家里的机器上有本地 jenkins 服务器,这也可以吗?还是我需要一个可以从外部访问的公共 jenkins 服务器?
  • 当您能够在外部处理本地机器表单时,它应该可以工作。否则 bitbucket 不知道你的 jenkis 地址。
  • 此答案优于已接受的答案和建议投票的答案。
  • @KimStacks 同意了,我将经常站点的链接添加到Polling Must Die
  • 这救了我:确保在 URL 末尾包含斜杠 ('/'),​​否则钩子将不起作用。
【解决方案2】:

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

我们的 Jenkins 配置:

构建触发器 > 轮询 SCM = 检查

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

# every 1 minute
*/1 * * * *

【讨论】:

  • 这完全适合我们的情况,谢谢!但是……有人使用这项服务吗?
  • 在我所知道的任何地方都可以工作......无论出于何种原因,在有问题的盒子上都不起作用......通过运行手动构建,工作就可以成功:(
  • 对于新读者,您应该查看this answer instead 并考虑改为挂钩推送。它减少了喋喋不休和处理。 that answer 中提到的 Bitbucket 插件似乎仍然是使用 Bitbucket 时的首选方法。
【解决方案3】:

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

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

这就是我的设置方式:

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

项目名称: [NameOfMyJenkinsProject]

模块名称: [空]

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

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

【讨论】:

  • 你需要任何特定的插件来让它工作吗?虽然我认识的其他人这样做,但我无法让它工作。
  • @JohnBubriski,我有 Git 插件设置,但我认为这与接收此类通知无关。你能弄明白吗?
  • 不,我不是,但我 99% 确信这与我在 IIS 中为端口 80 的反向代理后面运行 Jenkins 的事实有关...我设置了它使用直接端口,它工作正常。有这方面的经验吗?
  • @JohnBubriski 我遇到了同样的问题(Bitbucket 钩子没有触发 Jenkins 构建,我有一个反向代理设置)。当我取消选中 Bitbucket 挂钩中的 csrf enabled 标志时,它开始工作。
【解决方案4】:

如果你在 Jenkins 中使用身份验证,令牌是没用的。

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

【讨论】:

    【解决方案5】:

    使用 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。使用触发器,您还可以检查连接等。

    插件链接:Bitbucket webhooks for Jenkins

    此插件的工作原理:

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

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

    【讨论】:

      【解决方案6】:

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

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

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

      【讨论】:

      • 我也没有。我们是否必须对 Jenkinfile 进行一些更改?
      【解决方案7】:

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

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

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

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

      希望这对某人有所帮助;)

      阿达

      【讨论】:

        猜你喜欢
        • 2013-04-11
        • 2013-03-02
        • 1970-01-01
        • 1970-01-01
        • 2011-12-03
        • 1970-01-01
        • 2019-05-12
        • 2019-12-11
        相关资源
        最近更新 更多