透過 VS Team Services 達成持續部署與交付 - 以 Jenkins 為例

Release Management(VS Team Services)自動化您的部署,讓您可以輕鬆的交付您的應用程式/服務並且時常交付。您可以在 VS Team Services 上設置持續整合(CI)與持續交付(CD)的所有過程。然而,如果您已經在 Jenkins 上設定您的 CI Pipeline,VS Team Services 擁有很好的整合特點,透過 API 可以讓您從任何第三方服務串聯至 VSTS 的發佈服務,此文即以 Jenkins 做說明。

這篇文章假設您已經設置了持續整合 CI,每次程式碼簽入/提交即建置您的專案。看完這篇文章之後,您應該能夠在 Release Management(VSTS) 中自動化觸發發佈,透過 Jenkins 插件的幫助:Visual Studio Team Services 持續部署

按照以下步驟,使用 Jenkins 與 Release Management 來為您的應用程式設置持續部署:

  1. 設定已封存為成品的 Jenkins 專案
  2. 在 VS Team Services 上設定 Release Definition
  •  為 Jenkins 創建 Service Endpoint
  • 連結 Jenkins 建置(build)專案作為成品來源
  • 設定部署步驟
  1. 從 Jenkins 自動觸發 release

步驟0:必備條件

我們假設您已經有以下可以使用的項目:

  1. 能正常運作的 Jenkins 安裝
  2. 用以建置您的應用程式的 Jenkins 專案
  3. 一個 VS Team Services 帳號 

步驟1:建置已封存成品的 Jenkins 專案

您需要有一個 Jenkins 專案,設定了所有您建置專案所需的動作與步驟。一旦你可以建置這個應用程式,你需要發佈可以被釋出/部署的成品(包含組成這個應用程式/服務的所有檔案)。這些可以透過這簡單的步驟達成,例如:在 Post Build Actions 部分中的 Archive the artifacts。

 

jenkins-archive-500x105

 

一旦你能封存這些成品,你就可以創建一個新的建置,並檢查這些封存的成品是否有在你的建置細節中顯示為 Build Artifacts

 

jenkins-build-500x226

此外,您需要使用 Jenkins 設置 CI,每個程式碼簽入/提交時可以自動觸發。這個 CI 的設定是獨立於您所使用的程式碼儲存庫系統。

步驟2:在 VS Team Services 上建置 release 定義

現在,您可以用 Jenkins 產生或封存的成品來創建新的建置,而下一步就是要能夠用 VS Team Services – Release Management 部署這些成品。您可以參考以下 YouTube 影片,教您如何設定可部署 Jenkins 成品的 Release Definition,或者按照影片下方提到的步驟進行。

 

[embed]https://www.youtube.com/watch?list=PLP3SfFPBD6cTJ2Jp5cHvjQ3flrbwQu-nN&v=ZC4hWYqdP_o[/embed]

2.1 為 Jenkins 建立 Service Endpoint

為了取得 Jenkins 產生的建置成品,Release Management(VS Team Services)必須要能夠連結到它。因此您需要創建一個 Service endpoint 連接到您的 Jenkins 服務。

到 VS Team Services 中的專案設定(project settings):

 

vsts-project-settings

 

在服務標籤下(services tab),選擇新的 Jenkins service endpoint。

jenkins-endpoint-select-500x327

 

如以下範例所示,輸入所需的欄位以創建終端:

 

jenkins-endpoint-500x315

 

如果您的 Jenkins 服務是在地端且無法讓 VS Team Services 取得,請您不必擔心。只要以正確的 URL 與驗證資訊創建一個  endpoint,並確保 release 在運作時 release agents 看的到 Jenkins 服務。請參閱本文了解有關 agent 如何看到成品的資訊。

2.2 連結 Jenkins 建置專案作為成品來源

建立一個新的 Release definition。如果你正在使用 guided experience 請點選那個+號…

 

rd-create-1

 

在成品選擇的頁面,選擇 Jenkins 作為成品來源並且在 Service(Manage)的下拉選單中選擇您想要部署的 Jenkins endpoint(步驟1創建的)建置成品。

 

rd-create-3

 

若您不慎選錯或是遺漏了選項,您可以隨時從 Release Definition 編輯頁面中的 [成品(Artifacts)] 連接您的成品。

 

rd-create-4 rd-link-artifact

2.3 建立部署步驟

這個步驟取決於您想部署之應用程式的類型以及您想部署在哪裡,根據不同的應用類型和部署方法,您可以選擇您需要的步驟/任務在您的 Release Definition 中。根據您的需要,您還可以針對 Release Definition 定義多個環境。上述提供的影片有提到一些關於這部分的細節,來此瞭解更多有關建立 Release Definition 的資訊。

試著觸發一個新的 Release 吧! 現在這個 Jenkins 成品可以依據您提供的部署步驟被部署了。請參閱下一個步驟以建立持續部署,當有新的建置被創立,這些 release 能在 Jenkins 上自動被觸發。

步驟3:從Jenkins自動觸發release

為了建立持續部署,我們將透過插件使 release 能夠從 Jenkins 自動觸發:Visual Studio Team Services持續部署

這個插件利用 VS Team Services REST APIs 讓您能夠在 Jenkins 建置完成後於 VSTS 或 TFS 上觸發 release。該插件有一個建置後步驟 – 「VS Team Services 持續部署」,請依循以下步驟:

3.0 安裝「VS Team Services 持續部署」插件

如同安裝其他插件,到 [Manage Jenkins] -> [Manage plugins],搜尋「VS Team Services Continuous Deployment」插件名稱並安裝。

使用插件

假設您已經在 VS Team Services - Release Management上創立了 Release Definition 並且連結到 Jenkins 作為成品來源,當您創立建置時,您需要在Jenkins那邊按照以下步驟來自動觸發release。

3.1 新增 Post build action

到 [Job Configuration] 中新增 [post build action] – VS Team Services Continuous Deployment

 

addPostBuildAction

3.2 填入所需欄位

填入所需細節對於這個 post build action 您將會需要以下細節:

Collection URL:   例如 https://fabfiber.visualstudio.com/DefaultCollection <-請注意您會需要這個專案 Collection URL

Team project:  您已完成 Release Definition 的 VS Team Services 專案。

Release definition:  連接此Jenkins作為成品來源的 Release Definition 的名稱。

現在,您需要輸入代表您的驗證資訊,使 Jenkins 觸發最後建構完成的 release, 如果您是使用 VS Team Services,您只需要輸入 PAT。若您是使用 TFS,您需要輸入使用者名稱密碼

 

fillFieldsForPostBuildAction

3.3 完成!在 action 中查看 CD 吧!

現在,您已經自動化您的部署觸發器,進而能夠實現持續部署,當有簽入/提交時,即會觸發建置和 release。趕快在 Jenkins 上手動觸發建置或者透過程式碼簽入/提交啟動 Jenkins 建置,最後即可在 VS Team Services 中觸發 Release。

常見問答:

1.如果我有很多個成品連到我的 Release Definition,該插件還是能觸發 Release 嗎?

A:不能,現階段您只能連結一個成品來源到 Release Definition,插件才有辦法運作。但這個方案很快就會改善。

 

本文翻譯自 Continuous deployment/delivery with Jenkins and VS Team Services