【发布时间】:2019-11-25 19:09:22
【问题描述】:
Azure DevOps yaml 中的普通(非模板)作业支持跨作业变量传递,如下所示:
jobs:
- job: A
steps:
- script: "echo ##vso[task.setvariable variable=skipsubsequent;isOutput=true]false"
name: printvar
- job: B
condition: and(succeeded(), ne(dependencies.A.outputs['printvar.skipsubsequent'], 'true'))
dependsOn: A
steps:
- script: echo hello from B
鉴于模板不支持dependsOn 语法,我该如何做以下类似的事情?我需要从第一个模板获取输出并将其作为“environmentSlice”传递给第二个模板。
- stage: Deploy
displayName: Deploy stage
jobs:
- template: build-templates/get-environment-slice.yml@templates
parameters:
configFileLocation: 'config/config.json'
- template: build-templates/node-app-deploy.yml@templates
parameters:
# Build agent VM image name
vmImageName: $(Common.BuildVmImage)
environmentPrefix: 'Dev'
environmentSlice: '-$(dependencies.GetEnvironmentSlice.outputs['getEnvironmentSlice.environmentSlice'])'
我希望将两个模板分开的原因是第二个模板是部署模板,我想从第一个模板输入第二个模板中的环境命名。 IE。 node-app-deploy.yml(第二个模板)的初始部分是:
jobs:
- deployment: Deploy
displayName: Deploy
# Because we use the environmentSlice to name the environment, we have to have it passed in rather than
# extracting it from the config file in steps below
environment: ${{ parameters.environmentPrefix }}${{ parameters.environmentSlice }}
更新:
公认的解决方案允许您在单独的模板之间传递变量,但不适用于我的特定用例。我希望能够动态命名第二个模板的“环境”部分,即environment: ${{ parameters.environmentPrefix }}${{ parameters.environmentSlice }},但这只能静态命名,因为模板是在管道启动时编译的。
该解决方案的缺点是它在模板之间引入了隐藏的耦合。我希望调用管道来协调模板之间的参数传递。
【问题讨论】:
-
将 Azure 文档链接到use outputs in a different job
标签: azure-devops azure-pipelines