如果运行“发布工件”任务,我有一个要跳过所有即将执行的任务的要求。仅当在运行管道时将变量之一设置为“ true”时,发布工件任务才运行。
parameters:
release: $(release)
- task: Bash@3
displayName: Release artifacts
condition: and(succeeded(), eq('${{ parameters.release }}', true))
inputs:
targetType: 'inline'
script: |
# Write your commands here
# Steps to release the artifacts ( gradle release plugin)
gradle release -Prelease.useAutomaticVersion=true
- task: Bash@3
- task: Bash@3
有没有办法退出/截断退出代码为0的管道?我正在寻找一种功能来跳过所有即将到来的任务,如果其中一个条件为真,而不必在所有任务中添加该检查?
原因:gradle版本将对gradle.properties进行修改,从而再次触发CI。
答案 0 :(得分:0)
您可以将任务分组到作业中,然后使用输出变量来设置发布任务已运行,并在后续作业中使用此变量将其跳过。请看看here。
jobs:
- job: Foo
steps:
- script: |
echo "This is job Foo."
echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to true
name: DetermineResult
- job: Bar
dependsOn: Foo
condition: eq(dependencies.Foo.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
steps:
- script: echo "Job Foo ran and doThing is true."
答案 1 :(得分:0)
我同意@Krzysztof提到的逻辑,但由于您的下一个过程是steps
而不是jobs
,因此似乎对您的情况不方便。这意味着您需要为所有后续步骤配置condition
,以使其跳过。
我有另一个主意。您可以在powershell
步骤之后添加一个Release artifacts
步骤。此powershell
步骤的执行条件仅是先前的Release artifacts
步骤成功。
在此Powershell步骤中,您可以运行一个api以取消当前管道。简而言之,就是Release artifacts
步骤执行成功之后,跳过所有后续步骤和作业并直接取消当前管道。
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
[String]$project = "$env:SYSTEM_TEAMPROJECT"
[String]$OrgUri = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"
$header = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}
$pipeline = $OrgUri + $project + "/_apis/build/builds/" + $(Build.BuildId) + “?api-version=6.0-preview.5"
$Body=@"
{"status":4}
"@
Invoke-RestMethod -Uri $pipeline -Method PATCH -Body $Body -ContentType "application/json" -Headers $header
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
通过这种方式,您不需要为所有下一个任务或作业配置condition
。