Сведения о перехватчиках предварительного получения
При отправке каждый скрипт выполняется в изолированной среде и может проводить проверки содержимого отправки. Отправка принимается, если состояние выхода скриптов имеет значение 0, или отклоняется при ином состоянии выхода.
Используйте перехватчики предварительного получения для выполнения бизнес-правил, обеспечения соответствия нормативным требованиям и предотвращения некоторых распространенных ошибок.
Примеры использования перехватчиков предварительного получения:
- обязательное соответствие сообщений о фиксации определенному шаблону или формату, например наличие допустимого номера обращения или определенная длина сообщений;
- блокировка ветви или репозитория путем отклонения всех отправок;
- запрет на добавление конфиденциальных данных в репозиторий путем блокировки ключевых слов, шаблонов или типов файлов;
- предотвращение слияния собственных изменений автором запроса на вытягивание.
Примеры перехватчиков предварительного получения для GitHub Enterprise Server можно просмотреть в репозитории github/platform-samples.
Влияние на производительность и рабочие процессы
Влияние на разработчиков и их рабочие процессы может быть значительным и должно быть тщательно рассмотрено. Перехватчики предварительного получения должны быть грамотно реализованы с учетом бизнес-потребностей, чтобы приносить максимальную пользу организации в целом.
Предварительные перехватчики могут иметь непреднамеренные последствия для производительности ваш экземпляр GitHub Enterprise Server и должны быть тщательно реализованы и проверены.
Из-за риска сбоя и влияния на производительность для всех пользователей экземпляра рекомендуется следующее.
- Избегайте запросов API в перехватчике предварительного получения. В частности, настоятельно рекомендуется выполнять запросы к внешним службам, что может занять больше времени и может привести к сложному влиянию на производительность.
- Избегайте длительных операций Git в перехватчике перед получением. Если ваш перехватчик предварительного получения выполняет операции Git в больших или занятых репозиториях, Git экземпляра и общая производительность могут негативно повлиять.
Примечание.
Чтобы избежать отказа от отправки из-за времени ожидания, все объединенные перехватчики предварительного получения должны работать в течение пяти секунд.
Тайм-ауты для хука перед приемом
Предпринимаемые хуки в GitHub Enterprise Server имеют фиксированный тайм-аут в 5 секунд (распределяется между всеми хуками). Это намеренная конструкция, направленная на предотвращение истощения ресурсов из-за долго работающих хуков и для предотвращения бессрочного блокирования операций репозитория неуправляемыми скриптами.
Все предварительные крючки для репозитория разделяют общий бюджет тайм-аута:
- Если крючок A занимает 3 секунды, у крючка B остаётся 2 секунды (с 5 секунд по умолчанию)
- Если крюк A заканчивается на 5 секунд, крюк B никогда не выполняется
**Коды выхода**: Настройка принуждения соблюдается (необязательные хуки не блокируют push-пушы)
**Тайм-ауты**: Push может провалиться независимо от конфигурации применения
Поведение тайм-аута
| Scenario | Применение = Включено | Исполнение = Отключённый/Тестирование |
|---|---|---|
| Код выхода ≠ 0 | Толчок отклонён | Толчок продолжается (только предупреждение) |
| Тайм-аут превышен | Толчок отклонён | Предупреждение + push всё равно может не дать результат |