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 хранятся в .git/hooks Создаем наши самые первые Git-хуки! Давайте попробуем создать простой перехватчик Git, который будет применять регулярное выражение «TASK*» к любому сообщению о коммите. Создайте новый каталог и инициализируйте внутри него новый репозиторий git. git_hooks_tut ~/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 Наконец, сделайте скрипт исполняемым. Неисполняемые скрипты пропускаются git, даже если они присутствуют в каталоге ловушек. commit-msg ~/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: этот хук выполняется до того, как будет сделан push. Это можно использовать для обеспечения соблюдения определенных политик, которые препятствуют отправке определенных типов коммитов. Pre-Push Hook: перехват подготовки-фиксации-msg выполняется после создания сообщения о фиксации, что позволяет вам изменить или улучшить сообщение о фиксации. Перехват подготовки-фиксации-сообщения: Существуют и другие хуки для лучшей настройки Git, их можно найти в . документации Git Git-хуки, если их правильно использовать, представляют собой инструмент с огромным потенциалом! Мы, разработчики, часто подрываем силу таких инструментов, которые могли бы решить множество сложных задач. Использование Git Hooks улучшает DevOps на любом уровне и может стать отличным способом для организаций, желающих интегрировать DevOps в свои циклы разработки. Поздравляем с достижением этого момента! Надеюсь, вы сегодня узнали что-то новое.