Ale*_*lex 5 azure azure-pipelines
我正在尝试根据 azure 构建管道中的当前分支导入变量组,但出现此错误:“对象引用未设置为对象的实例”。
我已经简化了这个案例,当我的 .yaml 文件中有两行(条件和导入)时,我收到了这个错误:
variables:
${{ if eq('bbb', 'master') }}:
- group: variables-shared
Run Code Online (Sandbox Code Playgroud)
如果我删除条件,一切都会按预期进行。如果我删除组导入,我会收到与下面未定义变量相关的其他错误(这是正常的)。
我很感兴趣为什么我会收到这个错误
Ben*_*rns 17
我也有这个确切的问题。当前接受的答案中的推理不正确,实际上您可以在azure-pipelines.yml文件中使用条件插入来有条件地包含特定的变量组。
当文档说条件插入需要使用模板语法时,他们指的是模板表达式语法,而不是直接使用模板。根据前面的链接,模板表达式语法是${{ }}扩展表达式的语法。
从文档中的示例中可以看出,问题中示例的问题实际上是语法错误。
不正确:
variables:
${{ if eq('bbb', 'master') }}:
- group: variables-shared
Run Code Online (Sandbox Code Playgroud)
正确的:
variables:
- ${{ if eq('bbb', 'master') }}:
- group: variables-shared
Run Code Online (Sandbox Code Playgroud)
- 请注意第二行 $ 字符之前的前导。我已经在自己的管道中对此进行了测试,并且它可以工作,尽管它确实使我的 IDE 中的 yaml 语法检查器感到惊讶。
实际上,我昨天发现了一个 hack,用于调试这个令人讨厌的模糊且范围广泛的错误消息。
对于因此消息而失败的构建,如果您单击“运行新的”并尝试通过单击“运行”手动运行作业,此时它通常会向您提供更具体的错误消息。
例如:
如果我删除条件,一切都会按预期进行。我很感兴趣为什么会收到此错误
检查表达式文档,您会发现:条件仅在使用模板语法时有效。
这就是为什么您不能对变量组使用条件的原因。
解决方法是使用模板来存储变量而不是变量组。
请参考变量重用:
# File: vars.yml
variables:
favoriteVeggie: 'brussels sprouts'
# File: azure-pipelines.yml
variables:
- template: vars.yml # Template reference
steps:
- script: echo My favorite vegetable is ${{ variables.favoriteVeggie }}.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4122 次 |
| 最近记录: |