布尔变量作为模板参数输入
我正在尝试使用VariablesAzure Pipelines 中通过-Screen设置的变量作为模板参数的输入,但出现错误:
解析管道 YAML 时遇到错误:/azure-pipelines.yml(第 18 行,第 25 行):“androidIsLibrary”参数值“$(ANDROID_IS_LIBRARY)”不是有效的布尔值。
我在 Azure Pipelines 中构建了一个模板。模板采用几个参数。它看起来像这样:
parameters:
- name: androidIsLibrary
type: boolean
default: false
我在变量组中设置了一个变量ANDROID_IS_LIBRARYvalue false。
我使用以下语句在管道中添加了变量组:
variables:
- group: adr-general-library
之后,我包含了我的模板和参数,如下所示:
jobs:
- template: job--android--build_and_deploy.yml@templates
parameters:
androidIsLibrary: $(ANDROID_IS_LIBRARY)
我在 Azure DevOps 文档中找不到这个特定用例的示例,所以我希望有人已经遇到过这个问题。我想将该模板与参数一起使用,但想将我的参数集中在一个变量组中。变量和参数比较多,直接把变量定义放到模板里不是解决办法。而且我也无法更改模板。
提前致谢
回答
我以前遇到过完全相同的问题。
这个问题的根本原因是变量组中的变量是字符串类型而不是布尔类型。
因此,当您将变量值传递给参数时,它会显示错误消息。
我向我们的产品组确认了这个问题,这是设计使然。
这是回复:
在我们处理 ${{ templates }} 的时候,$(variables) 的内容没有被处理。所以确实,"$(BooleanVar)" 永远不会是一个布尔值。事实上,任何变量都不能是布尔值——变量总是字符串。这是按设计工作的。
对于解决方法,您需要在模板中将参数类型更改为字符串类型:
例如:
parameters:
- name: androidIsLibrary
type: string
default: false
然后它会起作用。
另一种方法是您可以在 Main Yaml 文件中定义变量并使用这种格式 ${{variables.variablename}}
例如:
variables:
- name: one
value: true
steps:
- template: build.yml
parameters:
androidIsLibrary: ${{ variables.one }}