持續整合和部署與Azure DevOps

提示

此內容是電子書的摘錄,DevOps適用于 ASP.NET Core開發人員,可在.NET Docs上取得,或作為可離線讀取的免費可下載 PDF。

DevOps for ASP.NET Core Developers eBook cover thumbnail.

注意

本節詳述與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組織中建立小組專案
  • 視需要設定自我裝載代理程式
  • 建立組建定義
  • 建立發行管線
  • 將變更認可至 GitHub 並自動部署至 Azure
  • 檢查Azure Pipelines管線

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

  1. 開啟瀏覽器視窗,然後流覽至 https://github.com

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

    GitHub New Repository option

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

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

  5. 開啟本機電腦的命令殼層。 流覽至 儲存簡單摘要讀取器 Git 存放庫的目錄。

  6. 將現有的 原始來源 遠端重新命名為 上游。 執行下列命令:

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

    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 > /暫存) Web 應用程式。 在入口網站的搜尋方塊中輸入 預備 專案,即可快速找到 Web 應用程式:

    staging Web App search term

  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組織中建立小組專案

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

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

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

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

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

MS-hosted agent

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

Self-hosted agent

設定Azure Pipelines管線

有三個不同的步驟可以完成。 完成下列三節中的步驟會導致作業DevOps管線。

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

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

    Setup Build button

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

    Use classic editor

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

    Select a source - GitHub

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

    GitHub connection name

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

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

  7. 按一下 [ 存放庫 ] 按鈕旁邊的省略號按鈕。 從清單中選取< GitHub_username > /simple-feed-reader存放庫。 按一下 [選取] 按鈕。

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

建立組建定義

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

    ASP.NET Core search on template page

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

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

    Select Self-hosted agent pool

    注意

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

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

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

    Enable continuous integration settings

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

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

    Save button

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

    Save build definition - modal dialog

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

建立發行管線

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

    Releases tab - New definition button

    範本選取窗格隨即出現。

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

    Release pipeline template search box

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

    Release pipeline Pipeline tab

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

    Release pipeline - Add artifact panel

  5. 從 [來源類型] 區段選取 [置] 圖格。 此類型允許將發行管線連結至組建定義。

  6. [Project] 下拉式清單中選取[MyFirstProject]。

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

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

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

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

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

    Release pipeline Artifacts - lightning bolt icon

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

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

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

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

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

    Release pipeline - Stage name textbox

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

    Release pipeline - Production environment link.png

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

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

  18. 從 [Azure 訂用帳戶] 下拉式清單中選取與App Service相關聯的Azure 訂用帳戶。 選取之後,按一下 [ 授權] 按鈕。

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

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

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

  22. 從 [位置] 下拉式清單中選取預備

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

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

    Select Self-hosted agent

    注意

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

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

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

    Release pipeline name

  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. CtrlShiftB++ 建置應用程式。

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

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

    git push origin {BRANCH}
    

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

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

    enable continuous integration

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

    Trigger build pipeline

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

    Release pipeline

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

    updated app

檢查Azure Pipelines管線

組建定義

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

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

build definition tasks

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

  2. Build - 執行 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 ,以有目的地中斷其中一個測試。 例如,在 方法中將 變更 Assert.True(result.Count > 0);Assert.False(result.Count > 0);Returns_News_Stories_Given_Valid_Uri 。 認可變更並將變更推送至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的資料夾。

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

Screenshot showing build definition history

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

Screenshot showing build definition summary page

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

Screenshot showing build definition artifacts - drop folder

Build Artifacts

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

發行管線

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

Screenshot showing release pipeline overview

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

Screenshot showing release pipeline artifacts

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

Screenshot showing release pipeline tasks

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

Screenshot showing release pipeline tasks

Azure 訂用帳戶、服務類型、Web 應用程式名稱、資源群組和部署位置是在部署工作中定義。 [套件或資料夾] 文字方塊會保留要解壓縮並部署至mywebapp < 的暫存位置.zip檔案路徑unique_number > Web 應用程式。

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

Screenshot showing release pipeline slot swap task

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

延伸閱讀