AzureDevops yml pipline if 变量条件不起作用

问题描述 投票:0回答:1
variables:
- name: RerunFailedTestCase
  ${{if and(ge(variables['system.clock.hour'], 19), lt(variables['system.clock.hour'], 23)) }}:
    value: 'false'
  ${{ else }}:
    value: 'true'

在我的 yaml 管道上创建了一个变量。但这永远不会按照我设置的条件起作用。

如果在 19:00 到 23:00 之间运行,我希望它将

$(RerunFailedTestCase)
的值重新运行为
false
。以及任何其他时间的
true

if-statement azure-devops conditional-statements yaml azure-pipelines
1个回答
0
投票

如果我没记错的话,在 compile 时没有办法获取系统日期,因此无法使用

${{ if... }}
等模板表达式来执行您想要的操作。

作为解决方法,您可以:

  1. 解析特殊变量
    pipeline.startTime
    以提取管道执行的时间
  2. 设置阶段/作业/步骤条件以检查变量的值

完整的工作示例:

trigger: none

pool:
  vmImage: 'ubuntu-latest'

variables:
  - name: pipelineStartHour
    value: "$[format('{0:HH}', pipeline.startTime)]" # runtime variable

jobs:
  - job: 'ReRunFailedTestCases'
    displayName: 'Re-run failed test cases'
    steps:
    - checkout: none
    - script: |
        echo "$(pipelineStartHour)"
      displayName: 'Display pipeline start hour (UTC)'
    - script: |
        echo "Hello, world!"
      displayName: 'Re-run failed test cases'
    condition: | 
      and(
        succeeded(), 
        in(variables['pipelineStartHour'], '19', '20', '21', '22')
      )

请注意,

pipeline.startTime
的默认时区是UTC。

© www.soinside.com 2019 - 2024. All rights reserved.