Alvaros
.
- Регистрация
- 14.05.16
- Сообщения
- 21.452
- Реакции
- 101
- Репутация
- 204
Git hooks – инструмент, помогающий держать в порядке ваш репозиторий. Можно настроить автоматические правила оформления ваших коммитов.
Все вы наверное знаете про
Кто запутался в pre-commit и pre-receive хуках, в этом посте описываются различия между ними
Если у вас Gitlab Enterprise Edition, вы можете настроить хуки, которые описаны в посте через WEB интерфейс.
Но что делать, если у вас Gitlab Community Edition?
В этой статье будут описаны 5 pre-receive хуков, которые выполняются на сервере Gitlab Community Edition:
В основном хуки взяты из репозитория
Весь исходный код серверных хуков вы можете посмотреть на Github —
Установка на Gitlab
Блокирование отправки приватных ключей и AWS токенов
В файле block_confidentials.sh настраиваем список regex_list, который описывает конфиденциальную информацию.
# Define list of REGEX to be searched and blocked
regex_list=(
# block any private key file
'(\-){5}BEGIN\s?(RSA|OPENSSH|DSA|EC|PGP)?\s?PRIVATE KEY\s?(BLOCK)?(\-){5}.*'
# block AWS API Keys
'AKIA[0-9A-Z]{16}'
# block AWS Secret Access Key (TODO: adjust to not find validd Git SHA1s; false positives)
# '([^A-Za-z0-9/+=])?([A-Za-z0-9/+=]{40})([^A-Za-z0-9/+=])?'
# block confidential content
'CONFIDENTIAL'
)
Добавляем в репозиторий приватный ключ, делаем коммит и при git push получаем ошибку.
Блокирование отправки архивов
В файле block_file_extensions.sh настраиваем case *.zip|*.gz|*.tgz, в котором указываются расширения файлов, которые будут блокироваться.
Добавляем в репозиторий zip архив, делаем коммит и при git push получаем ошибку.
Блокирование отправки больших файлов
В файле check-large-files.sh настраиваем параметр maxsize, который указывает размер файла в мегабайтах, выше которого отправка будет блокироваться.
Добавляем в репозиторий файл больше 1 мегабайта, делаем коммит и при git push получаем ошибку.
Блокирование коммитов с email не из allow списка
В файле reject-not-allowlist-email.sh настраиваем список email-доменов, для которых разрешены коммиты.
declare -a DOMAIN_ARRAY=("group1.com" "group2.com")
Меняем почту в git на ту, которой нет в разрешенном списке.
git config user.email [email protected]
Добавляем в репозиторий любой файл, делаем коммит и при git push получаем ошибку.
Блокирование коммитов без issue в названии
Этот серверный хук был взят из блога
В файле require-issue.sh настраиваем список commit_format, для которых разрешены коммиты.
commit_format="(JIRA|PROJECTKEY|MULE|ECOM|SAP|XLR-[1-9]+Merge)"
Добавляем в репозиторий любой файл, делаем коммит, в названии которого нет слов из commit_format и при git push получаем ошибку.
Надеюсь что мой пост сподвигнет сообщество развивать направление серверных хуков.
Telegram чат по Gitlab
Все вы наверное знаете про
You must be registered for see links
— проверку вашего кода перед коммитом. Но ведь не все можно проверить перед коммитом. Некоторые ограничения хочется использоваться глобально на всем Gitlab.Кто запутался в pre-commit и pre-receive хуках, в этом посте описываются различия между ними
You must be registered for see links
в абзаце "What are git hooks?".Если у вас Gitlab Enterprise Edition, вы можете настроить хуки, которые описаны в посте через WEB интерфейс.
Но что делать, если у вас Gitlab Community Edition?
В этой статье будут описаны 5 pre-receive хуков, которые выполняются на сервере Gitlab Community Edition:
- block_confidentials.sh — Блокирование отправки приватных ключей и AWS токенов
- block_file_extensions.sh — Блокирование отправки архивов (Regex настраивается)
- check-large-files.sh — Блокирование отправки больших файлов (Размер настраивается)
- reject-not-allowlist-email.sh — Блокирование коммитов с email не из allow списка (Список email доменов настраивается)
- require-issue.sh — Блокирование коммитов без issue в названии (Список issue настраивается)
В основном хуки взяты из репозитория
You must be registered for see links
в директории pre-receive-hooks (относится к GitHub Enterprise).Весь исходный код серверных хуков вы можете посмотреть на Github —
You must be registered for see links
Установка на Gitlab
- Необходимо создать директорию /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/
- Скопировать в эту директорию хуки
- Не забыть выставить права запуска для хуков (chmod +x файл-хука)
Блокирование отправки приватных ключей и AWS токенов
В файле block_confidentials.sh настраиваем список regex_list, который описывает конфиденциальную информацию.
# Define list of REGEX to be searched and blocked
regex_list=(
# block any private key file
'(\-){5}BEGIN\s?(RSA|OPENSSH|DSA|EC|PGP)?\s?PRIVATE KEY\s?(BLOCK)?(\-){5}.*'
# block AWS API Keys
'AKIA[0-9A-Z]{16}'
# block AWS Secret Access Key (TODO: adjust to not find validd Git SHA1s; false positives)
# '([^A-Za-z0-9/+=])?([A-Za-z0-9/+=]{40})([^A-Za-z0-9/+=])?'
# block confidential content
'CONFIDENTIAL'
)
Добавляем в репозиторий приватный ключ, делаем коммит и при git push получаем ошибку.
Блокирование отправки архивов
В файле block_file_extensions.sh настраиваем case *.zip|*.gz|*.tgz, в котором указываются расширения файлов, которые будут блокироваться.
Добавляем в репозиторий zip архив, делаем коммит и при git push получаем ошибку.
Блокирование отправки больших файлов
В файле check-large-files.sh настраиваем параметр maxsize, который указывает размер файла в мегабайтах, выше которого отправка будет блокироваться.
Добавляем в репозиторий файл больше 1 мегабайта, делаем коммит и при git push получаем ошибку.
Блокирование коммитов с email не из allow списка
В файле reject-not-allowlist-email.sh настраиваем список email-доменов, для которых разрешены коммиты.
declare -a DOMAIN_ARRAY=("group1.com" "group2.com")
Меняем почту в git на ту, которой нет в разрешенном списке.
git config user.email [email protected]
Добавляем в репозиторий любой файл, делаем коммит и при git push получаем ошибку.
Блокирование коммитов без issue в названии
Этот серверный хук был взят из блога
You must be registered for see links
.В файле require-issue.sh настраиваем список commit_format, для которых разрешены коммиты.
commit_format="(JIRA|PROJECTKEY|MULE|ECOM|SAP|XLR-[1-9]+Merge)"
Добавляем в репозиторий любой файл, делаем коммит, в названии которого нет слов из commit_format и при git push получаем ошибку.
Надеюсь что мой пост сподвигнет сообщество развивать направление серверных хуков.
Telegram чат по Gitlab



