在管道作业之间访问变量

问题描述 投票:0回答:1

我有一个 yaml,它调用模板来执行一些任务,其中之一是部署 azure 基础设施,另一个是运行 powershell 脚本来解析输出变量。

如何在 yaml 中的不同作业中访问这些变量?

jobs:
  - deployment: Dep1
    displayName: MyDep1
    pool:
      name:
    variables:
      //some variables
    strategy:
      runOnce:
        deploy:
          steps:
          - download: current
            artifact: drop
          - task: //ignore
           
          - template: mytemplatelocation
            parameters:
              //all template parameters that also runs powershell script to parse output variables

          - task: Powershell@2
            inputs:
              targetType: 'inline'
              script: 'Write-Host "$(myVariable)'

Powershell任务能够打印变量值

但是我在这个管道中还有另一份工作,如下:

- deployment: Dep2
    displayName: MyDep2
    dependsOn: [Dep1]
    pool:
      name: 
    variables: 
      actualVarToUse: $[ dependencies.Dep1.outputs['myVariable'] ]
      actualVarToUseDup: $[dependencies.Dep1.outputs['TaskNameFromTemplate.myVariable']]    
    strategy:
     runOnce:
       deploy:
        steps:
        - download: current
          artifact: check
        - script: echo $(actualVarToUse) //does not work
        - task: Powershell@2
          inputs:
            targetType: 'inline'
            script: 'Write-Host "$(actualVarToUse)"' //does not work
        - task: Powershell@2
          inputs:
            targetType: 'inline'
            script: 'Write-Host "$(actualVarToUseDup)"' //does not work
        - task: Powershell@2
          inputs:
            targetType: 'inline'
            script: 'Write-Host $[dependencies.Dep1.outputs[myVariable]]' //does not work

请推荐?

azure azure-pipelines azure-pipelines-release-pipeline azure-pipelines-tasks azure-yaml-pipelines
1个回答
0
投票

如果您想跨作业访问变量,请按如下方式修复:

  1. 在模板中,当您在
    isoutput=true
    下设置变量时,请确保使用
    steps
parameters:
- name: 'var'  # defaults for any parameters that aren't specified
  type: string

steps:
- pwsh: Write-Host "##vso[task.setvariable variable=myVariable;isoutput=true]${{ parameters.var }}"
  name: setvarStep

PS:如果你

don't
在模板中设置了变量,在
Dep1
作业中,你需要使用isoutput=true来设置变量,以便该变量可以在下一个作业中使用。

  1. 在主yaml中,要调用同一个作业中的变量,需要在变量前添加

    stepname
    ,如
    $(setvarStep.myVariable)

  2. 在下一个 Dep2 作业中,确保将作业名称作为部署作业的输出变量的前缀。在本例中,作业名称为

    Dep1

主要 Yaml:

pool:
  vmImage: ubuntu-latest

jobs:
  - deployment: Dep1
    displayName: MyDep1
    variables:
      - name: var1
        value: var1value
    environment: Dep1
    strategy:
      runOnce:
        deploy:
          steps:
          - template: template/azure-devops-template1.yml
            parameters:
              var: "testvar value"
          
          - task: PowerShell@2
            inputs:
              targetType: 'inline'
              script: 'Write-Host $(setvarStep.myVariable)'


  - deployment: Dep2
    displayName: MyDep2
    dependsOn: [Dep1]
    environment: Dep2
    variables: 
      VartoUse: $[ dependencies.Dep1.outputs['Dep1.setvarStep.myVariable'] ]
    strategy:
      runOnce:
        deploy:
          steps:
          - task: Powershell@2
            inputs:
              targetType: 'inline'
              script: 'Write-Host "$(VartoUse)"' 

检查管道中的值:

更多详情可以参考下面的官方doc

© www.soinside.com 2019 - 2024. All rights reserved.