了解 Azure Pipelines
您可以使用「管線」自動化部署程序中的步驟。 每次變更您的程式碼並將變更認可至 Git 存放庫時,管線都會執行您預先定義的程序。 管線可以驗證 Bicep 程式碼是否符合您的品質標準,然後其會自動化將資源部署到 Azure 的步驟。 此程序是在您建立的「管線定義」中定義。
Azure Pipelines 是 Azure DevOps 服務的一項功能。 Azure DevOps 也包含 Azure Repos,您可以使用其所裝載的 Git 存放庫儲存程式碼並與您的共同作業者共用。 當將 Bicep 程式碼儲存在 Git 時,Azure Pipelines 可存取您的程式碼以自動化部署程序。 在此單元中,您將了解 Azure Pipelines。
什麼是管線?
管線是可重複的程序,可讓您用來測試和部署設定檔中定義的程式碼。 管線包含您要執行的所有步驟及順序。
當使用 Azure Pipelines 時,您會在 YAML 檔案中定義管線。 YAML 檔案是一種結構化文字檔,有點類似同樣是結構化文字檔的 Bicep。 您可以使用任何文字編輯器建立及編輯 YAML 檔案。 在本課程模組中,您將使用 Visual Studio Code。 Visual Studio Code 提供延伸模組,可讓您更輕鬆地編輯 Azure DevOps YAML 管線檔案。 Azure DevOps Web 介面也提供一些工具,可讓您用來檢視及編輯管線 YAML 檔案。
注意
Azure Pipelines 包含「傳統管線」,也就是舊版的管線功能。 以 YAML 為基礎的管線已取代傳統管線。 在本課程模組中,我們只討論 YAML 管線。 建議您使用 YAML 管線。
因為管線 YAML 檔是程式碼檔案,所以檔案會與 Bicep 程式碼一起儲存在您的 Git 存放庫中。 您可以使用 Git 功能對管線定義進行共同作業。 您可以使用認可與分支管理不同版本的管線檔案。 在未來的課程模組中,您也將了解管線的其他進階功能,例如「範本」。 範本可讓您輕鬆地重複使用管線定義。
代理程式與集區
到目前為止,您已從本機電腦部署 Bicep 檔案。 在您撰寫 Bicep 範本之後,便可以使用 Azure CLI 或 Azure PowerShell 將其部署至 Azure。 這些工具會使用您的電腦資源將範本提交至 Azure。 其會使用您的個人身分識別向 Azure 驗證,並確認您有部署這些資源的權限。
管線也需要有電腦的存取權,才能執行部署步驟。 Azure Pipelines 會使用稱為「代理程式」的機器。 代理程式是一部為了執行部署步驟而設定的電腦。 每個代理程式都已經有您在前幾個課程模組中使用過的 Bicep 與 Azure 工具,因此能夠執行您從自己電腦執行的相同作業。 Azure Pipelines 服務會指示代理程式執行您在 YAML 檔案中定義的步驟,而不是人工執行命令。
Azure Pipelines 提供 Ubuntu 或 Windows 等不同作業系統的多種代理程式以及不同的工具組。 Microsoft 會執行這些代理程式,因此您不需要為代理程式維護任何計算基礎結構。 因為這些代理程式是代您裝載,所以有時會稱為「Microsoft 裝載的代理程式」或「裝載的代理程式」。 當管線執行時,會自動建立裝載的代理程式。 當管線完成執行後,會自動刪除裝載的代理程式。 您無法直接存取裝載的代理程式,因此您的管線必須包含部署解決方案所需的所有步驟。
「代理程式集區」包含多個相同類型的代理程式。 當您建立管線時,請告訴 Azure Pipelines 執行每一組步驟時所要使用的代理程式集區。 當管線執行時,會等候集區中的代理程式變成可用,然後指示代理程式執行您的部署步驟。 您可以指派集區中的任何代理程式來執行您的管線。
注意
您可以選擇建立稱為「自我裝載式代理程式」的自訂代理程式。 如果執行管線時需要有特定的軟體,或者需要精確控制代理程式的設定方式,建議您建立自我裝載式代理程式。 我們不會在本課程模組中討論自我裝載代理程式,但會在摘要中提供詳細資訊的連結。
觸發程序
您建立「觸發程序」以指示 Azure Pipelines 執行管線的「時機」。 有多種類型的觸發程序可供選擇。 暫時仍將繼續使用「手動觸發程序」。 您會手動告知 Azure Pipelines 何時開始執行管線。 稍後在此課程模組中,您將深入了解其他類型的觸發程序。
步驟
一個「步驟」代表管線執行的單一項作業。 步驟類似您在 Bash 或 PowerShell 中執行的個別命令。 在大部分的部署中,您會依序執行數個步驟。 您會在管線 YAML 檔案中定義每個步驟的順序及所有詳細資料。
Azure Pipelines 提供兩種類型的步驟:
- 指令碼。 使用指令碼步驟,可在 Bash、PowerShell 或 Windows 命令殼層中執行單一命令或一系列命令。
- 工作。 工作讓您無須撰寫指令碼陳述式,就能輕鬆存取許多不同功能。 例如,內建的工作可以執行 Azure CLI 與 Azure PowerShell Cmdlet,測試您的程式碼或將檔案上傳至 FTP 伺服器。 任何人都可以撰寫工作,並在 Visual Studio Marketplace 中發佈工作,與其他使用者共用工作。 有大量的商業和開放原始碼工作可供使用。
相較於內建工作,有些人更偏好使用指令碼陳述式,因為後者讓您對執行的內容擁有更大的控制權。 有些人則偏好使用工作,因為不需要撰寫及管理指令碼。 在此課程模組中,我們會混合使用這兩種方法。
工作
在 Azure Pipelines 中,「作業」代表一組已排序的步驟。 管線中至少一定要有一個作業,而且當您建立複雜的部署時,通常會有多個作業。
注意
您可以將每個作業設定為在不同的代理程式集區中執行。 當您建置及部署的解決方案必須在作業管線的不同部分使用不同的作業系統時,在不同的代理程式集區執行作業便相當實用。
例如,假設您正在建置 iOS 應用程式與應用程式的後端服務。 您可能會在 macOS 代理程式集區中執行一個作業,以建置此 iOS 應用程式;在 Ubuntu 或 Windows 代理程式集區上執行另一個作業,以建置後端。 您甚至可能會指示管線同時執行兩個作業,以加速管線的執行。
在本課程模組中,我們會在管線定義檔的根目錄宣告代理程式集區,讓管線中的所有作業都使用相同的代理程式集區。
注意
您也可以使用 Azure Pipelines 的「階段」概念,將管線分割成邏輯階段,並在管線執行的不同點上新增手動檢查。 您將在未來的課程模組中深入了解階段。
基本管線範例
了解 Azure Pipelines 的基本概念後,就讓我們來看看 YAML 中的簡單管線定義:
trigger: none
pool:
vmImage: ubuntu-latest
jobs:
- job:
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'
- script: |
echo We'll add more steps soon.
echo For example, we'll add our Bicep deployment step.
displayName: 'Run a multi-line script'
讓我們仔細看看這個檔案的每一部分:
trigger
告訴管線何時執行。 在此案例中,trigger: none
會告訴 Azure Pipelines 您要手動觸發管線。pool
會指示管線在執行管線步驟時所要使用的代理程式集區。 在此範例中,管線會在來自 Microsoft 裝載的代理程式集區,執行 Ubuntu 作業系統的代理程式上執行。jobs
會將管線中的所有作業集合在一起。job
會告訴管線您有單一作業。提示
當您的管線中只有一個作業時,您可以省略
jobs
和job
關鍵字。 在此包含job
是為清楚說明這些概念如何在管線中運作。steps
會列出要在作業中執行的動作順序。 範例 YAML 包含兩個步驟。 兩個步驟都會執行簡單的指令碼以回應某些文字。 每個步驟都有一個displayName
值,也就是一般人看得懂的步驟名稱。 當您查看管線記錄時,將會看到顯示名稱。 若要建立多行指令碼步驟,請使用直立線字元 (|
),如範例所示。 在您的步驟執行之後,將會在管線記錄中看到輸出。
重要
在 YAML 檔案中,縮排相當重要。 請查看範例 YAML。 YAML 中的某些行會縮排兩或四個空格。 您使用的空格數目很重要。 如果不能正確縮排檔案,Azure Pipelines 就無法解讀。 Visual Studio Code 可協助您尋找並修正 YAML 檔案中的縮排錯誤。