对象引用未设置为 azure 管道中的对象实例

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 语法检查器感到惊讶。


ere*_*wok 7

实际上,我昨天发现了一个 hack,用于调试这个令人讨厌的模糊且范围广泛的错误消息。

对于因此消息而失败的构建,如果您单击“运行新的”并尝试通过单击“运行”手动运行作业,此时它通常会向您提供更具体的错误消息。

例如:

azure devops管道手动运行失败


Yan*_*SFT 0

如果我删除条件,一切都会按预期进行。我很感兴趣为什么会收到此错误

检查表达式文档,您会发现:条件仅在使用模板语法时有效。

这就是为什么您不能对变量组使用条件的原因。

解决方法是使用模板来存储变量而不是变量组。

请参考变量重用

# 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)