Azure devops Azure DevOps yaml管道表达式未计算

Azure devops Azure DevOps yaml管道表达式未计算,azure-devops,azure-devops-pipelines,Azure Devops,Azure Devops Pipelines,我正在尝试将azure pipelines.yml文件中任务的failTaskOnFailedTests参数指定为表达式的结果。第一次运行测试时,如果有任何失败的测试,我希望作业失败。在随后尝试重试失败的作业时我不希望作业失败 我这样设置了任务(倒数第二行是设置failTaskOnFailedTests参数的位置): -任务:PublishTestResults@2 displayName:“发布测试结果” 投入: testResultsFormat:'JUnit' testResultsFil

我正在尝试将
azure pipelines.yml
文件中任务的
failTaskOnFailedTests
参数指定为表达式的结果。第一次运行测试时,如果有任何失败的测试,我希望作业失败。在随后尝试重试失败的作业时我不希望作业失败

我这样设置了任务(倒数第二行是设置
failTaskOnFailedTests
参数的位置):

-任务:PublishTestResults@2
displayName:“发布测试结果”
投入:
testResultsFormat:'JUnit'
testResultsFiles:“*.xml”
searchFolder:“$(testsOutputPath)”
mergeTestResults:true
failTaskOnFailedTests:eq($(系统作业尝试),1)
testRunTitle:'TestResults$(System.jobtreat)'
当我在启用系统诊断的情况下运行管道时,我可以在日志中看到:

##[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
第三行显示设置为表达式语句的
failTaskOnFailedTests
,而不是表达式的计算值。我不知道我做错了什么。这个表达方式似乎与本书中的其他表达方式一致


我缺少什么?

在Azure DevOps中,您可以使用(
${{}}
)和(
$[]

当服务器呈现模板时,编译时表达式只处理一次。运行时表达式在管道执行时进行计算

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

示例:

条件:eq(变量['System.jobtreat'],'1')
因此,使用这种方法,您不能直接配置
failTaskOnFailedTests
输入,但可以完全跳过该任务

我没有对此进行测试,但为了获得所需的结果,您可以尝试使用脚本来设置
failTaskOnFailedTests
,具体取决于
System.jobtrupt

示例:

-bash:echo“##vso[task.setvariable=FailTask]$(($(System.jobtreat)>1))&echo false | | echo true)”
-任务:PublishTestResults@2
displayName:“发布测试结果”
投入:
testResultsFormat:'JUnit'
testResultsFiles:“*.xml”
searchFolder:“$(testsOutputPath)”
mergeTestResults:true
failTaskOnFailedTests:$(FailTask)
testRunTitle:'TestResults$(System.jobtreat)'
直接操作变量也有可能奏效

示例:

变量:
FailTask:$[le(变量['System.jobtrunt'],1)]
-任务:PublishTestResults@2
displayName:“发布测试结果”
投入:
testResultsFormat:'JUnit'
testResultsFiles:“*.xml”
searchFolder:“$(testsOutputPath)”
mergeTestResults:true
failTaskOnFailedTests:$(FailTask)
testRunTitle:'TestResults$(System.jobtreat)'

通过脚本设置变量,并使用该变量为我修复它。谢谢你的帮助@BigPigVT听上去不错,我还添加了一个直接使用变量赋值的示例,因此您可能根本不需要该脚本。