Tho*_*mas 2 azure-devops azure-pipelines azure-pipelines-yaml
我正在使用 Azure DevOps 管道来部署我的代码,现在我需要将变量值从部署作业传递到依赖于它的后续作业。我已经阅读了这个例子,但它似乎根本不起作用。
我想做的是运行一个配置 Key Vault 的 Azure ARM 部署。密钥保管库的名称是从 ARM 部署作业输出的,然后我尝试将该名称传递给另一个需要添加特定机密的作业。访问控制已得到处理,但我仍然需要传递名称。
我已将问题归结为将变量从 a 传递deployment
到 a的基础知识job
。这是我完整的测试管道(几乎完全从这里复制):
trigger: none
stages:
- stage: X
jobs:
- deployment: A
pool:
vmImage: "ubuntu-16.04"
environment: test
strategy:
runOnce:
deploy:
steps:
- script: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the deployment variable value"
name: setvarStep
- script: echo $(setvarStep.myOutputVar)
name: echovar
- job: B
dependsOn: A
pool:
vmImage: "ubuntu-16.04"
variables:
myVarFromDeploymentJob: $[ dependencies.A.outputs['deploy.setvarStep.myOutputVar'] ]
steps:
- script: "echo $(myVarFromDeploymentJob)"
name: echovar
Run Code Online (Sandbox Code Playgroud)
一旦我运行此命令,回显值在 job 中为空白B
,但在部署中定义A
。为什么是这样?有没有一种方法可以将所有内容都放入其中dependencies.A.outputs
,以便我可以看到我必须处理的内容?
如何将变量从runOnce
部署作业传递到常规作业?
编辑:此问题中提到的文档现已得到纠正和改进。
我已经解决了。问题在于,此处的文档指定了用于获取部署变量的架构runOnce
:
$[dependencies.<job-name>.outputs['<lifecycle-hookname>.<step-name>.<variable-name>']]
Run Code Online (Sandbox Code Playgroud)
这实际上是错误的。该<lifecycle-hookname>
参数应替换为部署的名称,如下所示:
$[dependencies.<job-name>.outputs['<job-name>.<step-name>.<variable-name>']]
Run Code Online (Sandbox Code Playgroud)
本文档中的示例(向下滚动一点)是正确的。
我已经测试过并有效的完整示例管道:
$[dependencies.<job-name>.outputs['<lifecycle-hookname>.<step-name>.<variable-name>']]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1125 次 |
最近记录: |