body {font-family: Arial, sans-serif; line-height: 1.6; margin:0; padding:0; background:#f9f9f9;}
.container {max-width: 800px; margin: 30px auto; background:#fff; padding:20px; box-shadow:0 0 10px rgba(0,0,0,0.1);}
h1, h2, h3 {color:#2c3e50;}
a {color:#2980b9; text-decoration:none;}
a:hover {text-decoration:underline;}
ul {margin-left:20px;}
Trong môi trường phát triển nhanh như hiện nay, Git Hooks đã trở thành một công cụ mạnh mẽ giúp tự động hoá các bước kiểm tra mã nguồn và triển khai mã nguồn. Bài viết này sẽ hướng dẫn bạn cách thiết lập và tận dụng Git Hooks để giảm thiểu lỗi, tăng tốc độ CI/CD và làm cho workflow của team trở nên mượt mà hơn.
Giới thiệu ngắn gọn về Git Hooks
Git Hooks là các script được chạy tự động bởi Git ở những thời điểm nhất định trong vòng đời của một repository (ví dụ: trước khi commit, sau khi push, v.v.). Chúng cho phép bạn chèn các điểm kiểm tra và thao tác triển khai mà không cần phải nhớ thực hiện thủ công.
Tại sao nên dùng Git Hooks để tự động hoá?
- Giảm lỗi con người: Kiểm tra code style, unit test, và bảo mật ngay trước khi commit.
- Tiết kiệm thời gian: Triển khai tự động sau mỗi push vào nhánh chính.
- Đảm bảo nhất quán: Các quy tắc kiểm tra được áp dụng đồng nhất trên mọi máy của team.
- Khả năng mở rộng: Dễ dàng tích hợp với các công cụ CI/CD như Jenkins, GitHub Actions, GitLab CI.
Các loại Git Hook phổ biến
Dưới đây là một số hook thường được dùng để tự động hoá kiểm tra mã nguồn và triển khai mã nguồn:
- pre-commit: Kiểm tra lint, chạy unit test, hoặc ngăn commit nếu có lỗi.
- commit-msg: Đảm bảo thông điệp commit tuân thủ chuẩn (ví dụ: Conventional Commits).
- pre-push: Thực thi integration test hoặc kiểm tra bảo mật trước khi đẩy lên remote.
- post-receive: Kích hoạt pipeline CI/CD, triển khai tự động lên server hoặc môi trường staging.
Bước 1: Tạo và cấu hình một Git Hook
Giả sử bạn muốn thêm một pre-commit hook để chạy ESLint trước khi commit. Thực hiện các bước sau:
- Vào thư mục
.git/hookscủa dự án. - Tạo file
pre-commit(không có phần mở rộng). - Thêm nội dung script (ví dụ bằng Bash):
#!/bin/sh echo "🔎 Kiểm tra lint..." npm run lint RESULT=$? if [ $RESULT -ne 0 ]; then echo "❌ Lint thất bại, commit bị hủy." exit 1 fi
Đừng quên cấp quyền thực thi:
chmod +x .git/hooks/pre-commit
Bước 2: Tự động hoá quy trình triển khai với post-receive
Đối với môi trường production, bạn có thể dùng post-receive hook trên server để tự động chạy pipeline CI/CD và triển khai ứng dụng.
#!/bin/sh
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "$branch" = "main" ]; then
echo "🚀 Đang triển khai nhánh main..."
cd /var/www/myapp || exit
git pull origin main
./deploy.sh
fi
done
Như vậy, mỗi khi có push vào main, server sẽ tự động cập nhật mã nguồn và chạy script deploy.sh.
Kết hợp Git Hooks với CI/CD hiện đại
Git Hooks không nhất thiết phải thay thế các công cụ CI/CD, mà chúng có thể kết hợp để tạo ra một pipeline mạnh mẽ hơn. Ví dụ:
- Sử dụng
pre-pushđể chạy CodeQL và dừng push nếu phát hiện lỗ hổng. - Trong
post-receive, gửi webhook tới GitHub Actions hoặc Jenkins để bắt đầu build và deploy.
Mẹo thực tế để duy trì Git Hooks hiệu quả
- Version control hooks: Đặt các script trong thư mục
scripts/git-hooks/và sử dụngln -sđể liên kết tới.git/hooks. Điều này giúp đồng bộ hook giữa các thành viên. - Kiểm tra nhanh: Sử dụng
git hook run <hook-name>(Git 2.24+) để kiểm tra hook mà không cần thực hiện hành động tương ứng. - Ghi log: Ghi lại output của hook vào file log để dễ dàng debug.
Kết luận
Với Git Hooks, việc tự động hoá quy trình kiểm tra và triển khai mã nguồn trở nên đơn giản và hiệu quả hơn bao giờ hết. Bạn có thể giảm thiểu lỗi, tăng tốc độ đưa tính năng mới vào production, và duy trì một chuẩn chất lượng đồng nhất cho toàn bộ team. Hãy bắt đầu triển khai các hook cơ bản như pre-commit và post-receive, sau đó mở rộng chúng theo nhu cầu dự án của bạn.
Để tìm hiểu sâu hơn, hãy tham khảo tài liệu chính thức của Git Hooks và thử áp dụng trong dự án của mình ngay hôm nay!