範本參數

您可以在範本中指定參數及其資料類型,並在管線中參考這些參數。 使用 templateContext,您也可以將屬性傳遞至範本中做為參數的階段、步驟和作業。

您也可以 在範本外部使用參數。 針對參數預設值,您只能使用常值。 深入瞭解 YAML 架構中的參數。

傳遞參數

參數必須包含名稱和數據類型。 在 中 azure-pipelines.yml,如果 參數 yesNo 設定為布爾值,則組建會成功。 如果 yesNo 設定為 之類的 apples字串,則組建會失敗。

# File: simple-param.yml
parameters:
- name: yesNo # name of the parameter; required
  type: boolean # data type of the parameter; required
  default: false

steps:
- script: echo ${{ parameters.yesNo }}
# File: azure-pipelines.yml
trigger:
- main

extends:
  template: simple-param.yml
  parameters:
      yesNo: false # set to a non-boolean value to have the build fail

使用templateContext將屬性傳遞至範本

您可以使用 templateContext 將更多屬性傳遞至範本中做為參數的 階段、步驟和 作業 。 具體來說,您可以在 templateContext、 jobList 或 deploymentList 參數資料類型內指定 stageList。

templateContext 可讓您更輕鬆地在處理每個作業時設定環境。 藉由將作業及其環境屬性對象結合在一起, templateContext 有助於建立更容易維護且更容易瞭解的 YAML。

在這個範例中,testSet 參數在testing-template.yml中具有資料類型jobList。 此範本testing-template.yml會使用testJob來建立新的變數。 然後,範本會參考 testJob.templateContext.expectedHTTPResponseCode,它會在 azure-pipeline.yml 中被設定,並傳遞至範本。

當回應碼為 200 時,範本會提出 REST 要求。 當回應碼為 500 時,範本會輸出所有環境變數以進行偵錯。

templateContext 可以包含屬性。

#testing-template.yml

parameters: 
- name: testSet
  type: jobList

jobs:
- ${{ each testJob in parameters.testSet }}:  # Iterate over each job in the 'testSet' parameter
  - ${{ if eq(testJob.templateContext.expectedHTTPResponseCode, 200) }}: # Check if the HTTP response is 200
    - job:
      steps: 
      - powershell: 'Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ | Format-Table -Property Title, pubDate'
      - ${{ testJob.steps }}    
  - ${{ if eq(testJob.templateContext.expectedHTTPResponseCode, 500) }}: # Check if the HTTP response is 500
    - job:
      steps:
      - powershell: 'Get-ChildItem -Path Env:\' # Run a PowerShell script to list environment variables
      - ${{ testJob.steps }} # Include additional steps from the 'testJob' object
#azure-pipeline.yml

trigger: none

pool:
  vmImage: ubuntu-latest

extends:
  template: testing-template.yml 
  parameters:
    testSet:  # Define the 'testSet' parameter to pass to the template
    - job: positive_test # Define a job named 'positive_test'
      templateContext:
        expectedHTTPResponseCode: 200 # Set the expected HTTP response code to 200 for this job
      steps:
      - script: echo "Run positive test" 
    - job: negative_test # Define a job named 'negative_test'
      templateContext:
        expectedHTTPResponseCode: 500 # Set the expected HTTP response code to 500 for this job
      steps:
      - script: echo "Run negative test" 

在執行時選取範本的參數

視條件而定,您可以從管線 YAML 呼叫不同的範本。 在此範例中 experimental.yml ,YAML 會在 參數 experimentalTemplate 為 true 時執行。

#azure-pipeline.yml
parameters:
- name: experimentalTemplate 
  displayName: 'Use experimental build process?'
  type: boolean
  default: false

steps:
- ${{ if eq(parameters.experimentalTemplate, true) }}: # Check if 'experimentalTemplate' is true
  - template: experimental.yml
- ${{ if not(eq(parameters.experimentalTemplate, true)) }}:  # Check if 'experimentalTemplate' is not true
  - template: stable.yml

參數數據類型

資料類型 備註
string 字串
stringList 項目清單,可以選取多個項目。 範本中無法使用
number 可能限制為 values:,否則接受任何類似數值的字串
boolean true 或 false
object 任何 YAML 結構
step 單一步驟
stepList 步驟順序
job 單一作業
jobList 作業順序
deployment 單一部署作業
deploymentList 部署任務順序
stage 單一階段
stageList 階段序列

step、stepList、job、 jobListdeploymentdeploymentListstagestringList和 stageList 資料類型全都使用標準 YAML 架構格式。 這個範例包含 string、 number、 boolean、 object、 step和 stepList。

備註

在範本 stringList 中無法使用此數據類型。 請改用模板中的object數據類型。

parameters:
- name: myString  # Define a parameter named 'myString'
  type: string  # The parameter type is string
  default: a string  # Default value is 'a string'

- name: myMultiString  # Define a parameter named 'myMultiString'
  type: string  # The parameter type is string
  default: default  # Default value is 'default', only one default
  values:  # Allowed values for 'myMultiString'
  - default  
  - ubuntu  

- name: myStringlist # Define a parameter named 'myStringlist'
  type: stringList # The parameter type is stringList
  displayName: Regions
  values: # Allowed values for 'myStringlist'
    - WUS
    - CUS
    - EUS
  default: # Default values
    - WUS
    - CUS
    
- name: myNumber  # Define a parameter named 'myNumber'
  type: number  # The parameter type is number
  default: 2  # Default value is 2
  values:  # Allowed values for 'myNumber'
  - 1  
  - 2  
  - 4  
  - 8  
  - 16  

- name: myBoolean  # Define a parameter named 'myBoolean'
  type: boolean  # The parameter type is boolean
  default: true  # Default value is true

- name: myObject  # Define a parameter named 'myObject'
  type: object  # The parameter type is object
  default:  # Default value is an object with nested properties
    foo: FOO  # Property 'foo' with value 'FOO'
    bar: BAR  # Property 'bar' with value 'BAR'
    things:  # Property 'things' is a list
    - one  
    - two  
    - three  
    nested:  # Property 'nested' is an object
      one: apple  # Property 'one' with value 'apple'
      two: pear  # Property 'two' with value 'pear'
      count: 3  # Property 'count' with value 3

- name: myStep  # Define a parameter named 'myStep'
  type: step  # The parameter type is step
  default:  # Default value is a step
    script: echo my step 

- name: mySteplist  # Define a parameter named 'mySteplist'
  type: stepList  # The parameter type is stepList
  default:  # Default value is a list of steps
    - script: echo step one  
    - script: echo step two  
    
trigger: none  

jobs: 
- job: stepList  # Define a job named 'stepList'
  steps: ${{ parameters.mySteplist }}  # Use the steps from the 'mySteplist' parameter

- job: myStep  # Define a job named 'myStep'
  steps:
    - ${{ parameters.myStep }}  # Use the step from the 'myStep' parameter

- job: stringList  # Define a job named 'stringList'
  steps:
  - ${{ each region in parameters.myStringlist }}:
      - script: echo ${{region}}

逐一查看參數及其數據類型

Azure Pipelines 可讓您逐一查看各種數據類型的參數,例如字串、對象、數位和布爾值。 這種彈性可根據參數值來啟用動態管線行為。 以下範例示範如何逐一查看參數並處理不同的數據類型。

逐一查看簡單參數

您可以循環執行簡單的參數,例如字串、數位和布爾值。 在此範例中,管線會逐一查看參數清單,並列印其名稱和值。

# start.yaml
parameters:
- name: myStringName
  type: string
  default: a string value
- name: myNumber
  type: number
  default: 2
- name: myBoolean
  type: boolean
  default: true

steps: 
- ${{ each parameter in parameters }}:
  - script: echo ${{ parameter.Key }} 
  - script: echo ${{ parameter.Value }}
# azure-pipeline.yaml
trigger: none

extends:
  template: start.yaml

逐一查看物件

物件可讓您定義複雜的參數結構,例如巢狀專案。 您可以逐一查看物件來存取其索引鍵和值或巢狀屬性。

範例:逐一查看物件索引鍵和值

下列範本檔案會將 myObject 參數定義為具有預設索引鍵/值組的物件。 作業會逐一查看索引鍵並列印其值。

# object-keys-template.yml

parameters:
  - name: myObject
    type: object
    default:
      key1: 'value1'
      key2: 'value2'
      key3: 'value3'

jobs:
- job: ExampleJob
  displayName: 'Example object parameter job'
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: |
      echo "Keys in myObject:"
      echo "Key1: ${{ parameters.myObject.key1 }}"
      echo "Key2: ${{ parameters.myObject.key2 }}"
      echo "Key3: ${{ parameters.myObject.key3 }}"
    displayName: 'Display object keys and values'

管線會以自定義值覆寫 的 myObject 預設值。

# azure-pipelines.yml

trigger:
- main

extends:
  template: object-keys-template.yml
  parameters:
    myObject:
      key1: 'customValue1'
      key2: 'customValue2'
      key3: 'customValue3'
範例:逐一查看巢狀物件

此範本會定義一個 listOfFruits 參數,其中包含具有巢狀陣列的物件,然後使用巢狀循環來處理每個水果及其相關聯的色彩。

# File: nested-objects-template.yml

parameters:
- name: listOfFruits
  type: object
  default:
  - fruitName: 'apple'
    colors: ['red', 'green']
  - fruitName: 'lemon'
    colors: ['yellow']

steps:
- ${{ each fruit in parameters.listOfFruits }}: # Iterate over each fruit in the 'listOfFruits'
  - ${{ each fruitColor in fruit.colors }}: # Iterate over each color in the current fruit's colors
    - script: echo ${{ fruit.fruitName }} ${{ fruitColor }} # Echo the current fruit's name and color

管線檔案會示範如何使用自定義水果數據覆寫預設值。

# File: azure-pipelines.yml

trigger:
- main

extends:
  template: nested-objects-template.yml
  parameters:
    listOfFruits:
    - fruitName: 'banana'
      colors: ['yellow']
    - fruitName: 'grape'
      colors: ['purple', 'green']

使用 stepList 參數動態包含步驟清單

在此範例中 stepList ,參數類型是用來動態包含建置程式中的步驟清單。

  • 主要管線 (azure-pipelines.yml) 定義兩個作業:建置和部署。
  • 建置作業會使用範本 (build.yml),並使用 參數傳遞建置工作 stepList 清單。
  • 範本會 build.yml 動態包含 參數中 build_tasks 定義的步驟。
#azure-pipelines.yml

trigger:
- main

jobs:
  - job: build
    displayName: 'Build .NET Core Application'
    pool:
      vmImage: 'ubuntu-latest'

    steps:
      - checkout: self

      - template: build.yml
        parameters:
          build_tasks:
            - task: DotNetCoreCLI@2
              displayName: 'Restore'
              inputs:
                command: 'restore'
                projects: '**/*.csproj'  

            - task: DotNetCoreCLI@2
              displayName: 'Build'
              inputs:
                command: 'build'
                arguments: '--no-restore'
                projects: '**/*.csproj' 

  - job: deploy
    displayName: 'Pack for Azure App Service deployment'
    dependsOn: build
    pool:
      vmImage: 'ubuntu-latest'
    steps:
      - download: current
        artifact: drop

build.yml 範本:

  • 使用 stepList 類型和預設空白清單來定義 參數 build_tasks 。
  • 將 .NET Core SDK 設定為 8.x。
  • 逐一查看 參數中的每個 build_tasks 步驟。
  • 執行清單中定義的 build_tasks 每個步驟。
#build.yml

parameters:
  - name: build_tasks
    type: stepList
    default: []

steps:
  - task: UseDotNet@2
    displayName: 'Use .NET Core SDK'
    inputs:
      packageType: 'sdk'
      version: '8.x'

  - ${{ each step in parameters.build_tasks }}:
      - ${{ step }}

  - task: DotNetCoreCLI@2
    displayName: 'Publish'
    inputs:
      command: 'publish'
      arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
      projects: '**/*.csproj'

  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact'
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)'
      ArtifactName: 'drop'