使用 Azure DevOps 持續整合及部署

提示

本內容節錄自《適用於 ASP.NET Core 開發人員的 DevOps》電子書,可以從 .NET Docs 取得,也可以免費下載 PDF 離線閱讀。

《DevOps for ASP.NET Core Developers》電子書封面縮圖。

注意

本節詳述使用 Azure DevOps 的持續整合及部署。 您也可以使用 GitHub Actions 來達成此目的。 GitHub Actions 是 GitHub 內建的工作流程引擎,也可用於持續整合及部署。 如需遵循使用 GitHub 建置和部署至 Azure 的指南,請完成下方<將應用程式的程式碼發佈至 GitHub>和<中斷連線本機 Git 部署>章節,然後繼續進行 GitHub Actions 一節

在上一章中,您已為簡單摘要讀取器應用程式建立本機 Git 存放庫。 在本章中,您會將該程式碼發佈至 GitHub 存放庫,並使用 Azure Pipelines 建構 Azure DevOps Services 管線。 管線可讓您持續建置和部署應用程式。 對 GitHub 存放庫的任何認可,都會觸發針對 Azure Web 應用程式預備位置的建置和部署。

在本節中,您將完成下列工作:

  • 將應用程式的程式碼發佈至 GitHub
  • 中斷本機 Git 部署的連線
  • 建立 Azure DevOps 組織
  • 在 Azure DevOps 組織中建立 Team 專案
  • 視需要設定自我裝載式代理程式
  • 建立組建定義
  • 建立發行管線
  • 將變更認可至 GitHub 並自動部署至 Azure
  • 檢查 Azure Pipelines 的管線

將應用程式的程式碼發佈至 GitHub

  1. 開啟瀏覽器視窗並瀏覽至 https://github.com

  2. 按一下標頭中的 + 下拉式清單,然後選取 [新增存放庫]:

    GitHub [新增存放庫] 選項

  3. 在 [擁有者] 下拉式清單中選取您的帳戶,然後在 [存放庫名稱] 文字方塊中輸入 simple-feed-reader

  4. 按一下 建立存放庫 按鈕。

  5. 開啟本機電腦的命令殼層。 瀏覽至儲存 simple-feed-reader Git 存放庫的目錄。

  6. 將現有的 origin 遠端重新命名為 upstream。 執行下列命令:

    git remote rename origin upstream
    
  7. 在 GitHub 上新增指向存放庫複本的新 origin 遠端。 執行下列命令:

    git remote add origin https://github.com/<GitHub_username>/simple-feed-reader/
    
  8. 將您的本機 Git 存放庫發佈至新建立的 GitHub 存放庫。 執行下列命令:

    git push -u origin main
    
  9. 開啟瀏覽器視窗並瀏覽至 https://github.com/<GitHub_username>/simple-feed-reader/。 驗證您的程式碼是否出現在 GitHub 存放庫中。

中斷本機 Git 部署的連線

使用下列步驟移除本機 Git 部署。 Azure Pipelines (Azure DevOps 服務) 會取代和增強該功能。

  1. 開啟 Azure 入口網站,然後瀏覽至暫存 (mywebapp<unique_number>/staging) Web 應用程式。 在入口網站的搜尋方塊中輸入「暫存」即可快速找到 Web 應用程式:

    暫存 Web 應用程式搜尋字詞

  2. 按一下 [部署中心]。 新的面板隨即出現。 按一下 [中斷連線] 移除上一章中新增的本機 Git 原始檔控制組態。 按一下 [是] 按鈕來確認移除作業。

  3. 瀏覽至 mywebapp<unique_number> App Service。 提醒您,入口網站的搜尋方塊可用來快速找出 App Service。

  4. 按一下 [部署中心]。 新的面板隨即出現。 按一下 [中斷連線] 移除上一章中新增的本機 Git 原始檔控制組態。 按一下 [是] 按鈕來確認移除作業。

建立 Azure DevOps 組織

  1. 開啟瀏覽器,並瀏覽至 Azure DevOps 組織建立頁面
  2. 選取 [建立新的組織]
  3. 確認資訊,然後選取 [繼續]。
  4. 隨時登入您的組織:https://dev.azure.com/{yourorganization}

在 Azure DevOps 組織中建立 Team 專案

  1. 選擇您的組織,然後選取 [新增專案]。
  2. 輸入 MyFirstProject 作為專案名稱,然後將 [可見度] 選取為 [私人]
  3. 選取 [建立專案]。

如需詳細資訊,請參閱建立專案

視需要設定自我裝載式代理程式

如需使用 Azure Pipelines 來建立程式碼或部署軟體,則您需要至少一個代理程式。 在 Azure Pipelines 中,您可以在 Microsoft 裝載自我裝載式代理程式上執行平行作業。 但是,Azure Pipelines 中的最近變更會暫時停用公用專案的平行作業免費授與。如需詳細資訊,請參閱設定和支付平行作業的費用

移至 [組織設定],然後移至 [管線]> [平行作業]。 如果您在 [Microsoft 裝載] 底下看到 0 值,這表示您需要自我裝載式代理程式來執行管線。

MS 裝載的代理程式

您可以依照自我裝載式代理程式中所述詳細資料來建立。 成功設定之後,您將能夠在 [組織設定] > [代理程式集區] >{您的代理程式名稱} 底下看到可用的代理程式

自我裝載的代理程式

設定 Azure Pipelines 的管線

有三個不同的步驟需要完成。 完成下列三個章節中的步驟會產生可操作的 DevOps 管線。

將 GitHub 存放庫的存取權授與 Azure DevOps

  1. 在您的專案中,瀏覽至 [管線] 頁面。 然後,選擇用來建立新管線的動作:

    [設定組建] 按鈕

  2. 使用 Use the classic editor 來建立管線。

    使用傳統編輯器

  3. 從 [選取來源] 區段選取 [GitHub] 選項:

    選取來源 - GitHub

  4. Azure DevOps 必須先經過授權才能存取您的 GitHub 存放庫。 在 [連線名稱] 文字方塊中,輸入 <GitHub 使用者名稱> GitHub 連線。 例如:

    GitHub 連線名稱

  5. 如果您的 GitHub 帳戶已啟用雙重要素驗證,則需要個人存取權杖。 在此情況下,按一下 [使用 GitHub 個人存取權杖來授權] 連結。 如需協助,請參閱官方 GitHub 個人存取權杖建立指示。 只需要權限的 repo 範圍。 否則,請按一下 [使用 OAuth 授權] 按鈕。

  6. 出現提示時,請登入您的 GitHub 帳戶。 然後選取 [授權] 以授與 Azure DevOps 組織的存取權。 如果成功,則會建立新的服務端點。

  7. 按一下 [存放庫] 按鈕旁的省略符號按鈕。 從清單中選取「<GitHub 使用者名稱>/simple-feed-reader」。 按一下 [選取] 按鈕。

  8. 從 [用於手動和排程組建的預設分支] 下拉式清單中,選取預設分支 (main)。 按一下 [繼續] 按鈕。 範本選取頁面隨即出現。

建立組建定義

  1. 在範本選取頁面的搜尋方塊中輸入 ASP.NET Core

    在範本頁面上搜尋 ASP.NET Core

  2. 範本搜尋結果隨即出現。 將滑鼠停留在 ASP.NET Core 範本上,然後按一下 [套用] 按鈕。

  3. 組建定義的 [工作] 索引標籤隨即出現。 如果您已在先前的步驟中建立自我裝載式代理程式集區,請選取它。

    選取 [自我裝載式代理程式集區]

    注意

    如果您使用 MS 裝載的代理程式,請從下拉式清單中選取 [裝載式] > [Azure Pipelines]。

  4. 按一下 [觸發程序] 索引標籤。

  5. 核取 [啟用持續整合] 方塊。 在 [分支篩選] 區段下,確認 [類型] 下拉式清單已設定為 [包含]。 將 [分支規格] 下拉式清單設定為 main

    啟用持續整合設定

    這些設定會在任何變更推送至 GitHub 存放庫預設分支 (main) 時引起組建。 在將變更認可至 GitHub 並自動部署至 Azure 一節中,會測試持續整合。

  6. 按一下 [儲存並排入佇列] 按鈕,然後選取 [儲存] 選項:

    [儲存] 按鈕

  7. 下列強制回應對話方塊隨即出現:

    儲存組建定義 - 強制回應對話方塊

    使用 \ 的預設資料夾,然後按一下 [儲存] 按鈕。

建立發行管線

  1. 按一下您小組專案的 [發行] 索引標籤。 按一下 [新增管線] 按鈕。

    [發行] 索引標籤 - [新增定義] 按鈕

    範本選取頁面隨即出現。

  2. 從範本選取頁面中,於搜尋方塊中輸入「App Service 部署」:

    發行管線範本搜尋方塊

  3. 範本搜尋結果隨即出現。 將滑鼠停留在 Azure App Service 部署與位置範本上,然後按一下 [套用] 按鈕。 發行管線的 [管線] 索引標籤隨即出現。

    發行管線 [管線] 索引標籤

  4. 在 [成品] 方塊中按一下 [新增] 按鈕。 [新增成品] 面板隨即出現:

    發行管線 - 新增成品面板

  5. 從 [來源類型] 區段中選取 [組建] 並排顯示。 此類型允許將發行管線連結至組建定義。

  6. 從 [專案] 下拉式清單中選取 [MyFirstProject]。

  7. 從 [來源 (組建定義)] 下拉式清單中選取組建定義名稱 MyFirstProject-ASP.NET Core-CI

  8. 從 [預設版本] 下拉式清單中選取 [最新]。 此選項會建置組建定義最後一次執行所產生的成品。

  9. 使用 Drop 取代 [來源別名] 文字方塊中的文字。

  10. 按一下 [新增] 按鈕。 [成品] 區段會更新,以顯示變更。

  11. 按一下閃電圖示以啟用持續部署:

    發行管線成品 - 閃電圖示

    啟用此選項後,每次有新的組建可供使用時,就會進行部署。

  12. [持續部署觸發程序] 面板會出現在右側。 按一下切換按鈕以啟用此功能。 不需要啟用 [提取要求觸發程序]。

  13. 按一下 [組建分支篩選] 區段中的 [新增] 下拉式清單。 選擇 [組建定義的預設分支] 選項。 此篩選只會針對 GitHub 存放庫預設分支 (main) 的組建引起發行。

  14. 按一下 [儲存] 按鈕。 按一下所產生 [儲存] 強制回應對話方塊中的 [確定]。

  15. 按一下 [第 1 階段] 方塊。 [階段] 面板隨即出現在右側。 將 [階段名稱] 文字方塊中的「第 1 階段」文字變更為「生產」。

    發行管線 - [階段名稱] 文字方塊

  16. 按一下 [生產] 方塊中的 [1 階段、2 個工作] 連結:

    發行管線 - 生產環境連結.png

    環境的 [工作] 索引標籤隨即出現。

  17. 按一下 [將 Azure App Service 部署至位置] 工作。 其設定會出現在右側的面板中。

  18. 從 [Azure 訂閱] 下拉式清單中選取與 App Service 建立關聯的 Azure 訂閱。 選取之後,請按一下 [授權] 按鈕。

  19. 從 [應用程式類型] 下拉式清單中選取 [Web 應用程式]。

  20. 從 [App Service 名稱] 下拉式清單中選取 [mywebapp/<unique_number/>]。

  21. 從 [資源群組] 下拉式清單中選取 [AzureTutorial]。

  22. 從 [位置] 下拉式清單中選取 [暫存]。

  23. 選取 [工作] 下的 [在代理程式上執行]*。 在右窗格中,您會看到 [代理程式作業]。

  24. 如果您已在先前的步驟中建立自我裝載式代理程式集區,請選取它。

    選取 [自我裝載式代理程式]

    注意

    如果您使用 MS 裝載的代理程式,請從下拉式清單中選取 [裝載式] > [Azure Pipelines]。

  25. 按一下 [儲存] 按鈕。

  26. 將滑鼠停留在預設發行管線名稱上。 按一下鉛筆圖示加以編輯。 使用 MyFirstProject-ASP.NET Core-CD 作為名稱。

    發行管線名稱

  27. 按一下 [儲存] 按鈕。

將變更認可至 GitHub 並自動部署至 Azure

  1. 在 Visual Studio 中開啟 SimpleFeedReader.sln

  2. 在 [方案總管] 中開啟 Pages\Index.cshtml。 將 <h2>Simple Feed Reader - V3</h2> 變更為 <h2>Simple Feed Reader - V4</h2>

  3. Ctrl+Shift+B 建置應用程式。

  4. 將檔案認可至 GitHub 存放庫。 使用 Visual Studio 內 [Team Explorer] 索引標籤中的 [變更] 頁面,或使用本機電腦的命令殼層執行下列命令:

    git commit -a -m "upgraded to V4"
    
  5. 將預設分支 (main) 中的變更推送至 GitHub 存放庫的 origin 遠端。 在下列命令中,使用預設分支取代預留位置 {BRANCH} (使用 main):

    git push origin {BRANCH}
    

    認可隨即會出現在 GitHub 存放庫的預設分支 (main) 中。 您將能夠在 https://github.com/<GitHub_username>/simple-feed-reader/commits/main 中看到認可歷程記錄。

    因為已在組建定義的 [觸發程序] 索引標籤中啟用持續整合,所以會觸發建置:

    啟用持續整合

  6. 瀏覽至 [管線]。 如果您向下鑽研 [作業] 詳細資料,您會看到 CI 管線詳細資料並監視每個步驟。

    觸發組建管線

  7. 同樣地,請移至 [發行] 索引標籤,以查看 CD 管線的詳細資料。 您隨時可以進一步向下鑽研,以查看每個步驟的詳細資料。

    發行管線

  8. 建置成功之後,就會部署至 Azure。 瀏覽至瀏覽器中的應用程式。 請注意,"V4" 文字會出現在標題中:

    更新的應用程式

檢查 Azure Pipelines 的管線

組建定義

組建定義是以 MyFirstProject-ASP.NET Core-CI 的名稱建立。 完成時,組建會產生包括所要發佈資產的 .zip 檔案。 發行管線會將這些資產部署至 Azure。

組建定義的 [工作] 索引標籤會列出所使用的個別步驟。 組建工作共有五個。

組建定義工作

  1. 還原 - 執行 dotnet restore 命令以還原應用程式的 NuGet 套件。 使用的預設套件摘要為 nuget.org。

  2. 組建 - 執行 dotnet build --configuration release 命令以編譯應用程式的程式碼。 此 --configuration 選項是用來產生最佳化的程式碼版本,其適合用來部署至生產環境。 如果需要偵錯組態,請在組建定義的 [變數] 索引標籤上修改 BuildConfiguration 變數。

  3. 測試 - 執行 dotnet test --configuration release --logger trx --results-directory <local_path_on_build_agent> 命令以執行應用程式的單元測試。 單元測試會在符合 **/Tests/.csproj Glob 模式的任何 C# 專案中執行。 測試結果會儲存在 --results-directory 選項所指定位置的 .trx 檔案中。 如果有任何測試失敗,組建就會失敗,且不會部署。

    注意

    如需確認單元測試是否正常運作,請修改 SimpleFeedReader.Tests\Services\NewsServiceTests.cs 來刻意中斷其中一個測試。 例如,在 Returns_News_Stories_Given_Valid_Uri 方法中將 Assert.True(result.Count > 0); 變更為 Assert.False(result.Count > 0);。 認可並將變更推送至 GitHub。 建置會被觸發且失敗。 組建管線狀態會變更為失敗。 再次還原變更、認可和推送。 組建隨即成功。

  4. 發佈 - 執行 dotnet publish --configuration release --output <local_path_on_build_agent> 命令,以產生 .zip 檔案,其中包含要部署的成品。 --output 選項會指定 .zip 檔案的發佈位置。 傳遞名為 $(build.artifactstagingdirectory)預先定義變數以指定該位置。 該變數會展開至組建代理程式上的本機路徑,例如 c:\agent_work\1\a

  5. 發佈成品 — 發佈由發佈工作所產生的 .zip 檔案。 工作接受 .zip 檔案位置作為參數,這是預先定義的變數 $(build.artifactstagingdirectory).zip 檔案會發佈為名為 drop 的資料夾。

按一下組建定義的 [摘要] 連結,以檢視具有定義之組建的歷程記錄:

螢幕擷取畫面:顯示組建定義歷程記錄

在產生的頁面上,按一下個別組建以取得詳細資料。

螢幕擷取畫面:顯示組建定義摘要頁面

此特定組建的摘要隨即顯示。 按一下 [已發佈] 的連結,並留意會列出由組建所產生的 drop 資料夾:

螢幕擷取畫面:顯示組建定義成品 - 放置資料夾

組建成品

使用省略符號並按一下 [下載成品] 連結,以檢查已發佈的成品。

發行管線

發行管線是以 MyFirstProject-ASP.NET Core-CD 名稱建立:

螢幕擷取畫面:顯示發行管線概觀

發行管線的兩個主要元件是成品階段。 按一下 [成品] 區段中的方塊會顯示下列面板:

螢幕擷取畫面:顯示發行管線成品

來源 (組建定義) 值代表此發行管線所連結的組建定義。 由成功執行組建定義所產生的 .zip 檔案會提供給「生產」環境,以部署至 Azure。 按一下 [生產環境] 方塊中的 [1 階段、2 個工作] 連結,以檢視發行管線工作:

螢幕擷取畫面:顯示發行管線工作

發行管線包含兩項工作:將 Azure App Service 部署至位置和管理 Azure App Service - 位置交換。 按一下第一個工作會顯示下列工作組態:

螢幕擷取畫面:顯示發行管線工作

Azure 訂閱、服務類型、Web 應用程式名稱、資源群組和部署位置定義於部署工作中。 [套件或資料夾] 文字方塊會保留要擷取的 .zip 檔案,並部署至 mywebapp<unique_number> Web 應用程式的「暫存」位置。

按一下位置交換工作會顯示下列工作組態:

螢幕擷取畫面:顯示發行管線位置交換工作

系統會提供訂閱、資源群組、服務類型、Web 應用程式名稱和部署位置詳細資料。 已核取 [與生產交換] 核取方塊。 因此,部署到「暫存」位置的位元會交換至生產環境。

延伸閱讀