zoo*_*oes 35 azure azure-devops azure-pipelines
我想弄清楚如何在我的脚本中跨 ADO 管道共享自定义变量。以下是我的脚本,分为 2 个阶段。
我将 设置curProjVersion为输出变量并尝试从不同的阶段访问它。我做得对吗?
stages:
- stage: Build
displayName: Build stage
jobs:
- job: VersionCheck
pool:
vmImage: 'ubuntu-latest'
displayName: Version Check
continueOnError: false
steps:
- script: |
echo "##vso[task.setvariable variable=curProjVersion;isOutput=true]1.4.5"
name: setCurProjVersion
displayName: "Collect Application Version ID"
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
variables:
curProjVersion1: $[ dependencies.Build.VersionCheck.outputs['setCurProjVersion.curProjVersion'] ]
jobs:
- job:
steps:
- script: |
echo $(curProjVersion1)
Run Code Online (Sandbox Code Playgroud)
Mer*_*SFT 25
更新:
跨阶段共享变量功能现已在Sprint 168 中发布。
请使用以下格式访问前一阶段的输出变量:
stageDependencies.{stageName}.{jobName}.outputs['{stepName}.{variableName}']
Run Code Online (Sandbox Code Playgroud)
原来的:
在 Azure DevOps Pipelines 中跨阶段共享变量
我不敢说它不支持共享在一个阶段定义的变量并将其传递到另一个阶段。
这是我们计划添加的功能,但直到现在,它还不受支持。你可以关注这个Github issue,很多人和你有同样的需求。你可以跟踪那个。
到目前为止,我们只支持设置多作业输出变量,但这仅支持 YAML。对于经典编辑器,没有任何计划在发布中添加此功能。
对于变通方法,您可以在阶段之前预定义变量。但一件重要的事情是,如果你在一个阶段改变它的价值。新值无法传递到下一阶段。具有新值的变量的生命周期仅存在于阶段。
Krz*_*tof 15
重要的stageDependencies是condition在阶段级别不可用。它在工作中是可行的,但不能直接在阶段(至少目前)。
stages:
- stage: A
jobs:
- job: JA
steps:
- script: |
echo "This is job Foo."
echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to true
name: DetermineResult
- script: echo $(DetermineResult.doThing)
name: echovar
- job: JA_2
dependsOn: JA
condition: eq(dependencies.JA.outputs['DetermineResult.doThing'], 'Yes')
steps:
- script: |
echo "This is job Bar."
#stage B runs if DetermineResult task set doThing variable n stage A
- stage: B
dependsOn: A
jobs:
- job: JB
condition: eq(stageDependencies.A.JA.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
variables:
varFromStageA: $[ stageDependencies.A.JA.outputs['DetermineResult.doThing'] ]
steps:
- bash: echo "Hello world stage B first job"
- script: echo $(varFromStageA)
Run Code Online (Sandbox Code Playgroud)
Blu*_*uds 13
作业现在可以访问前一阶段的变量
输出变量仍然由作业内部的步骤产生。dependencies.jobName.outputs['stepName.variableName']阶段不是指代,而是指代stageDependencies.stageName.jobName.outputs['stepName.variableName']。
https://docs.microsoft.com/en-us/azure/devops/release-notes/2020/sprint-168-update#azure-pipelines-1
Dej*_*489 11
自 2020 年 5 月 4 日起可用
现在可以在基于 YAML 的管道中跨阶段使用输出变量。这有助于您将有用的信息(例如通过/不通过决策或生成的输出的 ID)从一个阶段传递到下一个阶段。前一阶段及其作业的结果(状态)也可用。
输出变量仍然由作业内部的步骤产生。dependencies.jobName.outputs['stepName.variableName']阶段不是指代,而是指代stageDependencies.stageName.jobName.outputs['stepName.variableName']。
笔记
默认情况下,管道中的每个阶段都依赖于 YAML 文件中它之前的阶段。因此,每个阶段都可以使用前一阶段的输出变量。您可以更改依赖关系图,这也将更改可用的输出变量。例如,如果第 3 阶段需要来自第 1 阶段的变量,则需要声明对第 1 阶段的显式依赖。
对于具有代理版本 2.153.1 的 Azure DevOps 版本 Dev17.M153.5 上的阶段条件,以下工作有效:
stages:
- stage: A
jobs:
- job: JA
steps:
- script: |
echo "This is job Foo."
echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to 'Yes'
name: DetermineResult
#stage B runs if DetermineResult task set doThing variable on stage A
- stage: B
dependsOn: A
condition: eq(dependencies.A.outputs['JA.DetermineResult.doThing'], 'Yes')
jobs:
- job: JB
steps:
- bash: echo "Hello world stage B first job"
Run Code Online (Sandbox Code Playgroud)
注意:与作业相比,舞台上的属性布局有所不同:
dependencies.{stage name}.outputs['{job name}.{script name}.{variable name}']
注意:带有“stageDependencies”的表达式失败,并显示以下错误消息:
加载 YAML 构建管道时发生错误。无法识别的值:“stageDependency”。位于表达式中的 XX 位置:and(always(), eq(stageDependency.A.outputs['JA.DetermineResult.doThing'], 'Yes'))。如需更多帮助,请参阅https://go.microsoft.com/fwlink/?linkid=842996
奖金:
有关如何访问依赖阶段的状态的信息,请参阅以下文档:链接
相应文件:
要使用不同阶段的输出,您必须根据您处于阶段级别还是作业级别来使用语法:
- 在阶段级别,引用不同阶段的变量的格式是
dependencies.STAGE.outputs['JOB.TASK.VARIABLE']. 您可以在条件中使用这些变量。- 在作业级别,引用不同阶段的变量的格式是
stageDependencies.STAGE.JOB.outputs['TASK.VARIABLE']注意:默认情况下,管道中的每个阶段都依赖于 YAML 文件中前一个阶段。如果您需要引用不紧邻当前阶段之前的阶段,则可以通过
dependsOn向该阶段添加一个部分来覆盖此自动默认值。
| 归档时间: |
|
| 查看次数: |
21028 次 |
| 最近记录: |