- PVSM.RU - https://www.pvsm.ru -
Git hooks – инструмент, помогающий держать в порядке ваш репозиторий. Можно настроить автоматические правила оформления ваших коммитов.
Все вы наверное знаете про pre-commit [1] — проверку вашего кода перед коммитом. Но ведь не все можно проверить перед коммитом. Некоторые ограничения хочется использоваться глобально на всем Gitlab.
Кто запутался в pre-commit и pre-receive хуках, в этом посте [2] описываются различия между ними в абзаце "What are git hooks?".
Если у вас Gitlab Enterprise Edition, вы можете настроить хуки, которые описаны в посте через WEB интерфейс.
Но что делать, если у вас Gitlab Community (Core) Edition?
В этой статье будут описаны 5 pre-receive хуков, которые выполняются на сервере Gitlab Community (Core) Edition:
В основном хуки взяты из репозитория platform-samples [3] в директории pre-receive-hooks (относится к GitHub Enterprise).
Весь исходный код серверных хуков вы можете посмотреть на Github [4].
/opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/В файле block_confidentials.sh настраиваем список regex_list, который описывает конфиденциальную информацию.
# Define list of REGEX to be searched and blocked
regex_list=(
# block any private key file
'(-){5}BEGINs?(RSA|OPENSSH|DSA|EC|PGP)?s?PRIVATE KEYs?(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 получаем ошибку.

В файле reject-not-allowlist-email.sh настраиваем список email-доменов, для которых разрешены коммиты.
declare -a DOMAIN_ARRAY=("group1.com" "group2.com")
Меняем почту в git на ту, которой нет в разрешенном списке.
git config user.email user1@group3.com
Добавляем в репозиторий любой файл, делаем коммит и при git push получаем ошибку.

Этот серверный хук был взят из блога Majilesh [5].
В файле require-issue.sh настраиваем список commit_format, для которых разрешены коммиты.
commit_format="(JIRA|PROJECTKEY|MULE|ECOM|SAP|XLR-[1-9]+Merge)"
Добавляем в репозиторий любой файл, делаем коммит, в названии которого нет слов из commit_format и при git push получаем ошибку.

Надеюсь что мой пост сподвигнет сообщество развивать направление серверных хуков.
Telegram-чат по Gitlab [6]
Автор: Пацев Антон
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/git/354700
Ссылки в тексте:
[1] pre-commit: https://pre-commit.com/
[2] этом посте: https://blog.gitguardian.com/git-hooks-automated-secrets-detection/
[3] platform-samples: https://github.com/github/platform-samples
[4] Github: https://github.com/patsevanton/git-server-pre-receive-hooks
[5] Majilesh: https://www.majilesh.com/author/majilesh/
[6] Gitlab: https://t.me/ru_gitlab
[7] Источник: https://habr.com/ru/post/509732/?utm_source=habrahabr&utm_medium=rss&utm_campaign=509732
Нажмите здесь для печати.