Skip to main content

Автомасштабирование с помощью локальных средств выполнения

Вы можете автоматически масштабировать локальные средства выполнения тестов в ответ на события веб-перехватчика.

Сведения об автомасштабировании

Вы можете автоматически увеличивать или уменьшать количество локальных средств выполнения в вашей среде в ответ на полученные события веб-перехватчика с определенной меткой. Например, можно создать автоматизацию, которая добавляет новое локальное средство выполнения при каждом получении события веб-перехватчика workflow_job с действием queued, которое уведомляет о готовности нового задания к обработке. Полезные данные веб-перехватчика содержат данные метки, поэтому вы можете определить тип средства выполнения, который запрашивает задание. После завершения задания можно создать автоматизацию, которая удаляет средство выполнения в ответ на действие workflow_job completed.

Рекомендуемые решения автомасштабирования

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

Следующие репозитории содержат подробные инструкции по настройке этих средств автомасштабирования.

Каждое решение имеет определенные особенности, которые важно учитывать.

Функцииactions-runner-controllerterraform-aws-github-runner
Параметры выполненияKubernetesВиртуальные машины Linux и Windows
Поддерживаемые облакаAzure, Amazon Web Services, Google Cloud Platform, локальная средаAmazon Web Services
Где можно масштабировать средства выполненияУровни предприятия, организации и репозитория. По метке и по группе средства выполнения.Уровни организации и репозитория. По метке и по группе средства выполнения.
Как можно масштабировать средства выполненияСобытия веб-перехватчика, по расписанию, по запросуСобытия веб-перехватчика, по расписанию (только средства выполнения на уровне организации)

Использование временных средств выполнения для автомасштабирования

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

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

Чтобы добавить в вашу среду временное средство выполнения, включите параметр --ephemeral при регистрации средства выполнения с помощью config.sh. Пример:

./config.sh --url https://github.com/octo-org --token example-token --ephemeral

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

Примечание. Если задание помечено для средств выполнения определенного типа, но ни одно из них недоступно, задание в очереди не сразу завершается сбоем. Оно будет оставаться в очереди до истечения 24-часового периода ожидания.

Управление обновлениями программного обеспечения на локальных средствах выполнения

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

Чтобы отключить автоматическое обновление программного обеспечения и устанавливать обновления программного обеспечения самостоятельно, укажите флаг --disableupdate при регистрации средства выполнения с помощью config.sh. Пример:

./config.sh --url https://github.com/YOUR-ORGANIZATION --token EXAMPLE-TOKEN --disableupdate

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

Если вы отключаете автоматическое обновление, то должны будете обновлять версию средства выполнения в течение 30 дней после того, как станет доступной новая версия. Вы можете подписаться на уведомления о выпусках в репозиторииactions/runner. Дополнительные сведения см. в разделе Настройка уведомлений.

Инструкции по установке последней версии средства выполнения см. в инструкциях по установке последнего выпуска.

Примечание. Если вы не выполните обновление программного обеспечения в течение 30 дней, служба GitHub Actions не будет помещать задания в очередь для вашего средства выполнения. Кроме того, если требуется критическое обновление системы безопасности, служба GitHub Actions не будет помещать задания в очередь для вашего средства выполнения до его обновления.

Использование веб-перехватчиков для автомасштабирования

Вы можете создать собственную среду автомасштабирования с помощью полезных данных, полученных от веб-перехватчика workflow_job. Этот веб-перехватчик доступен на уровне репозитория, организации и предприятия, а полезные данные для этого события содержат ключ action, соответствующий этапам жизненного цикла задания рабочего процесса, например, когда задания queued, in_progress и completed. Затем вы должны создать собственную автоматизацию масштабирования в ответ на эти полезные данные веб-перехватчика.

Требования к проверке подлинности

Вы можете регистрировать и удалять репозиторий и локальные средства выполнения организации с помощью API. Для проверки подлинности в API в вашей реализации автомасштабирования может использоваться маркер доступа или приложение GitHub.

Для маркера доступа потребуется следующая область.

  • Для частных репозиториев используйте маркер доступа с областьюrepo.
  • Для общедоступных репозиториев используйте маркер доступа с областьюpublic_repo.
  • Для организаций используйте маркер доступа с областьюadmin:org.

Для проверки подлинности с помощью приложения GitHub необходимо назначить следующие разрешения.

  • Для репозиториев назначьте разрешение administration.
  • Для организаций назначьте разрешение organization_self_hosted_runners.

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

Для маркера доступа потребуется область manage_runners:enterprise.