У меня есть конвейер Azure DevOps, в котором несколько этапов выполняются параллельно. Один из этих этапов выполняется намного дольше, чем другие. Есть ли способ убедиться, что конкретный этап запускается первым?
Все варианты, которые я нашел, заставляют другие этапы ждать завершения этого этапа. Я не хочу этого делать. Этапы не зависят друг от друга.
Конвейер в целом займет меньше времени, если сначала будет запущен самый медленный этап. Есть ли способ поставить его в начало очереди?
@RuiJarimba Спасибо за ваши ответы. Я прошу прощения за задержку. Потребовалось несколько дней, чтобы получить возможность опробовать ваши решения. Они сделали именно то, что я хотел. Спасибо вам обоим!
@KevinLu-MSFT В итоге я отметил ответ Руи как ответ, потому что это лучше всего сработало для моей ситуации, но спасибо за альтернативную идею, Кевин.
если обе идеи сработали, вы можете проголосовать за ответ Кевина, ИМХО, это хороший обходной путь, который может пригодиться в другой раз :-)
Из Укажите вакансии в вашем портфолио:
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"
Когда мы запускаем новую сборку, все задания без зависимостей будут добавлены в очередь случайным образом, например:
Sleep job C0
Long job A1
Sleep job B0
Job B1
и Job C1
не ставятся в очередь сразу, поскольку они зависят от Sleep job B0
и Sleep job C0
соответственно. Они будут добавлены в очередь и запущены на более позднем этапе, но только после запуска Long job A1
.
Окончательный порядок выполнения заданий будет примерно таким:
Sleep job C0
Long job A1
Sleep job B0
Job C1
Job B0
Как указано в документе, опубликованном @Rui Jarimba, Azure Pipelines не поддерживает приоритет заданий для конвейеров YAML.
Я хотел бы поделиться еще одним обходным путем для этого требования.
Вы можете разделить этапы на два конвейера. Один конвейер используется для запуска длительного этапа, а другой — для запуска других этапов.
Сначала вы можете запустить конвейер (этап длительного выполнения). После запуска конвейера вы можете запустить другой конвейер для запуска других этапов.
В этом случае мы можем быть уверены, что долгосрочный этап начнется первым. И все этапы по-прежнему могут работать параллельно.
Если этапы содержат несколько заданий, вы можете использовать параметр «Выполнить следующее», чтобы повысить приоритет задания.
Например:
После выбора этой опции текущее задание будет помещено в начало очереди.
Обратитесь к этому документу: Запустите это задание дальше
пожалуйста, взгляните на мой ответ и попробуйте мой образец конвейера. Это грязный обходной путь, но он работает :-)