我有一个具有多个阶段的管道,每个阶段都有一个公共(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')) }}
这非常好,甚至适用于 True
和 TRUE
以及 true
。但它不适用于 Yes
或 On
,它们在 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/