Big*_*gVT 3 azure-devops azure-devops-pipelines
我试图将文件中的PublishTestResults@2任务的failTaskOnFailedTests
参数分配azure-pipelines.yml
为表达式的结果。第一次运行测试时,如果有任何失败的测试,我想让作业失败。在随后尝试重试失败的作业时,我不想让作业失败。
我已经像这样设置了任务(倒数第二行是我设置参数的地方failTaskOnFailedTests
):
- 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)'
Run Code Online (Sandbox Code Playgroud)
当我在启用系统诊断的情况下运行管道时,我可以在日志中看到以下内容:
##[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
Run Code Online (Sandbox Code Playgroud)
第三行显示failTaskOnFailedTests
被设置为表达式语句,而不是表达式的计算值。我对自己做错的事情感到不知所措。该表达式似乎与表达式文档中的其他表达式一致。
我缺少什么?
在 Azure DevOps 中,您可以使用编译时( ${{ <expressions> }}
) 和运行时( $[ <expression> ]
)表达式。
当服务器呈现模板时,编译时表达式将被处理一次。运行时表达式在管道执行时进行计算。
在您的情况下,您需要使用运行时表达式,但它们只能在变量赋值或条件参数中使用。
例子:
condition: eq(variables['System.JobAttempt'], '1')
Run Code Online (Sandbox Code Playgroud)
因此,使用这种方法您无法failTaskOnFailedTests
直接配置输入,但您可以完全跳过该任务。
我还没有对此进行测试,但为了达到所需的结果,您可以尝试使用脚本failTaskOnFailedTests
根据System.JobAttempt
值进行设置。
例子:
- 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)'
Run Code Online (Sandbox Code Playgroud)
直接操作变量也有可能起作用。
例子:
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)'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3213 次 |
最近记录: |