VSTS - есть ли способ запустить задачу только в случае сбоя определенной задачи? - PullRequest
0 голосов
/ 13 сентября 2018

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

Есть ли способ сделать это?

Я надеялся, что смогу установить выходную переменную в зависимости от успеха задачи, а затем использовать эту переменную в пользовательском условии для запуска задачи, если она не удалась.

Я не вижу, как установить выходную переменную в случае сбоя задачи. Это возможно?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Вы можете проверить предыдущие задачи через PowerShell с помощью REST API сборки, например, чтобы проверить taskA (отображаемое имя) и запустить taskB в случае сбоя taskA:

  1. Проверка Allow scripts to access the OAuth token опция в Фазе
  2. Добавление задачи PowerShell (Запустите эту задачу: Only when a previous task has failed; Аргументы: -targetTaskName "taskA" -collectionURL $(Build.Repository.Uri) -projectName $(System.TeamProject) -buildId $(Build.BuildId) -token $(System.AccessToken))

Код:

param(
    [string]$token,
        [string]$targetTaskName,
        [string]$collectionURL,
        [string]$projectName,
        [string]$buildId
    )
    $buildTimelineREST="$collectionURL$projectName/_apis/build/builds/$buildId/Timeline?api-version=4.1"
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "test",$token)))
    $result= Invoke-RestMethod -Method GET -Uri $buildTimelineREST -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
    $targetTask=$result.records | where { $_.Name -eq $targetTaskName }
    Write-Host $targetTask.result
    if($targetTask.result -eq "failed"){
        Write-Host "##vso[task.setvariable variable=isTaskAFailed;]true"
    }
  1. Задача B (Запустить эту задачу: Custom conditions; Пользовательское условие: eq(variables['isTaskAFailed'],'true')
0 голосов
/ 13 сентября 2018
  • В настройках Задачи разверните «Параметры управления»
  • Выберите в «Выполнить эту задачу» - Only when a previous task has failed.

enter image description here

Если вы хотите запустить задачу только в случае сбоя последней / конкретной задачи:

Предположим, что ваше конкретное задание (которое вы рассматриваете в отношении его статуса) называется A Цель состоит в том, чтобы вызвать другую задачу сборки (скажем, B) только в случае сбоя A.

  • Определите пользовательскую переменную , назовите ее task.A.status и установите success
  • Создайте еще одну задачу сборки, например, C и запланируйте это сразу после A; запускать его только в случае сбоя A - для этого есть стандартное условие
  • Задача C должна делать только одно - установить task.A.status переменную сборки на 'fail' (например, если мы говорим о PowerShell: Write-Host "##vso[task.setvariable variable=task.A.status]failure")
  • Наконец, задание B запланировано через некоторое время после C и обусловлено для запуска в случае, если task.A.status равно failure, например: eq(variables['task.A.status'], 'failure')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...