【问题标题】:Azure DevOps variable is unexpected set to NullAzure DevOps 变量意外设置为 Null
【发布时间】:2021-05-28 18:00:31
【问题描述】:

我有一个包含多个作业的管道。出于某种原因,设置阶段的变量在从作业运行的条件下为 Null。

这是管道 yaml:

https://github.com/ossentoo/azdo-yaml-varsdemo/tree/feature/private-agent

我不希望评估为 false 的语法在 child.yml(第 24 行)中:

我已从 Azure DevOps logs 的日志中附加了一个文件

在第 73 行的日志中,显示如下:

问题是,如果值是在阶段设置的,为什么变量applicationsList为Null?我尝试将语法更改为 variables.applicationsList,但这似乎也不起作用。

谢谢

谢谢

【问题讨论】:

    标签: azure-devops azure-pipelines azure-pipelines-yaml


    【解决方案1】:

    问题在于${{ ... }} 语法是在编译时评估的。在那个时间点,该值仍未定义。

    相反,您可以使用condition: $[ ... ]。该语法将在运行时进行评估。

    见:

    - ${{ each folder in parameters.folders }}:
      - deployment: ${{replace( folder ,'-','_')}}
        displayName: 'Apply ${{ folder }}'
        timeoutInMinutes: 480
        condition: $[contains(variables['applicationsList'], ${{folder}})]
    

    【讨论】:

    • 谢谢杰西。但是,我应该将哪一行更改为 $[]?您是指 if 语句周围的 ${{}} 吗?我认为您的意思是 child.yml 文件应该在哪里进行更改?如果是这样,我不确定这是否是有效的 yaml。请使用上面的代码给我一个例子吗?
    • 我在上面发布的内容。您需要为部署作业设置条件,而不是使用 if 使其成为可选条件。
    • 好的 - 谢谢。有没有办法我可以使用 If 语句?我更喜欢这样,如果一个工作应该被禁用,它不应该出现在浏览器中。如果我使用这个条件,这个工作就会出现在浏览器中(尽管它被禁用)。
    • 如果您想在运行时计算/设置变量值,则不是。在这种情况下,该变量必须在解析和编译 YAML 模板时可用。如果您将变量作为输入传递(在排队时设置),那可能会起作用。
    猜你喜欢
    • 2021-11-23
    • 1970-01-01
    • 2022-10-25
    • 2019-12-31
    • 1970-01-01
    • 2021-06-28
    • 2020-04-02
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多