【问题标题】:Is there a different way to pass Azure DevOps parameters to its child pipelines?是否有其他方法可以将 Azure DevOps 参数传递到其子管道?
【发布时间】:2021-12-29 00:24:34
【问题描述】:

我目前正在构建一个具有参数列表的管道,然后将传递这些值以供子管道使用。

主管道:

trigger: none

parameters:
  - {name: 'location', type: string, default: 'eastus2', values: ['eastus2', 'centralus'], displayName: 'Resource group location'}
  - {name: 'sqlDBAutoPauseDatabase', type: string, default: 'ooi', values: ['ooi', 'poembi'], displayName: 'SQL DB Autopause - Target database name'}
  - {name: 'sqlDBAutoPauseAction', type: string, default: 'Enable', values: ['Enable', 'Disable'], displayName: 'SQL DB Autopause - Action to perform'}
  - {name: 'sqlDBAutoPauseDelay', type: number, default: 60, values: [60, -1], displayName: 'SQL DB Autopause - Autopause delay time'}

stages:
- stage: 'Autopause'
  jobs:
  - template: '/cicd/pipelines/ooi/iac/ooi-sqldb-autopause.yaml'
    parameters:
      parent:
          ${{ insert }}: ${{ parameters }}

要运行的第一个子管道:

parameters:
  - {name: parent, type: object, default: {}}

jobs:
  - deployment: 'deploymentName'
    environment: 'OOI-${{parameters.parent.envName}}'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzurePowerShell@5
            inputs:
              azureSubscription: '$(ADO_Connection)'
              azurePowerShellVersion: 'LatestVersion'
              ScriptType: 'InlineScript'
              Inline: |
                Set-AzSqlDatabase `
                  -ResourceGroupName $(ResourceGroupName) `
                  -DatabaseName ${{parameters.parent.sqlDBAutoPauseDatabase}} `
                  -ServerName $(ServerShort) `
                  -AutoPauseDelayInMinutes ${{parameters.parent.sqlDBAutoPauseDelay}}

这很好用,但这意味着我必须将运行所需的所有管道切换为模板文件。我想知道是否有另一种方法可以将这些参数传递给子管道?我一直在研究其他选项,例如变量组和使用 REST API。

【问题讨论】:

    标签: azure-devops yaml azure-pipelines azure-powershell


    【解决方案1】:

    建议将参数转换为可变模板文件。该模板将由每个作业模板加载并删除参数,让作业检索它们。除非您需要根据工作覆盖这些所说的值。如果不同环境可以动态加载不同的变量集。

    应该是这样的

    envName_variables.yml:

    variables:
      - {name: 'location', type: string, default: 'eastus2', values: ['eastus2', 'centralus'], displayName: 'Resource group location'}
      - {name: 'sqlDBAutoPauseDatabase', type: string, default: 'ooi', values: ['ooi', 'poembi'], displayName: 'SQL DB Autopause - Target database name'}
      - {name: 'sqlDBAutoPauseAction', type: string, default: 'Enable', values: ['Enable', 'Disable'], displayName: 'SQL DB Autopause - Action to perform'}
      - {name: 'sqlDBAutoPauseDelay', type: number, default: 60, values: [60, -1], displayName: 'SQL DB Autopause - Autopause delay time'}
    

    然后是你的工作模板:

      - deployment: 'deploymentName'
        environment: 'OOI-${{parameters.parent.envName}}'
        variables:
            - template: ${{parameters.parent.envName}_variables.yml
        strategy:
          runOnce:
            deploy:
              steps:
              - task: AzurePowerShell@5
                inputs:
                  azureSubscription: '$(ADO_Connection)'
                  azurePowerShellVersion: 'LatestVersion'
                  ScriptType: 'InlineScript'
                  Inline: |
                    Set-AzSqlDatabase `
                      -ResourceGroupName $(ResourceGroupName) `
                      -DatabaseName ${{variables.sqlDBAutoPauseDatabase}} `
                      -ServerName $(ServerShort) `
                      -AutoPauseDelayInMinutes ${{variables.sqlDBAutoPauseDelay}}
    

    这也将保留variables scoped to just the instance of the job

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2014-05-05
      相关资源
      最近更新 更多