DevOps стал неотъемлемым компонентом в мире разработки программного обеспечения для компаний, пытающихся упростить процессы разработки и развертывания. Среди нескольких доступных технологий DevOps есть одна, которой иногда пренебрегают, но которая действительно эффективна.
Эта жизненно важная технология — не что иное, как « Git Hooks» . »
Git Hooks — отличные инструменты для автоматизации задач, обеспечения соблюдения стандартов кодирования, выполнения непрерывного развертывания и запуска тестов.
Давайте посмотрим, как мы можем использовать Git Hooks, чтобы революционизировать нашу практику DevOps!
Давайте сначала посмотрим на официальное определение -
Хуки — это программы, которые вы можете поместить в каталог ловушек для запуска действий в определенных точках выполнения git.
К счастью, это действительно простое определение!
Давайте попробуем ответить на некоторые вопросы, которые могут возникнуть у читателей по поводу этого определения.
В) Что такое каталог Hooks? Где он находится?
Каталог перехватчиков — это каталог в репозитории Git, содержащий исполняемые программы или перехватчики, которые Git будет выполнять. По умолчанию каталог перехватчиков — $GIT_DIR/hooks
. Пользователи также могут настроить его с помощью переменной конфигурации core.hooksPath
.
Вопрос) Каковы точки выполнения Git?
Точки выполнения Git — это этапы рабочего процесса Git, на которых можно запускать перехватчики. Pre-commit, Post-commit, Pre-push, Post-receive, Pre-rebase и Post-merge — вот некоторые примеры точек выполнения Git.
Подводя итог этому разделу, мы можем дать следующее определение Git Hooks:
Git выполняет сценарии, известные как «перехватчики», до или после определенных операций, таких как фиксация, отправка или слияние кода. Они позволяют автоматизировать задачи, применять политики и взаимодействовать с базой кода в процессе разработки. Перехватчики Git хранятся в каталоге
.git/hooks
вашего репозитория Git.
Давайте попробуем создать простой перехватчик Git, который будет применять регулярное выражение «TASK*» к любому сообщению о коммите.
Создайте новый каталог git_hooks_tut
и инициализируйте внутри него новый репозиторий git.
~/projects$ mkdir git_hooks_tut ~/projects$ cd git_hooks_tut ~/projects/git_hooks_tut$ git init Initialized empty Git repository
Давайте зайдем в каталог хуков и исследуем его содержимое.
~/projects/git_hooks_tut$ cd .git/hooks ~/projects/git_hooks_tut/.git/hooks$ ls applypatch-msg.sample pre-applypatch.sample pre-push.sample commit-msg.sample pre-commit.sample pre-rebase.sample fsmonitor-watchman.sample pre-merge-commit.sample pre-receive.sample post-update.sample prepare-commit-msg.sample update.sample
В каталогеooks есть несколько примеров скриптов. Расширение .sample
по умолчанию останавливает их запуск. Все, что вам нужно сделать, чтобы «установить» крючок, — это избавиться от расширения .sample
.
Или, если вы начинаете новый сценарий с нуля, вы можете просто добавить новый файл с именем, соответствующим одному из имен файлов, перечисленных выше, но без расширения .sample
.
Для нашего варианта использования нам понадобится перехватчик commit-msg. Продолжайте и создайте новый скрипт с именем commit-msg
.
~/projects/git_hooks_tut/.git/hooks$ touch commit-msg
Давайте добавим логику, обеспечивающую шаблон сообщения о фиксации в скрипт commit-msg
.
#!/bin/sh commit_msg_file=$1 commit_msg=$(cat "$commit_msg_file") # Check if the commit message starts with "TASK" if ! echo "$commit_msg" | grep -q "^TASK"; then echo "Commit message must start with 'TASK'" exit 1 fi
Наконец, сделайте скрипт commit-msg
исполняемым. Неисполняемые скрипты пропускаются git, даже если они присутствуют в каталоге ловушек.
~/projects/git_hooks_tut/.git/hooks$ chmod +x commit-msg
И вот наши крючки готовы! Давайте проверим это сейчас.
Теперь мы создадим новый файл и попытаемся зафиксировать его; сначала с недопустимым форматом сообщения, а затем с допустимым форматом сообщения.
~/projects/git_hooks_tut/.git/hooks$ cd ../.. ~/projects/git_hooks_tut$ touch README ~/projects/git_hooks_tut$ ls README ~/projects/git_hooks_tut$ git add README ~/projects/git_hooks_tut$ git commit -m "Added Readme File" Commit message must start with 'TASK' ~/projects/git_hooks_tut$ git commit -m "TASK-0000: Added Readme File" [master (root-commit) 7f3648a] TASK-000: Added Readme File
Все работает идеально!
Git позволяет нам создавать перехватчики для нескольких точек выполнения. Некоторые из них заключаются в следующем:
Перехватчик перед фиксацией: этот перехват выполняется перед созданием фиксации. Это позволяет нам проверять вносимые изменения.
Перехват предварительного получения. Перехват предварительного получения запускается в удаленном репозитории до изменения любых ссылок, что позволяет вам применять собственные правила или политики.
Перехватчик Post-Receive: этот перехват также выполняется в удаленном репозитории после обновления ссылок. Его можно использовать для отправки уведомлений и/или выполнения дополнительных задач.
Pre-Push Hook: этот хук выполняется до того, как будет сделан push. Это можно использовать для обеспечения соблюдения определенных политик, которые препятствуют отправке определенных типов коммитов.
Перехват подготовки-фиксации-сообщения: перехват подготовки-фиксации-msg выполняется после создания сообщения о фиксации, что позволяет вам изменить или улучшить сообщение о фиксации.
Существуют и другие хуки для лучшей настройки Git, их можно найти в документации Git .
Git-хуки, если их правильно использовать, представляют собой инструмент с огромным потенциалом! Мы, разработчики, часто подрываем силу таких инструментов, которые могли бы решить множество сложных задач.
Использование Git Hooks улучшает DevOps на любом уровне и может стать отличным способом для организаций, желающих интегрировать DevOps в свои циклы разработки.
Поздравляем с достижением этого момента! Надеюсь, вы сегодня узнали что-то новое.