首页 > 解决方案 > 将 keyvault 变量传递到阶段模板 azure devops 管道

问题描述

如果我做同样的事情但不使用模板所以在 2 个阶段之间传递变量然后它可以工作并且我可以回显“$(varFromStageA)”但是当我使用模板实现相同的时候,变量是空白的。

天蓝色管道.yaml

stages:
- stage: A
  jobs:
  - job: JA
    steps:
    - task: AzureKeyVault@1
      displayName: 'Get Secret'
      inputs:
        azureSubscription: "***********"
        KeyVaultName: "*****"
        SecretsFilter: '*'
        RunAsPreJob: true
    - script: |
        echo "This is job Foo."
        echo "##vso[task.setvariable variable=doThing;isOutput=true]$(MySecret)" 
      name: DetermineResult
    - script: echo $(DetermineResult.doThing)
      name: echovar

我的管道模板.yaml

parameters:
#source
  sourceAccountEndpoint: '******'
  sourceDatabaseName: '*****'
  sourceAccount: '****'
  sourceEnvironment: '******'


  - stage: DownloadScript
    displayName: migrata data
    dependsOn: A
    jobs:
    - job: Pull
      variables:
        varFromStageA: $[stageDependencies.A.DetermineResult.outputs['DetermineResult.doThing'] ]
      pool:
        vmImage: windows-latest
      displayName: migrate

      steps:
      - checkout: self
      - task: Powershell@2
        inputs:
          targetType: 'inline'
          script: |
            echo "$(varFromStageA)"

标签: azure-devops

解决方案


请参阅此文档:作业可以访问先前阶段的输出变量

阶段间引用变量的格式如下:</p>

stageDependencies.stageName.jobName.outputs['stepName.variableName']

从您的 YAML 示例中,stageName:A,JobName:JA。

因此,您需要在模板中使用以下格式定义变量:

varFromStageA: $[stageDependencies.A.JA.outputs['DetermineResult.doThing']

然后可以传递变量的值。

模板示例:

 stages:
  - stage: DownloadScript
    displayName: migrata data
    dependsOn: A
    jobs:
    - job: Pull
      variables:
        varFromStageA: $[stageDependencies.A.JA.outputs['DetermineResult.doThing'] ]
      pool:
        vmImage: windows-latest
      displayName: migrate

      steps:
      - checkout: self
      - task: Powershell@2
        inputs:
          targetType: 'inline'
          script: |
            echo "$(varFromStageA)"

推荐阅读