azure-devops - 将 keyvault 变量传递到阶段模板 azure devops 管道
问题描述
如果我做同样的事情但不使用模板所以在 2 个阶段之间传递变量然后它可以工作并且我可以回显“$(varFromStageA)”但是当我使用模板实现相同的时候,变量是空白的。
天蓝色管道.yaml
stages:
- stage: A
jobs:
- job: JA
steps:
- task: AzureKeyVault@1
displayName: 'Get Secret'
inputs:
azureSubscription: "***********"
KeyVaultName: "*****"
SecretsFilter: '*'
RunAsPreJob: true
- script: |
echo "This is job Foo."
echo "##vso[task.setvariable variable=doThing;isOutput=true]$(MySecret)"
name: DetermineResult
- script: echo $(DetermineResult.doThing)
name: echovar
我的管道模板.yaml
parameters:
#source
sourceAccountEndpoint: '******'
sourceDatabaseName: '*****'
sourceAccount: '****'
sourceEnvironment: '******'
- stage: DownloadScript
displayName: migrata data
dependsOn: A
jobs:
- job: Pull
variables:
varFromStageA: $[stageDependencies.A.DetermineResult.outputs['DetermineResult.doThing'] ]
pool:
vmImage: windows-latest
displayName: migrate
steps:
- checkout: self
- task: Powershell@2
inputs:
targetType: 'inline'
script: |
echo "$(varFromStageA)"
解决方案
请参阅此文档:作业可以访问先前阶段的输出变量
阶段间引用变量的格式如下:</p>
stageDependencies.stageName.jobName.outputs['stepName.variableName']
从您的 YAML 示例中,stageName:A,JobName:JA。
因此,您需要在模板中使用以下格式定义变量:
varFromStageA: $[stageDependencies.A.JA.outputs['DetermineResult.doThing']
然后可以传递变量的值。
模板示例:
stages:
- stage: DownloadScript
displayName: migrata data
dependsOn: A
jobs:
- job: Pull
variables:
varFromStageA: $[stageDependencies.A.JA.outputs['DetermineResult.doThing'] ]
pool:
vmImage: windows-latest
displayName: migrate
steps:
- checkout: self
- task: Powershell@2
inputs:
targetType: 'inline'
script: |
echo "$(varFromStageA)"
推荐阅读
- json - 使用 curl 发布多部分/表单数据、文件和大量键值对
- javascript - 我在 JssorSlider 中面临滑块元素重复问题
- javascript - Tensorflow.js 如何计算张量中每个值出现的次数?
- django - 如何排除 django 聚合中的值?
- c - 带位域的 QR 编码
- typescript - 如何在复杂接口中初始化接口属性
- java - 调用 Query.uniqueResult() 时出现 ClassCastException
- android - Android NDK C++ 断点仅适用于模拟器
- websocket - 防火墙阻止与第二个 WebSocket 服务器的连接
- python - 如何使用 python 将 URL 响应数据存储到 PSQL 数据库中