gpt4 book ai didi

azure-devops - Azure DevOps yaml 管道表达式未评估

转载 作者:行者123 更新时间:2023-12-05 02:00:51 25 4
gpt4 key购买 nike

我正在尝试分配 PublishTestResults@2 azure-pipelines.yml 文件中任务的 failTask​​OnFailedTests 参数是表达式的结果。第一次运行测试时,如果有任何失败的测试我想让工作失败。在随后尝试重试失败的作业时,我不想让作业失败。

我已经像这样设置了任务(倒数第二行是我设置 failTask​​OnFailedTests 参数的地方):

    - task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '*.xml'
searchFolder: '$(testsOutputPath)'
mergeTestResults: true
failTaskOnFailedTests: eq($(System.JobAttempt), 1)
testRunTitle: 'Test Results $(System.JobAttempt)'

当我在启用系统诊断的情况下运行管道时,我可以在日志中看到这一点:

##[debug]testRunTitle=Test Results 1
##[debug]publishRunAttachments=true
##[debug]failTaskOnFailedTests=eq(1, 1)
##[debug]searchFolder=/home/vsts/work/1/s/TestProject/cypress/reports/junit
##[debug]testRunner: JUnit
##[debug]testResultsFiles: *.xml
##[debug]mergeResults: true

第三行显示 failTask​​OnFailedTests 被设置为表达式语句,而不是表达式的计算值。我不知道我做错了什么。该表达式似乎与 Expressions documentation 中的其他表达式一致.

我错过了什么?

最佳答案

在 Azure DevOps 中,您可以使用 compile time ( ${{ <expressions> }} ) 和 runtime ( $[ <expression> ] ) expressions .

当服务器渲染模板时,编译时间表达式被处理一次。在管道执行时评估运行时表达式。

在您的情况下,您需要使用运行时表达式,但它们只能用于变量赋值或 condition参数。

示例:

condition: eq(variables['System.JobAttempt'], '1')

所以使用这种方法你不能配置failTaskOnFailedTests直接输入,但您可以完全跳过该任务。

我没有对此进行测试,但要获得预期的结果,您可以尝试使用脚本来设置 failTaskOnFailedTests取决于 System.JobAttempt值(value)。

示例:

- bash: echo "##vso[task.setvariable variable=FailTask]$((( $(System.JobAttempt) > 1 )) && echo false || echo true)"

- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '*.xml'
searchFolder: '$(testsOutputPath)'
mergeTestResults: true
failTaskOnFailedTests: $(FailTask)
testRunTitle: 'Test Results $(System.JobAttempt)'

也有可能直接操作变量可能会起作用。

示例:

variables:
FailTask: $[ le( variables['System.JobAttempt'], 1 ) ]

- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '*.xml'
searchFolder: '$(testsOutputPath)'
mergeTestResults: true
failTaskOnFailedTests: $(FailTask)
testRunTitle: 'Test Results $(System.JobAttempt)'

关于azure-devops - Azure DevOps yaml 管道表达式未评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66992406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com