自訂您的流程
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
這是一份逐步指南,介紹自定義管線的常見方式。
先決條件
請依照建立第一個管線中的指示來創建一個可運行的管線。
了解azure-pipelines.yml
檔案
管線是使用存放庫中的 YAML 檔案來定義。 通常,此檔案會命名 azure-pipelines.yml
為 ,且位於存放庫的根目錄。
流覽至 Azure Pipelines 中的 [管線] 頁面,選取您建立的管線,然後在管線的操作功能表中選擇 [編輯 ],以開啟管線的 YAML 編輯器。
注意
如需如何在 Azure DevOps 入口網站中檢視和管理管線的指示,請參閱 檢視和管理您的管線。
檢查 YAML 檔案的內容。
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Maven@4
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.11'
jdkArchitectureOption: 'x64'
publishJUnitResults: false
testResultsFiles: '**/surefire-reports/TEST-*.xml'
goals: 'package'
注意
YAML 檔案的內容可能會根據您開始使用的範例存放庫或 Azure Pipelines 中的升級而有所不同。
每當您的小組將變更推送至存放庫的主要分支,或建立提取要求時,就會執行此管線。 它會在Microsoft裝載的Linux電腦上執行。 管道流程只有一個步驟,就是執行 Maven 任務。
變更要開發的平臺
您可以在Microsoft裝載的代理程式上建置專案,其中包含各種開發語言的SDK和工具。 或者,您可以使用 自託管代理 搭配您需要的特定工具。
選取組建上的 [編輯管線] 動作,或從管線的主頁面選取 [編輯],以流覽至管線的編輯器。
目前管線會在Linux代理程式上執行:
pool: vmImage: "ubuntu-latest"
若要選擇不同的平臺,例如 Windows 或 Mac,請變更
vmImage
值:pool: vmImage: "windows-latest"
pool: vmImage: "macos-latest"
選取 [ 儲存 ],然後確認變更以查看管線在不同的平臺上執行。
新增步驟
您可以將更多腳本或任務新增為管線的步驟。 任務是預先封裝的腳本。 您可以使用任務來建置、測試、發佈或部署您的應用程式。 對於 Java,我們使用的 Maven 任務會處理測試和發布結果,不過,您也可以使用任務來發布程式碼覆蓋率的結果。
開啟管線的 YAML 編輯器。
將下列代碼段新增至 YAML 檔案的結尾。
- task: PublishCodeCoverageResults@1 inputs: codeCoverageTool: "JaCoCo" summaryFileLocation: "$(System.DefaultWorkingDirectory)/**/site/jacoco/jacoco.xml" reportDirectory: "$(System.DefaultWorkingDirectory)/**/site/jacoco" failIfCoverageEmpty: true
選取 [ 儲存 ],然後確認變更。
您可以選取組建並移至 測試 和 涵蓋範圍 索引標籤,以檢視您的測試和程式碼涵蓋率結果。
跨多個平台建置
您可以在多個平臺上建置和測試專案。 其中一種方法是 使用 strategy
和 matrix
。 您可以使用變數,輕鬆地將數據放入管線的各個部分。 在此範例中,我們將使用變數來傳入我們想要使用的映像名稱。
在您的
azure-pipelines.yml
檔案中,取代此內容:pool: vmImage: "ubuntu-latest"
包含下列內容:
strategy: matrix: linux: imageName: "ubuntu-latest" mac: imageName: "macOS-latest" windows: imageName: "windows-latest" maxParallel: 3 pool: vmImage: $(imageName)
選取 [ 儲存 ],然後確認變更,以查看您的組建在三個不同的平臺上最多執行三個作業。
每個代理程式一次只能執行一個作業。 若要平行執行多個作業,您必須設定多個代理程式。 您也需要足夠的 平行作業。
使用多個版本建置
若要使用該語言的不同版本來建置專案,您可以使用 matrix
版本和變數。 在此步驟中,您可以在單一平臺上建置具有兩個不同 Java 版本的 Java 專案,或在不同平臺上執行不同版本的 Java。
注意
在一個上下文中,您無法多次使用strategy
。
如果您想要在單一平臺和多個版本上建置,請在 Maven 任務之前的
azure-pipelines.yml
和之後vmImage
,將下列矩陣新增至您的檔案。strategy: matrix: jdk10: jdkVersion: "1.10" jdk11: jdkVersion: "1.11" maxParallel: 2
然後在您的 Maven 任務中替換這一行:
jdkVersionOption: "1.11"
以這行程式碼取代:
jdkVersionOption: $(jdkVersion)
請務必將
$(imageName)
變數變更回您選擇的平臺。如果您想要在多個平臺和版本上建置,請在發佈工作之前,以下列代碼段取代檔案
azure-pipelines.yml
中的整個內容:trigger: - main strategy: matrix: jdk10_linux: imageName: "ubuntu-latest" jdkVersion: "1.10" jdk11_windows: imageName: "windows-latest" jdkVersion: "1.11" maxParallel: 2 pool: vmImage: $(imageName) steps: - task: Maven@4 inputs: mavenPomFile: "pom.xml" mavenOptions: "-Xmx3072m" javaHomeOption: "JDKVersion" jdkVersionOption: $(jdkVersion) jdkArchitectureOption: "x64" publishJUnitResults: true testResultsFiles: "**/TEST-*.xml" goals: "package"
選取 [ 儲存 ],然後確認變更,以查看您的組建在兩個不同的平臺上和 SDK 上執行兩個作業。
自定義 CI 觸發程式
管線觸發器會啟動管線執行。 您可以使用 trigger:
來讓管線在將更新推送至分支時執行。 YAML 管線預設會以預設分支上的 CI 觸發程式進行設定(通常是 main
)。 您可以為特定的分支或者拉取請求驗證設置觸發條件。 針對拉取請求的驗證觸發器,只需將 trigger:
步驟替換為 pr:
,如下的兩個範例所示。 根據預設,管線會針對每個提取要求變更執行。
如果您想要設定觸發程式,請在檔案
azure-pipelines.yml
開頭新增下列其中一個代碼段。trigger: - main - releases/*
pr: - main - releases/*
您可以指定分支的完整名稱(例如
main
), 或前置詞比對通配符 (例如 ,releases/*
。
管線設定
您可以從管線詳細數據頁面上的 [更多動作] 功能表檢視和設定管線設定。
選擇 [設定 ] 以設定下列管線設定。
您可以從 [ 管線設定 ] 窗格中設定下列設定。
處理新的執行要求 - 有時候您會想要防止新的執行開始於管線上。
- 根據預設,新執行要求的處理已經 啟用。 此設定允許標準處理所有觸發程式類型,包括手動執行。
- 暫停的 管線允許處理執行要求,但這些要求會排入佇列,而不會實際啟動。 啟用新的要求處理時,從佇列中的第一個要求開始執行處理。
- 停用的 管線可防止用戶啟動新的執行。 套用此設定時,也會停用所有觸發程式。 所有使用已停用管線的建置原則在 PR 概觀視窗中會顯示「無法排入佇列建置作業」訊息,而建置原則的狀態將變為無效。
YAML 檔案路徑 - 如果您需要指示管線使用不同的 YAML 檔案,您可以指定該檔案的路徑。 如果您需要移動/重新命名YAML檔案,此設定也很有用。
自動連結此執行中包含的工作專案 - 與特定管線執行相關的變更可能會有相關的工作專案。 選取此選項可將這些工作項目連結至執行。 在選取「自動連結此執行中包含的工作專案」時,您必須指定特定的分支或使用
*
,預設包含所有分支。 如果您指定分支,工作專案只會與該分支的執行相關聯。 如果您指定*
,工作專案將會與所有執行進行關聯。- 若要在執行失敗時取得通知,請參閱如何 管理小組的通知
管理安全性
您可以在管線首頁上的[更多動作]中配置專案層級的管線安全性,以及在管線詳情頁面中配置管線層級的安全性。
若要支援管線作業的安全性,您可以將使用者新增至內建安全組、設定使用者或群組的個別許可權,或將使用者新增至預先定義的角色。 您可以在網頁入口網站中,以使用者或管理員的身分管理 Azure Pipelines 的安全性。 如需設定管線安全性的詳細資訊,請參閱 管線許可權和安全性角色。
失敗時建立工作專案
YAML 管線不像傳統建置管線,有工作專案失敗時建立的設定。 傳統建置管線是單一階段,而 在失敗 時建立工作專案會套用至整個管線。 YAML 管線可以是多階段,而且管線層級設定可能不適合。 若要在 YAML 管線中實作於失敗時建立工作專案,您可以在管線中所需的點使用方法,例如透過工作專案 - 建立 REST API 呼叫或 Azure DevOps CLI 的az boards work-item create 命令。
下列範例有兩個作業。 第一個作業代表管線的工作,但如果它失敗,第二個作業就會執行,並在與管線相同的專案中建立 Bug。
# When manually running the pipeline, you can select whether it
# succeeds or fails.
parameters:
- name: succeed
displayName: Succeed or fail
type: boolean
default: false
trigger:
- main
pool:
vmImage: ubuntu-latest
jobs:
- job: Work
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'
# This malformed command causes the job to fail
# Only run this command if the succeed variable is set to false
- script: git clone malformed input
condition: eq(${{ parameters.succeed }}, false)
# This job creates a work item, and only runs if the previous job failed
- job: ErrorHandler
dependsOn: Work
condition: failed()
steps:
- bash: |
az boards work-item create \
--title "Build $(build.buildNumber) failed" \
--type bug \
--org $(System.TeamFoundationCollectionUri) \
--project $(System.TeamProject)
env:
AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
displayName: 'Create work item on failure'
注意
Azure Boards 可讓您使用數個不同的程式來設定工作項目追蹤,例如 Agile 或 Basic。 每個進程都有不同的工作項目類型,而且每個程式都無法使用每個工作項目類型。 如需每個程式所支援的工作項目類型清單,請參閱工作項目類型(WIT)。
上述範例會使用 運行時間參數 來設定管線是否成功或失敗。 手動執行管線時,您可以設定 參數的值 succeed
。 管線中第一個作業的第二個步驟會評估succeed
參數,只有當succeed
設定為 false 時才會執行。
管線中的第二個作業相依於第一個作業,而且只有在第一個作業失敗時才會執行。 第二個作業會使用 Azure DevOps CLI az boards work-item create 命令來建立 Bug。 如需從管線執行 Azure DevOps CLI 命令的詳細資訊,請參閱 在 YAML 管線中執行命令。
YAML 管線沒有像傳統建置管線一樣的在失敗時建立工作專案設定。 傳統建置管線是單一階段,而 在失敗 時建立工作專案會套用至整個管線。 YAML 管線可以是多階段,而且管線層級設定可能不適合。 若要在 YAML 管線中實現 失敗時建立工作專案,您可以在管線中的所需位置使用 工作專案 - 建立 REST API 呼叫。
下列範例有兩個工作。 第一個作業代表管道的工作,但如果它失敗,第二個作業就會執行,並在與管道相同的專案中建立錯誤。
# When manually running the pipeline, you can select whether it
# succeeds or fails.
parameters:
- name: succeed
displayName: Succeed or fail
type: boolean
default: false
trigger:
- main
pool:
vmImage: ubuntu-latest
jobs:
- job: Work
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'
# This malformed command causes the job to fail
# Only run this command if the succeed variable is set to false
- script: git clone malformed input
condition: eq(${{ parameters.succeed }}, false)
# This job creates a work item, and only runs if the previous job failed
- job: ErrorHandler
dependsOn: Work
condition: failed()
steps:
- bash: |
curl \
-X POST \
-H 'Authorization: Basic $(System.AccessToken)' \
-H 'Content-Type: application/json-patch+json' \
-d '[
{
"op": "add",
"path": "/fields/System.Title",
"from": null,
"value": "git clone failed"
}
]' \
"$(System.CollectionUri)$(System.TeamProject)/_apis//wit/workitems/$Bug?api-version=7.1-preview.3
"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
displayName: 'Create work item on failure'
注意
Azure Boards 可讓您使用數個不同的程式來設定工作項目追蹤,例如 Agile 或 Basic。 每個進程都有不同的工作項目類型,而且每個程式都無法使用每個工作項目類型。 如需每個程式所支援的工作項目類型清單,請參閱工作項目類型(WIT)。
上述範例會使用 運行時間參數 來設定管線是否成功或失敗。 手動執行管線時,您可以設定 參數的值 succeed
。 管線第一個作業中的第二 script
個步驟會評估 succeed
參數,並且只有在 succeed
設定為 false 時才會執行。
管線中的第二個作業相依於第一個作業,而且只有在第一個作業失敗時才會執行。 第二項作業會使用 Azure DevOps API az boards work-item create 命令來建立錯誤。
此範例使用兩個作業,但這個相同的方法可以跨 多個階段使用。
注意
您也可以使用市集擴充套件,例如 Create Bug on Release failure,其支援 YAML 多階段管線。
下一步
您已瞭解自訂管線的基礎知識。 接下來,建議您深入瞭解如何針對您使用的語言自定義管線:
或者,若要將您的 CI 管線成長為 CI/CD 管線,請包含 部署作業 ,其中包含將應用程式部署至 環境的步驟。
若要深入瞭解本指南中的主題,請參閱作業、工作、工作目錄、變數、觸發程式或疑難解答。
若要了解您可以在 YAML 管線中執行的其他動作,請參閱 YAML 結構描述參考。