iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
DevOps

Azure DevOps Troubleshooting and best practices 系列 第 28

Azure Pipeline - YAML 如何範本化工作與作業

  • 分享至 

  • xImage
  •  

前言

元件化通常是發生在軟體或平台具一定規模時會發生的事情,為了容易維護、多團隊公用與支撐後續軟體發展。理所當然,YAML 範本 (Template) 也是如此,它是 Azure DevOps Pipelines 的任何 DRY(Don’t Repeat Yourself) 實現的最終目標。剛開始進入範本領域的使用者可能會不知所措,但更多的是熟悉後可以自訂或發展更多不同範本符合自身需求,甚至可以貢獻出公版提供多數團隊使用,有效提升生產力。

 
 

什麼是範本,它能做到什麼事

範本是可重複使用的 YAML 文件,為 Stage、Job、Task 和 Variable 所組成,下面是一個簡單的範例做範本化

**.NET Core v2 task 為例,我們要做一個發布專案的工作, 如果沒有範本,我們就必須為程式碼儲存庫中的每個專案內重複編寫此 Task 的程式碼。

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    projects: '**/*.csproj'
    publishWebProjects: false
    arguments: '--no-build -configuration $(buildConfiguration) --out $(Build.ArtifactStagingDirecrity)/$(buildConfiguration)'
    zipAfterPublish: true

這是使用樣本的好機會。我們可以定義此 Task 一次,然後透過為我們想要發布的每個 Project 傳遞各種參數來重新啟動它。我們在新的 Template 儲存庫內加入一個 YAML 範本,並將上列 DotNetCoreCLI@2 範本化:

- template: ../tasks/dotnetcore_cli_publish_task.yml
  parameter:
    projectPath: ${{ parameter. }}/**/*.csproj
    publishWebProjects: ${{ parameters.publishWebProjects }}
    arguments: '--no-build -configuration $(buildConfiguration) --out $(Build.ArtifactStagingDirecrity)/$(buildConfiguration)'
    zipAfterPublish: ${{ parameters.zipAfterPublish }}

接下來建立引用的 tasks/dotnetcore_cli_publish_task.yml

parameters:
    projectPath: ''
    arguments: ''
    publushWebProject: true
    zipAfterPublush: true

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    projects: ${{ parameters.projectPath }}
    publishWebProjects: ${{ parameters.publishWebProjects }}
    arguments: ${{ parameters.arguments }}
    zipAfterPublish: ${{ parameters.zipAfterPublush }}

除了提高管道 YAML 檔案的可讀性之外,範本還有助於提高管道的長期可維護性。 請注意,此特定任務目前為版本 2,這透過任務末尾的 @2 可以明顯看出。 現在,每當發布 @3 時,我們只需要更新範本文件,而不是在使用該任務的每個儲存庫中手動更新該任務的每個實例。

 
 

最後的問題

在處理 YAML 範本時,可能會出現一個重要問題:在哪裡儲存它們以及如何維護它們。 如果我們問應該如何儲存多個儲存庫可以使用、具有版本控制且易於維護的內容,那麼這個問題並不難。 微軟建議解決這個問題的方法是使用它自己的 git 儲存庫。


上一篇
Azure Pipeline – 自行建立清理代理程式作業資料夾 Pipeline
下一篇
Azure Pipeline 無限劍製 - VMSS 代理程式
系列文
Azure DevOps Troubleshooting and best practices 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言