Azure CI конвейер с выходом Gradle - пропустить задачи - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть требование, где я хочу пропустить все предстоящие задачи, если запущена задача «Освобождение артефактов». Задача освобождения артефакта выполняется только в том случае, если во время работы конвейера для одной из переменных установлено значение "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 голосов
/ 20 апреля 2020

Я согласен с логикой c, о которой упоминал @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 для всех следующих задач или заданий.

0 голосов
/ 19 апреля 2020

Вы можете сгруппировать свои задачи в заданиях, а затем использовать выходную переменную, чтобы указать, что задание на запуск выполнялось, и использовать эту переменную в последующем задании, чтобы пропустить ее. Пожалуйста, посмотрите здесь .

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."
...