Конвейеры триггеров Azure DevOps

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

variables:
- group: ReleaseVariables

name: 5.8$(rev:.r)

jobs:
- job: Ring_Web_Policy_Editor
  timeoutInMinutes: 360

  pool:
    name: DATA-AUTOMATION-WIN10
    demands: Cmd

  steps:
  - task: TriggerPipeline@1
    inputs:
      serviceConnection: 'azure-connection-dev'
      project: '46da8f34-c009-4433-a2f5-1790a09b6055'
      Pipeline: 'Build'
      buildDefinition: 'Web Policy Editor'
      Branch: '$(Build.SourceBranch)'
  - task: TriggerPipeline@1
    inputs:
      serviceConnection: 'azure-connection-dev'
      project: '46da8f34-c009-4433-a2f5-1790a09b6055'
      Pipeline: 'Build'
      buildDefinition: '(Chrome) Web Policy Editor Automation'
      Branch: '$(Build.SourceBranch)'
  - task: TriggerPipeline@1
    inputs:
      serviceConnection: 'azure-connection-dev'
      project: '46da8f34-c009-4433-a2f5-1790a09b6055'
      Pipeline: 'Build'
      buildDefinition: '(Firefox) Web Policy Editor Automation'
      Branch: '$(Build.SourceBranch)'
    
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
391
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

сделайте первый, а затем выполните два других после того, как первый был успешным.

Вы можете добавить задачу PowerShell после первой задачи Trigger Pipeline.

Вот пример скрипта Powershell:

$token = "PAT"

$url = "https://dev.azure.com/{OrganizationName}/{ProjectName}/_apis/build/definitions/{DeefinitionId}?includeLatestBuilds=true&api-version=5.1"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))



$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json

$buildid = $response.latestBuild.id

$success = $false

do{
    try{
    $Buildurl2 = "https://dev.azure.com/{OrganizationName}/{ProjectName}/_apis/build/builds/$($buildid)?api-version=5.0"
    $Buildinfo2 = Invoke-RestMethod -Method Get -ContentType application/json -Uri $Buildurl2 -Headers @{Authorization=("Basic {0}" -f $token)}
    $BuildStatus= $Buildinfo2.status 
    $result = $Buildinfo2.result
    echo $result
    echo $BuildStatus
 
   
        if ($BuildStatus -eq "completed") {            

            write-output "No Running Pipeline, starting Next Pipeline"
            $success = $true 
                       
      } else {   
            Write-output "Pipeline Build In Progress, Waiting for it to finish!"  
            Write-output "Next attempt in 30 seconds"
            Start-sleep -Seconds 30         

            }
    
      
    }
    catch{
        Write-output "catch - Next attempt in 30 seconds"
        write-output "1"
        Start-sleep -Seconds 30
      # Put the start-sleep in the catch statemtnt so we
      # don't sleep if the condition is true and waste time
    }
    
    $count++
    
}until($count -eq 2000 -or $success -eq $true )
if ($result -ne "succeeded")
{
   echo "##vso[task.logissue type=error]Something went very wrong."
}

if (-not($success)){exit}

Объяснение:

Этот сценарий powershell запускает следующие два API Rest:

Определения - Получить

Билды - Получить

Сценарий проверяет состояние запущенного конвейера (путем опроса). Если конвейер завершен и результат успешен, он активирует два других конвейера. Или он будет ждать, пока конвейер завершит сборку.

Образец трубопровода:

 steps:
  - task: TriggerPipeline@1
  - task: PowerShell@2
  - task: TriggerPipeline@1
  - task: TriggerPipeline@1

Образец результата:

Привет, я попробовал это, и он просто работал бесконечно pastebin.com/xYYU3AGh Я предполагаю, что он не смог подобрать сборку

Mohammed Faisal Qureshi 23.12.2020 10:36

@MohammedFaisalQureshi For бесконечно, можете ли вы объяснить мне это? Вы застряли в этой задаче powershell? Если есть возможность, поделитесь со мной скриншотом.

Kevin Lu-MSFT 23.12.2020 10:38

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

Kevin Lu-MSFT 23.12.2020 10:42

Он просто запускает следующую попытку через 30 секунд и работает вечно, даже когда сборка завершена prnt.sc/w8dxlf

Mohammed Faisal Qureshi 23.12.2020 10:45

Спасибо. Судя по вашему снимку экрана, API не работает успешно. Потому что команда echo не вывела значение. Можете ли вы попробовать жестко кодировать PAT? Например: $token = "PAT". (без переменной) Убедитесь, что вы ввели правильное определение сборки.

Kevin Lu-MSFT 23.12.2020 10:53

Да, определение сборки равно 528, и я просто получаю тот же цикл без эхо-сигналов выше, когда я вручную вставляю токен.

Mohammed Faisal Qureshi 23.12.2020 11:00

Дополнительная информация: вам необходимо убедиться, что конвейер может работать параллельно. Например: задача конвейера 1 запускает конвейер 2, конвейер 1 и конвейер 2 могут работать одновременно. Если вы не можете запускать параллельные задания, вы застрянете. В этом случае я мог бы воспроизвести эту проблему. Вы можете попробовать сделать проект общедоступным и проверить, работает ли он.

Kevin Lu-MSFT 23.12.2020 11:06

Все они могут работать отдельно, поэтому я могу запустить 3 сборки Task 1, если я хочу, чтобы автоматизация могла запускать 3 задачи, поэтому 1 chrome и 1 firefox и 1 бесплатно для чего-то еще. Так что я думаю, что это может работать параллельно

Mohammed Faisal Qureshi 23.12.2020 11:08

Я также не могу сделать проект общедоступным, к сожалению

Mohammed Faisal Qureshi 23.12.2020 11:11
            $Username=${env:USERNAME}
            $PAT=${env:PATTOKEN}
            $Buildurl2 = "https://dev.azure.com/{ORGANISATION}/{Project}/_apis/build/builds/$($buildid)?api-version=5.0"
            $token = -join("$Username", ":", "$PAT")
            $headers = @{ 
                Authorization = "Basic "+ [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($token))
                'Content-Type' = "application/json"
            }
            $Buildinfo2 = Invoke-RestMethod -Method Get -ContentType application/json -Uri $Buildurl2 -Headers $headers
            $BuildStatus= $Buildinfo2.status 
            $result = $Buildinfo2.result 
            echo $result
            echo $BuildStatus

Ответ выше правильный, но мне пришлось добавить это, чтобы аутентифицировать мой.

Другие вопросы по теме