Azure Pipeline:将变量传递到多个阶段
Azure Pipeline: Passing variable to multiple stages
是否可以声明一个变量然后将其传递到下游?
我在 StageA -> StageB -> StageC 下面有一张图片
我在 StageA 上的存储帐户获得 url,我想将它用于 Stage B 和 StageC
但是如果我使用 [stagedependencies.StageA.JobA.outputs['var'],它只适用于 StageB 而不是 StageC
- stage: 'StageC'
dependsOn: 'StageB'
pool:
vmImage: 'windows-latest'
variables:
blobUri: $[stageDependencies.StageA.JobA.outputs['createOutput.blobUri']]
jobs:
- job: 'JobC'
steps:
- checkout: none
- download: none
- powershell: |
echo JobBUri: $(blobUri)
也许我在某个地方遗漏了它,但这是否意味着您只能从您所依赖的即时阶段获取变量?
示例:
trigger:
- master
pool:
vmImage: ubuntu-latest
stages:
- stage: 'StageA'
jobs:
- job: 'JobA'
steps:
- task: Powershell@2
name: 'createOutput'
inputs:
targetType: 'inline'
script: |
Write-Output "##vso[task.setvariable variable=blobUri;isOutput=true]www.google.com"
- stage: 'StageB'
dependsOn: 'StageA'
pool:
vmImage: 'windows-latest'
variables:
blobUri: $[stageDependencies.StageA.JobA.outputs['createOutput.blobUri']]
jobs:
- job: 'JobB'
steps:
- powershell: |
echo JobBUri: $(blobUri)
- stage: 'StageC'
dependsOn: 'StageB'
pool:
vmImage: 'windows-latest'
variables:
blobUri: $[stageDependencies.StageA.JobA.outputs['createOutput.blobUri']]
jobs:
- job: 'JobC'
steps:
- powershell: |
echo JobBUri: $(blobUri)
试试这个,在阶段 A 中设置的变量可能会在 stageDependencies.StageA
之前在阶段 C 中可用
- stage: 'StageC'
dependsOn:
- StageA
- StageB
其他解决方法是在阶段 B 中再次将此变量设置为输出变量,并通过 stageDependencies.StageB(...)
从 C 访问它
来自发行说明
默认情况下,管道中的每个阶段都依赖于 YAML 文件中它之前的阶段。因此,每个阶段都可以使用前一阶段的输出变量。您可以更改依赖关系图,这也会更改可用的输出变量。例如,如果阶段 3 需要来自阶段 1 的变量,则需要声明对阶段 1 的显式依赖。
以下说明 Kontekst 的回答是正确的(我本来打算编辑 post 添加这个,但不知道在这里是否合适?):
以下证实并说明这是正确答案:
stages:
- stage: A
jobs:
- job: A1
steps:
- pwsh: Write-Host "##vso[task.setvariable variable=varFromA;isOutput=true]A"
name: writevar
- stage: B
dependsOn: A
jobs:
- job: B1
variables:
varA: $[ stageDependencies.A.A1.outputs['writevar.varFromA'] ]
steps:
- pwsh: |
Write-Host "##vso[task.setvariable variable=varFromB;isOutput=true]B"
Write-Host "accesses $(VarA) from A"
name: writevar
- stage: C
dependsOn:
- A
- B
jobs:
- job: C1
variables:
varA: $[ stageDependencies.A.A1.outputs['writevar.varFromA'] ]
varB: $[ stageDependencies.B.B1.outputs['writevar.varFromB'] ]
steps:
- pwsh: |
Write-Host "##vso[task.setvariable variable=varFromC;isOutput=true]C"
Write-Host "accesses $(varB) from B"
Write-Host "accesses $(varA) from A"
name: writevar
是否可以声明一个变量然后将其传递到下游? 我在 StageA -> StageB -> StageC 下面有一张图片 我在 StageA 上的存储帐户获得 url,我想将它用于 Stage B 和 StageC
但是如果我使用 [stagedependencies.StageA.JobA.outputs['var'],它只适用于 StageB 而不是 StageC
- stage: 'StageC'
dependsOn: 'StageB'
pool:
vmImage: 'windows-latest'
variables:
blobUri: $[stageDependencies.StageA.JobA.outputs['createOutput.blobUri']]
jobs:
- job: 'JobC'
steps:
- checkout: none
- download: none
- powershell: |
echo JobBUri: $(blobUri)
也许我在某个地方遗漏了它,但这是否意味着您只能从您所依赖的即时阶段获取变量?
示例:
trigger:
- master
pool:
vmImage: ubuntu-latest
stages:
- stage: 'StageA'
jobs:
- job: 'JobA'
steps:
- task: Powershell@2
name: 'createOutput'
inputs:
targetType: 'inline'
script: |
Write-Output "##vso[task.setvariable variable=blobUri;isOutput=true]www.google.com"
- stage: 'StageB'
dependsOn: 'StageA'
pool:
vmImage: 'windows-latest'
variables:
blobUri: $[stageDependencies.StageA.JobA.outputs['createOutput.blobUri']]
jobs:
- job: 'JobB'
steps:
- powershell: |
echo JobBUri: $(blobUri)
- stage: 'StageC'
dependsOn: 'StageB'
pool:
vmImage: 'windows-latest'
variables:
blobUri: $[stageDependencies.StageA.JobA.outputs['createOutput.blobUri']]
jobs:
- job: 'JobC'
steps:
- powershell: |
echo JobBUri: $(blobUri)
试试这个,在阶段 A 中设置的变量可能会在 stageDependencies.StageA
之前在阶段 C 中可用- stage: 'StageC'
dependsOn:
- StageA
- StageB
其他解决方法是在阶段 B 中再次将此变量设置为输出变量,并通过 stageDependencies.StageB(...)
从 C 访问它来自发行说明
默认情况下,管道中的每个阶段都依赖于 YAML 文件中它之前的阶段。因此,每个阶段都可以使用前一阶段的输出变量。您可以更改依赖关系图,这也会更改可用的输出变量。例如,如果阶段 3 需要来自阶段 1 的变量,则需要声明对阶段 1 的显式依赖。
以下说明 Kontekst 的回答是正确的(我本来打算编辑 post 添加这个,但不知道在这里是否合适?):
以下证实并说明这是正确答案:
stages:
- stage: A
jobs:
- job: A1
steps:
- pwsh: Write-Host "##vso[task.setvariable variable=varFromA;isOutput=true]A"
name: writevar
- stage: B
dependsOn: A
jobs:
- job: B1
variables:
varA: $[ stageDependencies.A.A1.outputs['writevar.varFromA'] ]
steps:
- pwsh: |
Write-Host "##vso[task.setvariable variable=varFromB;isOutput=true]B"
Write-Host "accesses $(VarA) from A"
name: writevar
- stage: C
dependsOn:
- A
- B
jobs:
- job: C1
variables:
varA: $[ stageDependencies.A.A1.outputs['writevar.varFromA'] ]
varB: $[ stageDependencies.B.B1.outputs['writevar.varFromB'] ]
steps:
- pwsh: |
Write-Host "##vso[task.setvariable variable=varFromC;isOutput=true]C"
Write-Host "accesses $(varB) from B"
Write-Host "accesses $(varA) from A"
name: writevar