DevOps đã trở thành một thành phần không thể thiếu trong thế giới phát triển phần mềm dành cho các công ty đang cố gắng đơn giản hóa quy trình phát triển và triển khai của mình. Trong số một số công nghệ DevOps hiện có, có một công nghệ đôi khi bị bỏ qua nhưng thực sự hiệu quả.
Công nghệ quan trọng đó không ai khác chính là “ Git Hooks . ”
Git Hooks là công cụ tuyệt vời để tự động hóa các tác vụ, thực thi các tiêu chuẩn mã hóa, thực hiện triển khai liên tục và chạy thử nghiệm.
Hãy cùng xem cách chúng ta có thể sử dụng Git Hooks để cách mạng hóa hoạt động DevOps của mình!
Trước tiên chúng ta hãy xem định nghĩa chính thức -
Hook là các chương trình bạn có thể đặt trong thư mục hook để kích hoạt các hành động tại một số điểm nhất định trong quá trình thực thi của git.
May mắn thay, đó là một định nghĩa thực sự đơn giản!
Chúng ta hãy cố gắng giải quyết một số câu hỏi mà người đọc có thể có về định nghĩa.
Q) Thư mục Hooks là gì? Nó nằm ở đâu?
Thư mục hooks là một thư mục trong kho Git chứa các chương trình thực thi hoặc Hooks mà Git sẽ thực thi. Theo mặc định, thư mục hooks là $GIT_DIR/hooks
. Người dùng cũng có thể định cấu hình nó bằng biến cấu hình core.hooksPath
.
Q) Điểm thực thi của Git là gì?
Điểm thực thi Git là các bước trong quy trình làm việc Git mà tại đó các hook có thể được chạy. Cam kết trước, Cam kết sau, Đẩy trước, Nhận sau, Rebase trước và Hợp nhất sau là một số ví dụ về các điểm thực thi Git.
Để tóm tắt phần này, chúng ta có thể có định nghĩa sau về Git Hooks -
Git thực thi các tập lệnh được gọi là "hook" trước hoặc sau các hoạt động cụ thể như xác nhận, đẩy hoặc hợp nhất mã. Chúng cho phép bạn tự động hóa các tác vụ, thực thi chính sách và tương tác với cơ sở mã trong quá trình phát triển. Móc Git được lưu trữ trong thư mục
.git/hooks
của kho Git của bạn
Hãy thử xây dựng một móc Git đơn giản để áp đặt biểu thức chính quy "TASK*" trên bất kỳ thông báo cam kết nào.
Tạo một thư mục mới git_hooks_tut
và khởi tạo kho lưu trữ git mới bên trong nó.
~/projects$ mkdir git_hooks_tut ~/projects$ cd git_hooks_tut ~/projects/git_hooks_tut$ git init Initialized empty Git repository
Chúng ta hãy vào thư mục hooks và điều tra nội dung của nó.
~/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
Thư mục hook đi kèm với một số đoạn mã mẫu. Phần mở rộng .sample
ngăn chúng chạy theo mặc định. Tất cả những gì bạn cần làm để "cài đặt" một hook là loại bỏ phần mở rộng .sample
.
Hoặc, nếu bạn đang bắt đầu lại từ đầu với một tập lệnh mới, bạn có thể chỉ cần thêm một tệp mới có tên khớp với một trong các tên tệp được liệt kê ở trên nhưng không có phần mở rộng .sample
.
Đối với trường hợp sử dụng của chúng tôi, chúng tôi sẽ cần có một hook thông điệp cam kết. Hãy tiếp tục và tạo một tập lệnh mới có tên commit-msg
.
~/projects/git_hooks_tut/.git/hooks$ touch commit-msg
Chúng ta hãy thêm logic để đảm bảo mẫu thông báo cam kết của chúng ta vào tập lệnh 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
Cuối cùng, làm cho tập lệnh commit-msg
có thể thực thi được. Các tập lệnh không thực thi được git bỏ qua ngay cả khi chúng có trong thư mục hooks.
~/projects/git_hooks_tut/.git/hooks$ chmod +x commit-msg
Và với thiết lập đó, hook của chúng ta đã hoàn tất! Hãy để chúng tôi kiểm tra nó ngay bây giờ.
Bây giờ chúng ta sẽ tạo một tệp mới và thử cam kết nó; đầu tiên là với định dạng tin nhắn không hợp lệ và sau đó là định dạng tin nhắn hợp lệ.
~/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
Mọi thứ đang hoạt động lý tưởng!
Git cho phép chúng ta tạo hook cho một số điểm thực thi. Một số trong số này như sau -
Pre-Commit Hook: Hook này được thực thi trước khi một commit được tạo. Nó cho phép chúng tôi xác nhận những thay đổi đang được cam kết.
Móc nhận trước: Móc nhận trước được chạy trên kho lưu trữ từ xa trước khi bất kỳ tham chiếu nào được sửa đổi, cho phép bạn áp dụng các quy tắc hoặc chính sách tùy chỉnh.
Hook sau nhận: Hook này cũng được thực thi trên kho lưu trữ từ xa sau khi cập nhật các tài liệu tham khảo. Nó có thể được sử dụng để gửi thông báo và/hoặc thực hiện các tác vụ bổ sung.
Pre-Push Hook: Móc này được thực hiện trước khi thực hiện một lần đẩy. Điều này có thể được sử dụng để thực thi một số chính sách nhất định nhằm ngăn cản việc thúc đẩy một số loại cam kết nhất định.
Móc chuẩn bị-cam kết-Msg: Móc chuẩn bị-commit-msg được thực thi sau khi thông báo cam kết được tạo, cho phép bạn sửa đổi hoặc nâng cao thông báo cam kết.
Có nhiều hook khác hiện diện để tùy chỉnh Git tốt hơn, bạn có thể tìm thấy chúng trên tài liệu Git .
Git hook nếu được sử dụng đúng cách sẽ là một công cụ có tiềm năng lớn! Chúng tôi, những nhà phát triển, thường làm suy yếu sức mạnh của những công cụ có thể giải quyết nhiều nhiệm vụ phức tạp.
Việc sử dụng Git Hooks giúp nâng cao DevOps ở mọi cấp độ có thể là một cách tuyệt vời cho các tổ chức đang tìm cách tích hợp DevOps vào chu kỳ phát triển của họ.
Chúc mừng bạn đã đạt được điều này! Tôi hy vọng bạn đã học được điều gì đó mới ngày hôm nay.