【问题标题】:Bitbucket Jenkins plugin constructs wrong push URLBitbucket Jenkins 插件构造错误的推送 URL
【发布时间】:2018-02-05 17:05:33
【问题描述】:

我们使用 Bitbucket 服务器并希望在将某些内容推送到 Bitbucket 时触发 Jenkins 构建。

我尝试根据此页面设置所有内容: https://wiki.jenkins.io/display/JENKINS/BitBucket+Plugin

所以我在 Bitbucket 中创建了一个 Post Webhook,指向 Jenkins Bitbucket 插件的端点。

当推送发生时,Bitbucket 成功通知插件。根据 Jenkins 日志,该插件随后遍历所有选中“将更改推送到 BitBucket 时构建”的作业,并尝试将该作业的 repo URL 与发生的推送的 URL 匹配。

所以,如果 repo URL 是 https://jira.mycompany.com/stash/scm/PROJ/project.git,插件尝试匹配它 https://jira.mycompany.com/stash/PROJ/project,显然失败了。

根据 Atlassian 的官方信息,无法阻止 Bitbucket 在路径中插入“/scm/”部分。

Bitbucket Jenkins插件中对应的代码在com.cloudbees.jenkins.plugins.BitbucketPayloadProcessor类中:

private void processWebhookPayloadBitBucketServer(JSONObject payload) {
    JSONObject repo = payload.getJSONObject("repository");
    String user = payload.getJSONObject("actor").getString("username");
    String url = "";
    if (repo.getJSONObject("links").getJSONArray("self").size() != 0) {
        try {
            URL pushHref = new URL(repo.getJSONObject("links").getJSONArray("self").getJSONObject(0).getString("href"));
            url = pushHref.toString().replaceFirst(new String("projects.*"), new String(repo.getString("fullName").toLowerCase()));
            String scm = repo.has("scmId") ? repo.getString("scmId") : "git";
            probe.triggerMatchingJobs(user, url, scm, payload.toString());
        } catch (MalformedURLException e) {
            LOGGER.log(Level.WARNING, String.format("URL %s is malformed", url), e);
        }
    }
}

在 Bitbucket 发送给插件的 JSON 有效负载中,不会出现实际的结帐 URL,只有指向存储库的 Bitbucket 页面的链接。插件中的上述方法似乎是通过删除包括项目/之后的所有内容并添加存储库的“全名”来从该 URL 构造结帐 URL,从而导致上述错误 URL。

来自 Atlassian 的官方信息是 Bitbucket 无法阻止将“scm”部分添加到结帐 URL。

这是 Jenkins 插件中的错误吗?如果是这样,该插件如何为任何人工作?

【问题讨论】:

  • 它是否适用于 SSH?我已经使用 Bit Bucket 和 Jenkins 设置了网络挂钩,它们运行良好。

标签: jenkins plugins bitbucket


【解决方案1】:

我找到了失败的原因。

问题在于 Jenkins 的 Bitbucket 插件确实考虑了路径中的 /scm 部分,但前提是它是主机名之后的第一部分

如果您的 Bitbucket 服务器实例不是在其自己的域下而是在另一个服务的路径下配置,则匹配结帐 URL 将失败。

例子:

https://bitbucket.foobar.com/scm/PROJ/myproject.git 可以工作,

https://jira.foobar.com/stash/scm/PROJ/myproject.git 将不起作用。

也有这个问题的人已经为插件创建了一个修复程序,其拉取请求正在等待处理:JENKINS-49177: Now removing first occurrence of /scm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2017-12-27
    • 1970-01-01
    相关资源
    最近更新 更多