public void QueueNewBuildTest() { var client = new AzureDevOpsRestApiClient( " ", " ", " ", " "); client.QueueNewBuild(19); Assert.IsTrue(true); }
//命令列處理 private List <isRock.LineBot.MessageBase> ProcessCommand(isRock.LineBot.Event lineEvent) { //把多格空白換成一個 var cmdLine = MergeSpace(lineEvent.message.text); //取消 / ,以空白做分隔符號,切出 var words = cmdLine.ToLower().Replace("/", "").Split(' ').ToList(); var idOrName = ""; //回覆訊息物件集合 var retMessages = new List <isRock.LineBot.MessageBase>(); //執行api必須的參數 var AzureDevOpsProjectName = ""; var AzureDevOpsOrganizationName = ""; var AzureDevOpsUserPAT = ""; var AzureDevOpsUserName = ""; //如果命令中有 setup if (words.Contains("setup") && words[0] == "setup") { //keep data; System.Web.HttpContext.Current.Application[lineEvent.source.userId] = $"{words[1]},{words[2]},{words[3]},{words[4]}"; //System.Web.HttpContext.Current.Application["AzureDevOpsOrganizationName"] = words[1]; //System.Web.HttpContext.Current.Application["AzureDevOpsProjectName"] = words[2]; //System.Web.HttpContext.Current.Application["AzureDevOpsUserName"] = words[3]; //System.Web.HttpContext.Current.Application["AzureDevOpsUserPAT"] = words[4]; retMessages.Add(new TextMessage("環境參數設定完成!")); return(retMessages); } //取得環境設定 if (System.Web.HttpContext.Current.Application[lineEvent.source.userId] == null) { //缺資料,要求輸入 retMessages.Add(new TextMessage("請先使用 /setup 指令設定環境參數. \n ex. /setup [OrgName] [ProjectName] [UserName] [PAT]")); return(retMessages); } else { var para = System.Web.HttpContext.Current.Application[lineEvent.source.userId].ToString().Split(','); //取得資料 AzureDevOpsProjectName = para[1].Trim(); AzureDevOpsOrganizationName = para[0].Trim(); AzureDevOpsUserPAT = para[3].Trim(); AzureDevOpsUserName = para[2].Trim(); } //取得approvers if (words.Contains("get") && (words.Contains("approver") || words.Contains("approvers"))) { // 建立 AzureDevOpsRestApiClient AzureDevOpsRestApiClient client = new AzureDevOpsRestApiClient( AzureDevOpsUserName, AzureDevOpsUserPAT, AzureDevOpsOrganizationName, AzureDevOpsProjectName); var ret = client.GetApprovers(); if (ret != null & ret.count != 0) { var ButtonsTemplateMsg = new isRock.LineBot.ButtonsTemplate(); var msg = $"共有 { ret.count} 個等待簽核項目..."; ButtonsTemplateMsg.text = msg; ButtonsTemplateMsg.title = "等待簽核項目..."; ButtonsTemplateMsg.thumbnailImageUrl = new Uri("https://i.imgur.com/pAiJpHg.png"); foreach (var item in ret.value) { var action = new isRock.LineBot.MessageAction() { label = $"確定簽核 [編號:{ item.id }]", text = "/Make Approve " + item.id }; ButtonsTemplateMsg.actions.Add(action); msg += $"NO.{ item.id } "; } retMessages.Add(new isRock.LineBot.TextMessage(msg)); retMessages.Add(new isRock.LineBot.TemplateMessage(ButtonsTemplateMsg)); } else { retMessages.Add(new isRock.LineBot.TextMessage($"找不到等待簽核的項目...")); } return(retMessages); } //如果命令中有 start & build if (words.Contains("start") && words.Contains("build")) { //找出build後面的元素 var n = words.FindIndex(c => c == "build"); if (words.Count() >= n) { idOrName = words[n + 1]; } //如果沒有 id, return if (string.IsNullOrEmpty(idOrName)) { return(null); } // 建立 AzureDevOpsRestApiClient AzureDevOpsRestApiClient client = new AzureDevOpsRestApiClient( AzureDevOpsUserName, AzureDevOpsUserPAT, AzureDevOpsOrganizationName, AzureDevOpsProjectName); var BuildId = -1; //如果id不是數字 if (int.TryParse(idOrName, out BuildId) == false) { //取得id(文字)所對應的build definition var Definitions = client.GetDefinitions(); //如果成功取回Definitions if (Definitions != null && Definitions.count > 0) { //找對應名稱的 denifition var Definition = from d in Definitions.value where d.name.ToLower() == idOrName.ToLower() select d; if (Definition != null && Definition.Count() >= 1) { //如果有找到對應名稱的 denifition BuildId = Definition.FirstOrDefault().id; } else { retMessages.Add(new isRock.LineBot.TextMessage($"找不到build {idOrName}")); return(retMessages); } } else { retMessages.Add(new isRock.LineBot.TextMessage($"找不到build Definitions")); return(retMessages); } } //如果找不到build if (BuildId <= -1) { return(null); } var ret = client.QueueNewBuild(BuildId); if (ret != null) { retMessages.Add(new isRock.LineBot.TextMessage($"Build {BuildId} 啟動中... \n Build Name : {ret.definition.name} \n Queue ID : {ret.queue.id} \n buildNumber : {ret.buildNumber}")); } else { retMessages.Add(new isRock.LineBot.TextMessage($"Build {BuildId} 啟動失敗...")); } return(retMessages); } if (words.Contains("make") && words.Contains("approve")) { //找出build後面的元素 var n = words.FindIndex(c => c == "approve"); if (words.Count() >= n) { idOrName = words[n + 1]; } //如果沒有 id, return if (string.IsNullOrEmpty(idOrName)) { return(null); } // 建立 AzureDevOpsRestApiClient AzureDevOpsRestApiClient client = new AzureDevOpsRestApiClient( AzureDevOpsUserName, AzureDevOpsUserPAT, AzureDevOpsOrganizationName, AzureDevOpsProjectName); var ret = client.MakeApprove(int.Parse(idOrName), "ok"); retMessages.Add(new isRock.LineBot.TextMessage($"單據編號 : {ret.id} {ret.status}")); return(retMessages); } //最後沒有任何指令被執行 if (retMessages.Count <= 0) { retMessages.Add(new isRock.LineBot.TextMessage("指令錯誤! 什麼事情都沒發生!")); retMessages.Add(new isRock.LineBot.StickerMessage(1, 2)); } return(retMessages); }