我有一个 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
请推荐?
如果您想跨作业访问变量,请按如下方式修复:
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来设置变量,以便该变量可以在下一个作业中使用。
在主yaml中,要调用同一个作业中的变量,需要在变量前添加
stepname
,如$(setvarStep.myVariable)
。
在下一个 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: