Azure Devops — как НАЧАТЬ один этап перед параллельными этапами?

У меня есть конвейер Azure DevOps, в котором несколько этапов выполняются параллельно. Один из этих этапов выполняется намного дольше, чем другие. Есть ли способ убедиться, что конкретный этап запускается первым?

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

Конвейер в целом займет меньше времени, если сначала будет запущен самый медленный этап. Есть ли способ поставить его в начало очереди?

пожалуйста, взгляните на мой ответ и попробуйте мой образец конвейера. Это грязный обходной путь, но он работает :-)

Rui Jarimba 20.06.2024 20:46

@RuiJarimba Спасибо за ваши ответы. Я прошу прощения за задержку. Потребовалось несколько дней, чтобы получить возможность опробовать ваши решения. Они сделали именно то, что я хотел. Спасибо вам обоим!

KHeidtman 25.06.2024 17:52

@KevinLu-MSFT В итоге я отметил ответ Руи как ответ, потому что это лучше всего сработало для моей ситуации, но спасибо за альтернативную идею, Кевин.

KHeidtman 25.06.2024 17:52

если обе идеи сработали, вы можете проголосовать за ответ Кевина, ИМХО, это хороший обходной путь, который может пригодиться в другой раз :-)

Rui Jarimba 25.06.2024 18:11
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
2
4
101
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Из Укажите вакансии в вашем портфолио:

Azure Pipelines не поддерживает приоритет заданий для конвейеров YAML. Чтобы контролировать запуск заданий, вы можете указать условия и зависимости.

Единственный обходной путь, который я могу придумать, — это добавить фиктивную работу ко всем этапам, кроме того, который занимает больше времени.

Пример:

stages:
  - stage: A
    dependsOn: []
    jobs:
      - job: A1
        displayName: 'Long job A1'
        steps:
          - checkout: none
          - script: echo "A1"
  - stage: B
    dependsOn: []
    jobs:
      - job: B0
        displayName: 'Sleep job B0'
        steps:
          - checkout: none
          - script: sleep 1
      - job: B1
        dependsOn: B0
        displayName: 'Job B1'
        steps:
          - checkout: none
          - script: echo "B1"
  - stage: C
    dependsOn: []
    jobs:
      - job: C0
        displayName: 'Sleep Job C0'
        steps:
          - checkout: none
          - script: sleep 1
      - job: C1
        dependsOn: C0
        displayName: 'Job C1'
        steps:
          - checkout: none
          - script: echo "C1"

Когда мы запускаем новую сборку, все задания без зависимостей будут добавлены в очередь случайным образом, например:

  1. Sleep job C0
  2. Long job A1
  3. Sleep job B0

Job B1 и Job C1 не ставятся в очередь сразу, поскольку они зависят от Sleep job B0 и Sleep job C0 соответственно. Они будут добавлены в очередь и запущены на более позднем этапе, но только после запуска Long job A1.

Окончательный порядок выполнения заданий будет примерно таким:

  1. Sleep job C0
  2. Long job A1
  3. Sleep job B0
  4. Job C1
  5. Job B0

Как указано в документе, опубликованном @Rui Jarimba, Azure Pipelines не поддерживает приоритет заданий для конвейеров YAML.

Я хотел бы поделиться еще одним обходным путем для этого требования.

Вы можете разделить этапы на два конвейера. Один конвейер используется для запуска длительного этапа, а другой — для запуска других этапов.

Сначала вы можете запустить конвейер (этап длительного выполнения). После запуска конвейера вы можете запустить другой конвейер для запуска других этапов.

В этом случае мы можем быть уверены, что долгосрочный этап начнется первым. И все этапы по-прежнему могут работать параллельно.

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

Например:

После выбора этой опции текущее задание будет помещено в начало очереди.

Обратитесь к этому документу: Запустите это задание дальше

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

Похожие вопросы