(一)JIRA API 對接


系統要跟JIRA對接,將本系統數據發送給jira,jira數據返回給本系統。

 

開始一頭霧水怎么讓數據傳過去已什么形式存在,是存數據庫呢還是怎么顯示呢。研究半天發現其實只要將原數據作為json數據提供給jira接口,jira接口進行創建issue。

但前提在於要先創建項目。

jira的API 有很多有創建項目的,創建問題等。在線找到了6.1版本的API,根據這個文檔可以查看是get還是post,需要哪種類型的json文件,返回值是什么。https://docs.atlassian.com/DAC/rest/jira/6.1.html

 

了解了jira的api開始寫本系統的接口,jira使用的是restful的接口,所以很好調用。

第一步使用了soapui將數據格式先調通,而在工具下發現了很多問題,但都有一定的返回值,詳細描述了錯誤。原因1:json文件的錯誤;原因2:沒有給定權限。

怎么解決呢?1.json格式先查看json格式在看內容。2.返回權限問題時,想到添加個header然后加個cookies。

 

所以在調用接口是先調用取cookies的接口,添加到header中,然后創建issue。

string seesionsjson =HttpPost("Post","xxxxx:8080/rest/auth/1/session", postuser, "");

string issueNumber = HttpPost("Post", "xxxxxx/rest/api/2/issue", postBody, seesionsjson);

public string HttpPost(string type, string url, string body, string header)
{
try
{
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = type;
request.Accept = "text/html, application/xhtml+xml, */*";
request.ContentType = "application/json";
if (header != "")
{
JObject obj = (JObject)JsonConvert.DeserializeObject(header);
string ss = obj["session"]["name"].ToString() + "=" + obj["session"]["value"].ToString();
request.Headers.Add("Cookie", ss);

}
byte[] buffer = encoding.GetBytes(body);
request.ContentLength = buffer.Length;

request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
catch (Exception ex)
{
return "";
}
}

在調通接口之后,jira中會創建相關的問題,問題類型為story或者task或者自定義的類型。

再說一下自定義的問題類型如何通過接口來創建該問題類型的問題。

首先要先在jira中創建問題類型,再分配給項目。然后通過  xxx/rest/api/2/issuetype 接口查看自定義問題類型的id,找到id即可。

 從jira拿數據返回給本系統:

使用httpget方法與post類似,若需要登錄后取值給定header值。

public string HttpGet(string Url, string header)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "GET";
request.ContentType = "application/json; charset=UTF-8";
if (header != "")
{
JObject obj = (JObject)JsonConvert.DeserializeObject(header);
string ss = obj["session"]["name"].ToString() + "=" + obj["session"]["value"].ToString();
request.Headers.Add("Cookie", ss);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}

在使用類中

  string IssueJson= a.HttpGet("xxx:8008/jira/getissue?prokey=" + prokey, "");該接口是自己開發,大量數據已整理。(jira自帶的接口可用/rest/api/2/search?jql=project=prokey  取相應的值)

通過將json數據反序列化成對象,json中有數組為list,對象與json數據的字段相同。json如{"a":"1","b":"2","c":[{"d":"3"},{"e":"4","f":[{"g":"5"}]}]}

var jo = JsonConvert.DeserializeObject<T>(IssueJson);
List<T> aa= new List<T>();

for (int k = 0; k < jo.Issues.Count; k++)
{ 
for (int i = 0; i < jo.Issues[k].Moduls.Count; i++)
{ 
for (int j = 0; j < jo.Issues[k].Moduls[i].Functions.Count; j++)
{
T ad = new T();
ad.ChildSystem = jo.Issues[k].ChildSystem;
ad.ModulName = jo.Issues[k].Moduls[i].ModulName;
ad.FunctionName = jo.Issues[k].Moduls[i].Functions[j].FunctionName;
ad.ARID = ARID;
ad.IsDelete = 0;
aa.Add(ad);
}
}
}
return aa;

 

public class T
{
public List<T> Issue { get; set; }
public string code { get; set; }
public string message { get; set; }
}

另一種json格式:[{"d":"3"},{"e":"4","f":[{"g":"5"}]}]

var jo = JsonConvert.DeserializeObject<List<T>>(IssueJson);

 

 

ps:jira插件的研究

在jira中創建成功后,jira中的展示。

研究了下jira的插件structure,可以將需求以下拉的形式展示,下載插件版本,然后在jira的插件中add-to插件的jar包,之后添加license,否則無法出現插件。還有一個情況如果版本過高或過低會導致頁面刷不出來,再去下載個版本一致的即可,就會出現此頁面。

可進行自動也可以手動添加。手動添加使用add-》search&add拖動即可。

自動則點automation,添加規則。添加

 一個小錯誤:在開發完成后部署到測試環境,發現永遠調不通,咋回事,報500錯,原來是環境沒部署全。全量發布一版正常了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM