Eric:	不管是 Azure DevOps、Travis CI 還是 Jenkins ,這些 CI Server 經由 webhooks 回傳的資訊,ITFFF 都無法直接去識別。所以要實作一個 webapi 來做為中繼轉換。
吉米:	所以要再次利用 Azure ,來建立 web api 嗎?
Eric:	沒錯,讓我們開始動作吧!
建立一個 web API 的專案,筆者在這邊是選擇使用 Asp.Net Core Web 應用程式 的 API。


因為 IFTTT 接收的格式,只支援 value1、value2、value3 這個欄位名,所以建立一個 IFTTTModel 的類別。
public class IFTTTModel
{
    string value1 {set;get;}
    string value2 {set;get;}
    string value3 {set;get;}
}
接著,進行轉發的實作。實作中,使用 nuget 套件 Restsharp 進行 Post 訊息到 IFTTT。
記得將 RestClinet(...) 內的 ... 指定到 IFTTT 的 webhook url。
public void Post([FromBody] string value)
{
    RestClient client = new RestClient("https://maker.ifttt.com/trigger/CI_Build_result/with/key/den2SL6fXRgg4MJUsAj27w");
    RestRequest request = new RestRequest(Method.POST);
    request.AddHeader("Content-Type", "application/json");
    ITFFFModel model = new ITFFFModel {value1 = "VS", value2 = "Ean", value3 = value};
   var json = JsonConvert.SerializeObject(model);
   request.AddParameter("Image", json, ParameterType.RequestBody);
   var response = client.Execute(request);
}
要注意的是,上面的程式,只是基本框架,還不能滿足我們的需求。使用 PostMan 進行測試,會看到下面的訊息。

接著,將剛剛完成的 web api 發佈到 Azure App Service 。在建立發佈的設定時,選擇 Azure App Service。



因為是第一次建立,筆者選擇使用預設值。完成建立後,可以看到網站 URL 這個資料,這等等會用到。
針對 Travis CI 的部份,我們在 Web API 中,加入一個 travis 的 Controller。並把上面 程式碼復制到 travisController 之中。
[Route("api/[controller]")]
public class travisController : Controller
{
    [HttpPost]
    public void Post([FromBody] string value)
    {
        RestClient client = new RestClient("https://maker.ifttt.com/trigger/CI_Build_result/with/key/den2SL6fXRgg4MJUsAj27w");
        RestRequest request = new RestRequest(Method.POST);
        request.AddHeader("Content-Type", "application/json");
        ITFFFModel model = new ITFFFModel {value1 = "VS", value2 = "Ean", value3 = value};
        var json = JsonConvert.SerializeObject(model);
        request.AddParameter("Image", json, ParameterType.RequestBody);
        var response = client.Execute(request);
    }
}    
在發佈程式到 Azure 後,接著,我們到 Github repository,將 .travis.yml 中 webhooks 的 url 改為 {網站URL}/api/travis 即可。
webhooks:
    urls:
      - https://cirelay20181102082324.azurewebsites.net/api/travis
      
    on_success: change # default: always
    on_failure: always # default: always
    on_start: change   # default: never
    on_cancel: always # default: always
    on_error: always # default: always
接著,要針對 Travis CI 傳過來資料進行解析,並將資料放入 IFTTTModel 之中,才能正確的傳送資料到 Line 之中。
針對 Travis CI 的部份,我們在 Web API 中,加入一個 AzurePipeline 的 Controller。程式的寫法,請參考 Travis 的部份。
接著到 Azure DevOps 的 project settings \ Service hooks 中,將 Web Hooks 中,URL 位置的內容,變成為  {網站URL}/api/travis 即可。

按下 Test 後,Line Notify 就會收到訊息了。但這時傳送的訊息也無法滿足我們的需求,所以要在 AzurePipeline 的 Post 內,進行資訊解析。才能正確傳送所需的訊息到 Line 。
吉米:	Line 的串接動作,跟 E-mail 相比,增加了不少的設定與動作。
Eric:	對啊,除了 Line 之後,接下來,我們來串接 Microsoft Teams 這個溝通平台吧。
吉米:	嗯嗯。
<<待續>>