get*_*ode 5 azure azure-devops azure-pipelines
我有一个 Azure 管道,它首先声明一些变量,包括从模板 YAML 文件中提取的一些变量。以下是仅关注关键部分的管道摘要:
variables:
- template: "variables/my-variables.yml"
Run Code Online (Sandbox Code Playgroud)
第一阶段直接编码到管道 YAML 中并导致发布工件:
artifact: ${{ variables.artifactName }}-provisioning
Run Code Online (Sandbox Code Playgroud)
在Variables/my-variables.ymlartifactName中定义的变量在哪里。
下一阶段使用外部文件中模板中的作业:
- stage: Next
displayName: "Stage using template yml"
jobs:
- template: templates/jobs/external.yml
Run Code Online (Sandbox Code Playgroud)
在该外部文件中,有几个作业本身是从外部文件引用的:
jobs:
- deployment: PublishArmTemplate
strategy:
runOnce:
deploy:
steps:
- template: "../job.yml"
parameters:
ArtifactName: ${{ variables.artifactName }}
Run Code Online (Sandbox Code Playgroud)
请注意,它variables.artifactName作为参数传递给作业的ArtifactName参数。
该作业 YAML 文件本身有一个步骤,该步骤取决于我上面发布的工件:
parameters:
- name: 'ArtifactName'
type: string
steps:
- download: current
artifact: ${{ parameters.ArtifactName }}-provisioning
Run Code Online (Sandbox Code Playgroud)
但是,当管道运行时,我收到此错误:
##[错误]未找到构建 322650 的 Artifact -provisioning。
换句话说,我定义的变量和管道本身的作用域尚未传递到该作业步骤(parameters.ArtifactName为空)。
我根据 Microsoft 文档的理解是,管道范围内的变量应该可用于所有阶段和作业。使用模板时这不适用吗?或者我还需要做些什么才能使其正常工作?
这些变量不可用于管道的嵌套组件。根据文档(我也经历过这种行为):
在模板表达式中,您可以访问包含传入参数值的参数上下文。此外,您还可以访问包含 YAML 文件中指定的所有变量以及许多预定义变量(在每个变量上注明)的变量上下文。该主题中的变量)。
通过“YAML 文件”,它们实际上是指在其中进行引用的当前文件。
在嵌套模板中,您需要
所以,你可以这样做:
- stage: Next
displayName: "Stage using template yml"
jobs:
- template: templates/jobs/external.yml
parameters:
artifactName: ${{ variables.artifactName }}
Run Code Online (Sandbox Code Playgroud)
进而
parameters:
- name: artifactName
type: string
jobs:
- deployment: PublishArmTemplate
strategy:
runOnce:
deploy:
steps:
- template: "../job.yml"
parameters:
ArtifactName: ${{ parameters.artifactName }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |