使用 Azure DevOps 持續整合及部署
注意
本節詳述使用 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
開啟瀏覽器視窗並瀏覽至
https://github.com
。按一下標頭中的 + 下拉式清單,然後選取 [新增存放庫]:
在 [擁有者] 下拉式清單中選取您的帳戶,然後在 [存放庫名稱] 文字方塊中輸入 simple-feed-reader。
按一下 建立存放庫 按鈕。
開啟本機電腦的命令殼層。 瀏覽至儲存 simple-feed-reader Git 存放庫的目錄。
將現有的 origin 遠端重新命名為 upstream。 執行下列命令:
git remote rename origin upstream
在 GitHub 上新增指向存放庫複本的新 origin 遠端。 執行下列命令:
git remote add origin https://github.com/<GitHub_username>/simple-feed-reader/
將您的本機 Git 存放庫發佈至新建立的 GitHub 存放庫。 執行下列命令:
git push -u origin main
開啟瀏覽器視窗並瀏覽至
https://github.com/<GitHub_username>/simple-feed-reader/
。 驗證您的程式碼是否出現在 GitHub 存放庫中。
中斷本機 Git 部署的連線
使用下列步驟移除本機 Git 部署。 Azure Pipelines (Azure DevOps 服務) 會取代和增強該功能。
開啟 Azure 入口網站,然後瀏覽至暫存 (mywebapp<unique_number>/staging) Web 應用程式。 在入口網站的搜尋方塊中輸入「暫存」即可快速找到 Web 應用程式:
按一下 [部署中心]。 新的面板隨即出現。 按一下 [中斷連線] 移除上一章中新增的本機 Git 原始檔控制組態。 按一下 [是] 按鈕來確認移除作業。
瀏覽至 mywebapp<unique_number> App Service。 提醒您,入口網站的搜尋方塊可用來快速找出 App Service。
按一下 [部署中心]。 新的面板隨即出現。 按一下 [中斷連線] 移除上一章中新增的本機 Git 原始檔控制組態。 按一下 [是] 按鈕來確認移除作業。
建立 Azure DevOps 組織
- 開啟瀏覽器,並瀏覽至 Azure DevOps 組織建立頁面。
- 選取 [建立新的組織]
- 確認資訊,然後選取 [繼續]。
- 隨時登入您的組織:
https://dev.azure.com/{yourorganization}
在 Azure DevOps 組織中建立 Team 專案
- 選擇您的組織,然後選取 [新增專案]。
- 輸入 MyFirstProject 作為專案名稱,然後將 [可見度] 選取為 [私人]
- 選取 [建立專案]。
如需詳細資訊,請參閱建立專案。
視需要設定自我裝載式代理程式
如需使用 Azure Pipelines 來建立程式碼或部署軟體,則您需要至少一個代理程式。 在 Azure Pipelines 中,您可以在 Microsoft 裝載或自我裝載式代理程式上執行平行作業。 但是,Azure Pipelines 中的最近變更會暫時停用公用專案的平行作業免費授與。如需詳細資訊,請參閱設定和支付平行作業的費用。
移至 [組織設定],然後移至 [管線]> [平行作業]。 如果您在 [Microsoft 裝載] 底下看到 0 值,這表示您需要自我裝載式代理程式來執行管線。
您可以依照自我裝載式代理程式中所述詳細資料來建立。 成功設定之後,您將能夠在 [組織設定] > [代理程式集區] >{您的代理程式名稱} 底下看到可用的代理程式
設定 Azure Pipelines 的管線
有三個不同的步驟需要完成。 完成下列三個章節中的步驟會產生可操作的 DevOps 管線。
將 GitHub 存放庫的存取權授與 Azure DevOps
在您的專案中,瀏覽至 [管線] 頁面。 然後,選擇用來建立新管線的動作:
使用
Use the classic editor
來建立管線。從 [選取來源] 區段選取 [GitHub] 選項:
Azure DevOps 必須先經過授權才能存取您的 GitHub 存放庫。 在 [連線名稱] 文字方塊中,輸入 <GitHub 使用者名稱> GitHub 連線。 例如:
如果您的 GitHub 帳戶已啟用雙重要素驗證,則需要個人存取權杖。 在此情況下,按一下 [使用 GitHub 個人存取權杖來授權] 連結。 如需協助,請參閱官方 GitHub 個人存取權杖建立指示。 只需要權限的 repo 範圍。 否則,請按一下 [使用 OAuth 授權] 按鈕。
出現提示時,請登入您的 GitHub 帳戶。 然後選取 [授權] 以授與 Azure DevOps 組織的存取權。 如果成功,則會建立新的服務端點。
按一下 [存放庫] 按鈕旁的省略符號按鈕。 從清單中選取「<GitHub 使用者名稱>/simple-feed-reader」。 按一下 [選取] 按鈕。
從 [用於手動和排程組建的預設分支] 下拉式清單中,選取預設分支 (main)。 按一下 [繼續] 按鈕。 範本選取頁面隨即出現。
建立組建定義
在範本選取頁面的搜尋方塊中輸入 ASP.NET Core:
範本搜尋結果隨即出現。 將滑鼠停留在 ASP.NET Core 範本上,然後按一下 [套用] 按鈕。
組建定義的 [工作] 索引標籤隨即出現。 如果您已在先前的步驟中建立自我裝載式代理程式集區,請選取它。
注意
如果您使用 MS 裝載的代理程式,請從下拉式清單中選取 [裝載式] > [Azure Pipelines]。
按一下 [觸發程序] 索引標籤。
核取 [啟用持續整合] 方塊。 在 [分支篩選] 區段下,確認 [類型] 下拉式清單已設定為 [包含]。 將 [分支規格] 下拉式清單設定為 main。
這些設定會在任何變更推送至 GitHub 存放庫預設分支 (main) 時引起組建。 在將變更認可至 GitHub 並自動部署至 Azure 一節中,會測試持續整合。
按一下 [儲存並排入佇列] 按鈕,然後選取 [儲存] 選項:
下列強制回應對話方塊隨即出現:
使用 \ 的預設資料夾,然後按一下 [儲存] 按鈕。
建立發行管線
按一下您小組專案的 [發行] 索引標籤。 按一下 [新增管線] 按鈕。
範本選取頁面隨即出現。
從範本選取頁面中,於搜尋方塊中輸入「App Service 部署」:
範本搜尋結果隨即出現。 將滑鼠停留在 Azure App Service 部署與位置範本上,然後按一下 [套用] 按鈕。 發行管線的 [管線] 索引標籤隨即出現。
在 [成品] 方塊中按一下 [新增] 按鈕。 [新增成品] 面板隨即出現:
從 [來源類型] 區段中選取 [組建] 並排顯示。 此類型允許將發行管線連結至組建定義。
從 [專案] 下拉式清單中選取 [MyFirstProject]。
從 [來源 (組建定義)] 下拉式清單中選取組建定義名稱 MyFirstProject-ASP.NET Core-CI。
從 [預設版本] 下拉式清單中選取 [最新]。 此選項會建置組建定義最後一次執行所產生的成品。
使用 Drop 取代 [來源別名] 文字方塊中的文字。
按一下 [新增] 按鈕。 [成品] 區段會更新,以顯示變更。
按一下閃電圖示以啟用持續部署:
啟用此選項後,每次有新的組建可供使用時,就會進行部署。
[持續部署觸發程序] 面板會出現在右側。 按一下切換按鈕以啟用此功能。 不需要啟用 [提取要求觸發程序]。
按一下 [組建分支篩選] 區段中的 [新增] 下拉式清單。 選擇 [組建定義的預設分支] 選項。 此篩選只會針對 GitHub 存放庫預設分支 (main) 的組建引起發行。
按一下 [儲存] 按鈕。 按一下所產生 [儲存] 強制回應對話方塊中的 [確定]。
按一下 [第 1 階段] 方塊。 [階段] 面板隨即出現在右側。 將 [階段名稱] 文字方塊中的「第 1 階段」文字變更為「生產」。
按一下 [生產] 方塊中的 [1 階段、2 個工作] 連結:
環境的 [工作] 索引標籤隨即出現。
按一下 [將 Azure App Service 部署至位置] 工作。 其設定會出現在右側的面板中。
從 [Azure 訂閱] 下拉式清單中選取與 App Service 建立關聯的 Azure 訂閱。 選取之後,請按一下 [授權] 按鈕。
從 [應用程式類型] 下拉式清單中選取 [Web 應用程式]。
從 [App Service 名稱] 下拉式清單中選取 [mywebapp/<unique_number/>]。
從 [資源群組] 下拉式清單中選取 [AzureTutorial]。
從 [位置] 下拉式清單中選取 [暫存]。
選取 [工作] 下的 [在代理程式上執行]*。 在右窗格中,您會看到 [代理程式作業]。
如果您已在先前的步驟中建立自我裝載式代理程式集區,請選取它。
注意
如果您使用 MS 裝載的代理程式,請從下拉式清單中選取 [裝載式] > [Azure Pipelines]。
按一下 [儲存] 按鈕。
將滑鼠停留在預設發行管線名稱上。 按一下鉛筆圖示加以編輯。 使用 MyFirstProject-ASP.NET Core-CD 作為名稱。
按一下 [儲存] 按鈕。
將變更認可至 GitHub 並自動部署至 Azure
在 Visual Studio 中開啟 SimpleFeedReader.sln。
在 [方案總管] 中開啟 Pages\Index.cshtml。 將
<h2>Simple Feed Reader - V3</h2>
變更為<h2>Simple Feed Reader - V4</h2>
。按 Ctrl+Shift+B 建置應用程式。
將檔案認可至 GitHub 存放庫。 使用 Visual Studio 內 [Team Explorer] 索引標籤中的 [變更] 頁面,或使用本機電腦的命令殼層執行下列命令:
git commit -a -m "upgraded to V4"
將預設分支 (main) 中的變更推送至 GitHub 存放庫的 origin 遠端。 在下列命令中,使用預設分支取代預留位置
{BRANCH}
(使用main
):git push origin {BRANCH}
認可隨即會出現在 GitHub 存放庫的預設分支 (main) 中。 您將能夠在
https://github.com/<GitHub_username>/simple-feed-reader/commits/main
中看到認可歷程記錄。因為已在組建定義的 [觸發程序] 索引標籤中啟用持續整合,所以會觸發建置:
瀏覽至 [管線]。 如果您向下鑽研 [作業] 詳細資料,您會看到 CI 管線詳細資料並監視每個步驟。
同樣地,請移至 [發行] 索引標籤,以查看 CD 管線的詳細資料。 您隨時可以進一步向下鑽研,以查看每個步驟的詳細資料。
建置成功之後,就會部署至 Azure。 瀏覽至瀏覽器中的應用程式。 請注意,"V4" 文字會出現在標題中:
檢查 Azure Pipelines 的管線
組建定義
組建定義是以 MyFirstProject-ASP.NET Core-CI 的名稱建立。 完成時,組建會產生包括所要發佈資產的 .zip 檔案。 發行管線會將這些資產部署至 Azure。
組建定義的 [工作] 索引標籤會列出所使用的個別步驟。 組建工作共有五個。
還原 - 執行
dotnet restore
命令以還原應用程式的 NuGet 套件。 使用的預設套件摘要為 nuget.org。組建 - 執行
dotnet build --configuration release
命令以編譯應用程式的程式碼。 此--configuration
選項是用來產生最佳化的程式碼版本,其適合用來部署至生產環境。 如果需要偵錯組態,請在組建定義的 [變數] 索引標籤上修改 BuildConfiguration 變數。測試 - 執行
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。 建置會被觸發且失敗。 組建管線狀態會變更為失敗。 再次還原變更、認可和推送。 組建隨即成功。發佈 - 執行
dotnet publish --configuration release --output <local_path_on_build_agent>
命令,以產生 .zip 檔案,其中包含要部署的成品。--output
選項會指定 .zip 檔案的發佈位置。 傳遞名為$(build.artifactstagingdirectory)
的預先定義變數以指定該位置。 該變數會展開至組建代理程式上的本機路徑,例如 c:\agent_work\1\a。發佈成品 — 發佈由發佈工作所產生的 .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 應用程式名稱和部署位置詳細資料。 已核取 [與生產交換] 核取方塊。 因此,部署到「暫存」位置的位元會交換至生產環境。
延伸閱讀
.NET feedback
The .NET documentation is open source. Provide feedback here.
意見反應
提交並檢視相關的意見反應