使用GitLab API设置外部问题跟踪器设置?

时间:2014-05-07 09:37:30

标签: jira gitlab

我使用GitLab和外部问题跟踪器(JIRA),效果很好。

我的问题是当我创建一个新的GitLab项目(使用API​​)时,我必须使用GitLab的项目设置并手动选择我想要使用的问题跟踪器和手动输入我的外部问题跟踪器的项目ID。

这个屏幕会更有说服力: GitLab external issue tracker settings http://image.bayimg.com/9f43dcebf9a03c03e711b0e208d9e46ca95d6781.jpg

(我说的两个字段是" 问题跟踪器"" 问题跟踪器中的项目名称或ID &# 34)

所以这是我的问题:有没有办法设置这两个字段自动,使用API​​还是其他?目前,GitLab API未提及有关外部问题跟踪器设置的任何内容。

1 个答案:

答案 0 :(得分:2)

此代码帮助我使用Apache HttpClientJsoup自动设置GitLab的外部问题跟踪器设置。 这段代码绝对不是100%好,但它显示了主要的想法,即重新创建Web表单发送的相应POST请求。

// 1 - Prepare the HttpClient object :
BasicCookieStore cookieStore = new BasicCookieStore();
LaxRedirectStrategy redirectStrategy = new LaxRedirectStrategy();

CloseableHttpClient httpclient = HttpClients.custom()
                .setDefaultCookieStore(cookieStore)
                .setRedirectStrategy(redirectStrategy)
                .build();

try {
        // 2 - Second you need to get the "CSRF Token", from a <meta> tag in the edit page :
        HttpUriRequest getCsrfToken = RequestBuilder.get()
                        .setUri(new URI("http://localhost/_NAMESPACE_/_PROJECT_NAME_/edit"))
                        .build();
        CloseableHttpResponse responseCsrf = httpclient.execute(getCsrfToken);
        try {
                HttpEntity entity = responseCsrf.getEntity();
                Document doc = Jsoup.parse(EntityUtils.toString(entity));
                String csrf_token = doc.getElementsByAttributeValue("name", "csrf-token").get(0).attr("content");

                // 3 - Fill and submit the "edit" form with new values :
                HttpUriRequest updateIssueTracker = RequestBuilder
                                .post()
                                .setUri(new URI("http://localhost/_NAMESPACE_/_PROJECT_NAME_"))
                                .addParameter("authenticity_token", csrf_token)
                                .addParameter("private_token", "_MY_PRIVATE_TOKEN_")
                                .addParameter("_method", "patch")
                                .addParameter("commit", "Save changes")
                                .addParameter("utf8", "✓")
                                .addParameter("project[issues_tracker]", "jira")
                                .addParameter("project[issues_tracker_id]", "_MY_JIRA_PROJECT_NAME_")
                                .addParameter("project[name]", "...")
                                ...
                                .build();

                CloseableHttpResponse responseSubmit = httpclient.execute(updateIssueTracker, httpContext);

        } finally {
                responseCsrf.close();
        }
} finally {
        httpclient.close();
}

更改_NAMESPACE_/_PROJECT_NAME_以使其与您的项目网址相对应,使用管理员帐户的令牌更改_MY_PRIVATE_TOKEN_,然后使用您的jira项目名称更改_MY_JIRA_PROJECT_NAME_