我是 azure 管道的新手,目前正在试验将变量传递给以后的作业。这是当前的片段,我尝试使用 maven help:evaluate plugin 从 pom 文件中提取项目版本。 pomVersion 变量已填充,但无法通过 projectVersionDynamic 变量在第二个作业的同一步骤或后续步骤中使用。
stages:
- stage: FirstStage
jobs:
- job: FirstJob
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: |
pomVersion=`mvn help:evaluate -Dexpression=project.version -q -DforceStdout`
echo $pomVersion ##Prints semantic version 2.27.0-SNAPSHOT
echo '##vso[task.setvariable variable=projectVersionDynamic;isOutput=true]$pomVersion'
echo '##vso[task.setvariable variable=projectVersionStatic;isOutput=true]2.27.0'
echo $(Task1.projectVersionDynamic) ##Error message
echo $projectVersionDynamic ##Is empty
name: Task1
displayName: Task1 in JobOne of FirstStage
- job: SecondJob
dependsOn: FirstJob
variables:
DynVar: $[ dependencies.FirstJob.outputs['Task1.projectVersionDynamic'] ]
StaVar: $[ dependencies.FirstJob.outputs['Task1.projectVersionStatic'] ]
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: |
echo 'SecondJob'
echo $(DynVar) ##Is empty
echo $DynVar ##Is empty
echo $(StaVar) ##Prints 2.27.0
echo $StaVar ##Is empty
displayName: Task in JobTwo of FirstStage
观察:projectVersionDynamic 值未填充,并且在同一任务或后续任务中或以后的作业/阶段中不可用。但是,静态变量在 projectVersionStatic 中填充,没有任何问题。
是否可以在 azure 管道中为用户定义的变量设置动态值,还是我做错了什么?我在 Stages 部分看到一个示例 here,它似乎正在运行。
答案 0 :(得分:0)
Azure Pipelines 中的变量有时非常棘手。文档并不总是清楚地说明它应该如何工作。看看你的例子,一组观察:
echo '##vso[task.setvariable variable=projectVersionDynamic;isOutput=true]$pomVersion'
- 您的单引号需要是双引号才能将 $pomVersion
的值扩展到 echo
语句中task.setvariable
的目的是将价值观传达给其他任务或工作。来自文档:“这不会更新环境变量,但它确实使新变量可用于同一作业中的下游步骤。”$variable
语法不起作用,因为 task.setVariable
不会注入运行环境 - 相反,它是管道的信号,用于捕获输出并将其存储起来以备后用。
$(variable)
语法将不起作用,因为它在作业开始之前展开,因此在这里捕获为时已晚。
如果您使用我在第 1) 点中关于双引号 task.setVariable
的建议,您应该会看到第二个作业中可用的值。