带有gradle版本的Azure CI管道-跳过任务

时间:2020-04-19 17:32:36

标签: azure-devops azure-pipelines azure-pipelines-build-task

如果运行“发布工件”任务,我有一个要跳过所有即将执行的任务的要求。仅当在运行管道时将变量之一设置为“ 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。

2 个答案:

答案 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)

enter image description here


通过这种方式,您不需要为所有下一个任务或作业配置condition