为什么 Azure Yaml 管道“模板参数”if 条件在比较数字时无法正确解析?

问题描述 投票:0回答:1

我有一个

parent.yml
sub.yml
,如下所示:

parent.yml

variables:
  - name: JavaVersion
    value: 21

jobs:
  - template: templates/sub.yml
    parameters:
      JavaVersion: $(JavaVersion)

sub.yml

parameters:
  JavaVersion: ''

jobs:
  - job: UseJavaVersion
    steps:
      - ${{ if ge(parameters.JavaVersion, 21) }}:
          - task: PowerShell@2
            displayName: Set default java version to ${{ parameters.JavaVersion }}

      - ${{ else }}:
          - task: PowerShell@2
            displayName: Install java version ${{ parameters.JavaVersion }}

当我运行作业时,它总是转到其他部分。为什么 'if-condition' 的计算结果不为 true ?我在这里做错或错过了什么?

我尝试将

parent.yml
中的变量值更改为“21”,并将
sub.yml
if 条件中的变量值更改为“21”,但不起作用。

我还在这个github页面中找到了一些相关讨论https://github.com/microsoft/azure-pipelines-agent/issues/1749但它并没有真正澄清我的问题。

我希望由于变量 JavaVersion 的值为 21,那么应该执行

sub.yml
中的 if 条件,并且我们应该看到名为“将默认 java 版本设置为 ${{parameters.JavaVersion }}”的步骤。

注意:由于它总是转到其他部分,因此步骤显示名称显示正确的 JavaVersion 由 ${{parameters.JavaVersion }} 解析。

azure-devops azure-pipelines azure-pipelines-yaml azure-pipelines-build-task azure-pipelines-tasks
1个回答
0
投票

您正在尝试使用仅在运行时可用的值来执行条件插入表达式。

永远记住:变量在运行时评估;参数仅存在于编译时

如果你想在编译时进行条件插入,则需要使用参数的编译时值:

# pipeline.yml
jobs:
  - template: templates/sub.yml
    parameters:
      JavaVersion: 21

如果您想使用变量,则必须在任务上使用条件:

# pipeline.yml
jobs:
- template: templates/sub.yml
  parameters:
    JavaVersion: $(currentJavaVersion)
# templates/sub.yml
parameters:
- name: JavaVersion
  type: string

jobs:
- job: UseJavaVersion

  variables:
    javaVersion: ${{ parameters.JavaVersion }}
 
  steps:
  - task: PowerShell@2
    displayName: Using Java 21 or greater
    condition: and( succeeded(), ge( variables['javaVersion'], 21) )
    inputs:
      targetType: inline
      script: Write-Host "Using ${{ parameters.JavaVersion }}"

  - task: PowerShell@2
    displayName: Install java 
    condition: and( succeeded(), lt( variables['javaVersion'], 21) )
    inputs:
      targetType: inline
      script: Write-Host "Installing!"
© www.soinside.com 2019 - 2024. All rights reserved.