Skip to main content

Использование параллелизма

Выполнение одного задания за раз.

Обзор

Примечание. Если параллелизм задается на уровне задания, упорядочение не гарантируется для заданий или запусков, которые отстоят на интервал в пределах 5 минут друг от друга в очереди.

Можно использовать jobs.<job_id>.concurrency, чтобы одновременно могли выполняться только одно задание или один процесс с использованием той же группы параллелизма. Группа параллелизма может представлять собой любую строку или выражение. Выражение может использовать любой контекст, кроме контекста secrets. Дополнительные сведения о выражениях см. в разделе Выражения.

Можно также указать concurrency на уровне рабочего процесса. Дополнительные сведения см. на веб-сайте concurrency.

Если параллельное задание или рабочий процесс добавлены в очередь и выполняется другое задание или рабочий процесс, использующие ту же группу параллелизма в репозитории, то находящиеся в очереди задание или рабочий процесс будут pending. Все задания или рабочие процессы в группе параллелизма, находившиеся в состоянии ожидания, будут отменены. Чтобы также отменить задание или рабочий процесс, которые сейчас выполняются в той же группе параллелизма, укажите cancel-in-progress: true.

Примеры. Использование параллелизма и поведение по умолчанию

concurrency: staging_environment
concurrency: ci-${{ github.ref }}

Пример. Использование параллелизма для отмены любого выполняющегося задания или запуска

concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: true

Пример. Использование резервного значения

Если вы создаете имя группы со свойством, определенным только для определенных событий, можно использовать резервное значение. Например, github.head_ref определяется только для событий pull_request. Если рабочий процесс реагирует на другие события в дополнение к событиям pull_request, необходимо предоставить резервное значение, чтобы избежать синтаксической ошибки. Следующая группа параллелизма отменяет выполняемые задания или запуски только в событиях pull_request. Если параметр github.head_ref не определен, группа параллелизма перейдет к идентификатору запуска, который будет гарантированно заданным и уникальным.

concurrency:
  group: ${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

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

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

Чтобы отменить только выполняемые запуски для одного рабочего процесса, можно использовать свойство github.workflow для создания группы параллелизма:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Мониторинг текущих заданий в организации или предприятии

Чтобы определить ограничения с параллелизмом или очередями, можно проверить, сколько заданий в настоящее время обрабатывается в средствах выполнения тестов, размещенных в GitHub, в вашей организации или предприятии.

Снимок экрана: список активных заданий

Дополнительные сведения см. в разделе "Мониторинг текущих заданий".