Bitbucket Jenkins插件构造错误的推送URL

时间:2018-02-02 21:28:09

标签: jenkins plugins bitbucket

我们使用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页面的链接。插件中的上述方法似乎是通过删除项目之后的所有内容并添加repo的“全名”来构造该URL的结帐URL,从而导致上述错误的URL。

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

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

1 个答案:

答案 0 :(得分:0)

我找到了失败的原因。

问题是,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