2014-05-07 80 views
3

我在外部問題跟蹤器(JIRA)中使用GitLab,它運行良好。使用GitLab API設置外部問題跟蹤器設置?

我的問題是,當我創建一個新的GitLab項目(使用API​​),我必須去GitLab的項目設置和手動選擇問題跟蹤我想使用手動進入我的外部項目的id問題跟蹤器。

該屏幕會更加雄辯: GitLab external issue tracker settings http://image.bayimg.com/9f43dcebf9a03c03e711b0e208d9e46ca95d6781.jpg

(這兩個領域我講的是「問題跟蹤」和「項目名稱或ID的問題跟蹤」)

所以這裏是我的問題:有沒有辦法設置這兩個字段自動,使用API​​或其他?目前,GitLab API沒有提及有關外部問題跟蹤器設置的任何信息。

+0

無法使用GitLab API自動設置外部問題跟蹤器設置,但我使用[Apache HttpClient](https://hc.apache.org/)實現了這一點。 – PierreF

回答

2

此代碼幫助我使用Apache HttpClientJsoup自動設置GitLab的外部問題跟蹤器設置。 此代碼絕對不是100%好,但它顯示了主要想法,即重新創建相應的POST Web表單發送的請求。

// 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_與您的管理員帳戶的令牌,並改變_MY_JIRA_PROJECT_NAME_與...您的JIRA項目的名稱。