yaml - YAML 对象中的 bool 属性不再是 bool 值

标签 yaml azure-pipelines

我有一个具有多个阶段的管道,每个阶段都有一个公共(public)选项。我想单独控制每个阶段的该选项,但也有一种方法可以强制所有阶段关闭该选项。 YAML 大致如下所示:

parameters:
  -name: globalFlag
   type: boolean
   default: true

  -name: stageSettings
    type: object
    default:
      - stageName: stageOne
        stageFlag: true
      - stageName: stageTwo
        stageFlag: false

...

stages
  - ${{each stageDef in parameters.stageSettings }}:
    ...
    myFlag: ${{ and(parameters.globalFlag, stageDef.stageFlag) }}

这几乎有效,但我相信 stageDef.stageFlag 被解释为字符串,因为如果 parameters.globalFlag ,最后一行的计算结果始终为 true code> 为 true。这很奇怪,就好像该行只是 myFlag: ${{ stageDef.stageFlag }} 它按预期工作。

我可以通过将行更改为来解决此问题

myFlag: ${{ and(parameters.globalFlag, eq(stageDef.stageFlag, 'true')) }}

这非常好,甚至适用于 TrueTRUE 以及 true。但它不适用于 YesOn,它们在 YAML 中也是 true。因此,当有人输入真实值并且它无法按预期工作时,它很容易使人绊倒。

如何将对象类型中的属性 stageFlag 解释为 bool 值?有没有办法标记对象内属性的类型?有没有一种方法可以将字符串转换为 bool 值,以处理输入 bool 值的所有有效方式?

最佳答案

这可能是由于所有 YAML 变量都存储为 string in an Azure DevOps pipeline .

另一方面,您的参数可以 use different data types 。 尽管 globalFlag 是一个 bool 值,但 stagesettings 是一个 YAML 对象,因此不幸的是,所有 YAML 变量都存储为字符串在这里适用。 p>

但正如您所发现的,使用“eq”等表达式可以解决您的问题 bit through type casting the string in the expression .

我认为没有其他方法可以使用此对象参数,也没有方法可以定义变量的类型。

关于yaml - YAML 对象中的 bool 属性不再是 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75252234/

相关文章:

python - 推送到开发时遇到 GAE 错误

ubuntu - Ansible 剧本错误!在/home/中找不到角色 'Juniper.junos'

azure-devops - Azure DevOps 管道 : Visual Studio build Task ignores settings in . editorconfig

azure-devops - VS 测试在管道中失败,缺少 'Microsoft.NET.Test.Sdk'

nuget - DevOps 管道 NuGet 推送 - NuGetProtocolVersionNotSupportedException

java - 如何从 YAML 文件加载 DATETIME 对象?

ruby-on-rails - 如何防止 yaml 中的字符串转换为时间

spring - 无法使用 Spring Boot、JUnit5 和 Kotlin 加载带有 @TestPropertySource 的 test-properties.yaml 文件

azure - 如何使用 Azure 运行 REST API 获取管道运行错误

azure - 错误代码 :6002 in Azure Synapse Analytics pipeline