azure-devops - 嵌套 yaml 管道 Azure DevOps 中的默认参数
问题描述
我有多个可重复使用的 yaml 模板来使用 Azure DevOps 构建我的项目。当我不想覆盖它时,我想让默认模板值。我遇到的问题是当我嵌套多个模板时,它没有按预期工作,这是我的问题的一个示例:
- task_template1.yml:
parameters:
foo: 'data'
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: echo ${{ parameters.foo }}
在 job_template.yml 我这样称呼这个 task_template1.yml:
- 工作模板.yml:
parameters:
fooTemplate: 'data'
jobs:
- job:
steps:
- template: task_template1.yml
parameters:
${{ if variables[parameters.fooTemplate] }}:
foo: ${{ parameters.fooTemplate }}
然后是我的全局模板:
- stage_build.yml:
stages:
- stage: Build
jobs:
- template: job_template.yml
parameters:
fooTemplate: 'hello'
所以在这种情况下,默认情况下,我希望我的变量fooTemplate
将我的变量的值设置为,因为我指定了它。但事实并非如此,因为它看起来像是在构建开始之前评估的,所以设置为而不是. 相反,如果我想保留( ) 的默认值,我只想不这样指定它:foo
task_template1.yml
hello
${{ if variables[parameters.fooTemplate] }}:
foo
data
hello
fooTemplate
data
stages:
- stage: Build
jobs:
- template: job_template.yml
它看起来像嵌套模板的问题。我该怎么做才能符合这两条规则?如果需要,请随时问我更多细节。
编辑:
我总是收到这样的信息:'foo has no value: undefined'
我有的其他情况,而不是一个简单的参数:
parameters:
foo:'data'
foo1:'data1'
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: echo ${{ parameters.foo }}
所以对于我的工作:
parameters:
fooTemplate:
foo:'data'
foo1:'data1'
jobs:
- job:
steps:
- template: task_template1.yml
parameters:
${{ if ne(parameters.fooTemplate.foo, ' ') }}:
foo: ${{ parameters.fooTemplate.foo }}
${{ if ne(parameters.fooTemplate.foo1, ' ') }}:
foo: ${{ parameters.fooTemplate.foo1 }}
然后同样的情况,如果我没有指定foo
和foo1
值,我有未定义的错误,而不是采用默认值:
stages:
- stage: Build
jobs:
- template: job_template.yml
解决方案
我认为您的语法有问题:
parameters:
${{ if variables[parameters.fooTemplate] }}:
foo: ${{ parameters.fooTemplate }}
试试这种方式(根据this):
parameters:
${{ if eq(parameters.fooTemplate, true) }}:
foo: ${{ parameters.fooTemplate }}
它对我有用。
笔记:
你可以有这样的东西:
parameters:
fooTemplate: 'data'
jobs:
- job:
steps:
- template: task_template1.yml
parameters:
${{ if ne(parameters.fooTemplate, ' ') }}:
foo: ${{ parameters.fooTemplate }}
现在,如果您在 中指定 'hello' stage_build.yml
,task_template1.yml
将输出hello
。如果你没有stage_build.yml
像这样指定参数:
pool:
vmImage: 'ubuntu-latest'
jobs:
- template: job_template.yml
它将输出默认值data
。这是有关Expressions和Conditions的更多详细信息。
推荐阅读
- pointers - 将实现特征的数据存储在向量中
- android - 不同的风味使用不同的存储库
- magento2 - 无效的表单键。请刷新页面 - 每当我创建帐户或登录时,访客页面都会弹出此错误
- ms-access - 使用 RIGHT() 函数访问 SQL 更新案例
- java - Java - 没有迭代器分配的无重复集合
- autodesk-forge - Autodesk Forge - 在 Forge 中加载、修改和查看 Revit 模型
- java - 如何根据字符串的长度对字符串进行分组?
- ruby-on-rails - ActiveRecord::Base 的完整文档,包括实例方法列表
- javascript - 继承原型JS时如何传递参数?
- c - 一次读取一个带有空格的文件