我有许多包含不同变量的bash脚本,这些脚本被管道传输到各种脚本中。
我一直在想是否可以提取由Azure Pipeline激活的bash脚本的输出,以便作为整个Pipeline运行时的管道变量?
示例:foo=$(date + %Y%m%d_%H%M%S)
输出:20200219_143400,我想在之后的管道中获取输出结果。
我有许多包含不同变量的bash脚本,这些脚本被管道传输到各种脚本中。
我一直在想是否可以提取由Azure Pipeline激活的bash脚本的输出,以便作为整个Pipeline运行时的管道变量?
示例:foo=$(date + %Y%m%d_%H%M%S)
输出:20200219_143400,我想在之后的管道中获取输出结果。
根据您设计管道的方式,您可以使用Azure管道变量:
- job: Job1
steps:
- bash: |
$WORKDIR/foo.sh
echo "##vso[task.setvariable variable=foo]$foo"
name: FooStep
- bash: |
$WORKDIR/nextscript.sh $(FooStep.foo)
name: NextScript
# ...
- job: Job1
steps:
- bash: |
$WORKDIR/foo.sh
echo "##vso[task.setvariable variable=foo;isOutput=true]$foo"
name: FooStep
- job: Job2
dependsOn: Job1
steps:
- bash: |
$WORKDIR/job2script.sh $[ dependencies.Job1.outputs['FooStep.foo'] ]
name: Job2ScriptStep
# ...
因此,您需要使用##vso[task.setvariable]
将需要保存到输出的所有变量“打印到管道控制台”,然后将它们作为脚本参数值传递。
foo.sh
的全部内容应该是什么样子?我一直得到空字符串。 - robertwbradfordfoo.sh
中,我们正在等待类似上面示例的东西:foo=$(date + %Y%m%d_%H%M%S)
。 - Ivan Ignatiev
"$foo"
现在具有date
命令的值/输出。你想要什么? - Jetchisel##vso[task.setvariable]
吗?参考链接:https://learn.microsoft.com/zh-cn/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#set-variables-in-scripts - Ivan Ignatiev$foo
变量的输出用作另一个bash任务的输出变量,但我找不到如何实现。 - Dor Shamayecho "##vso[task.setvariable variable=foo;isOutput=true]$foo"
,并且在另一个任务中使用它,你需要将它传递给 Job2 脚本的参数:./myscript.sh $[ dependencies.Job1.outputs['OutputsStep.foo'] ]
。 - Ivan Ignatiev