如何有条件地设置Azure DevOps参数的值?

时间:2020-10-20 15:57:18

标签: azure-devops yaml expression

我有一个Azure DevOps管道,用于旋转一些键。有两个主要要求-

  • 一次只能旋转一个键。
  • 任何键都可以通过手动运行临时旋转。

为此,我计划使用在不同日期运行的cron计划。然后应使用参数,默认值基于星期几设置为特定的“键类型”。使用参数意味着用户还可以指定手动运行管道时要旋转的键。

不幸的是,我想出的办法不起作用。参数中的四个表达式均产生以下错误-

A template expression is not allowed in this context

根据documentation ...

编译时表达式可以在任何地方使用

...但是这似乎不正确。我希望我会丢失一些东西,而不是文档不正确,但是无论哪种方式,我都不确定如何实现自己的目标。

pr: none
trigger: none
schedules:
- cron: 0 2 * * 0-3,6
  displayName: Rotate a key
  branches:
    include:
    - develop
  always: true

parameters:
- name: keyKinds
  displayName: Key Kinds
  type: string
  ${{ if not(in(format('{0:dddd}', pipeline.startTime), 'Sunday', 'Monday', 'Tuesday')) }}:
    default: primary
  ${{ if eq(format('{0:dddd}', pipeline.startTime), 'Sunday') }}:
    default: secondary
  ${{ if eq(format('{0:dddd}', pipeline.startTime), 'Monday') }}:
    default: primaryReadonly
  ${{ if eq(format('{0:dddd}', pipeline.startTime), 'Tuesday') }}:
    default: secondaryReadonly
  values:
  - primary
  - secondary
  - primaryReadonly
  - secondaryReadonly

1 个答案:

答案 0 :(得分:0)

我认为this可能会回答以下问题:

使用模板表达式指定在管道初始化期间如何动态解析值。将模板表达式用以下语法包装:$ {{}}。

模板表达式可以扩展模板参数以及变量。您可以使用参数来影响模板的扩展方式。参数对象的工作方式类似于表达式中的变量对象。模板表达式中只能使用预定义变量。

仅针对阶段,作业,步骤和容器(内部资源)扩展表达式。例如,您不能在触发器内部使用表达式或诸如存储库之类的资源。此外,在Azure DevOps 2020 RTW上,您不能在容器内使用模板表达式。