Hướng Dẫn Sử Dụng Hệ Thống Tự động Pull/Deploy Git Code
Có thể bạn quan tâm
Nếu bạn thường xuyên gõ lệnh `git pull` trên máy chủ để tự động pull cập nhật code mới nhất thì bài viết này sẽ dành cho bạn. Bài viết này hướng dẫn sử dụng hệ thống tự động Pull/Deploy Git Code cho những dự án không phức tạp, không đòi hỏi phải sử dụng Continuous Integration, hoặc đơn giản là 1 bước cập nhật code lên máy chủ test/development.
Nội dung chính
Vấn đề
Mình tiếp quản một số máy chủ test/development chứa gần 20 repo cho mỗi máy chủ, với thiết lập tự động (cronjob) fetch & pull mỗi phút một lần, điều này tạo áp lực không nhỏ cho server khiến nó gần như bị tê liệt mỗi lần chạy.Nhất là khi gặp trường hợp xung đột/conflict (vì có thể ai đó upload file thông qua FTP *_*), phải chạy `git reset` thì thôi đơ luôn. Nhiệm vụ được giao là tìm kiếm cách thức nào đó để hạn chế vấn đề này, và mình đã tìm hiểu 2 công cụ:
- https://github.com/logsol/Github-Auto-Deploy
- https://github.com/olipo186/Git-Auto-Deploy
Mình chọn cái đầu tiên Github-Auto-Deploy để áp dụng và sau một thời gian dài hoạt động trơn tru mình khá hài lòng vì mức độ đơn giản, tiện dụng, cứ mỗi lần `git push`, thì máy chủ sẽ tự động fetch code mới về và thực hiện một số lệnh deploy tùy theo dự án, ví dụ với Nodejs thì chạy `yarn install` với PHP thì `composer install`, cần thiết thì thêm hook gởi thông tin qua Slack chẳng hạn, hoặc gởi vào hệ thống Huginn để thực hiện thêm các chức năng liên kết hệ thống phức tạp khác (email, sms…n web hooks khác).
Cái thứ 2 là Git-Auto-Deploy kia thì nhiều chức năng hơn, vì vậy mà code nó cũng phức tạp hơn thiết nghĩ ko cần thiết. Hoặc giả sử cần nâng cấp hay tối ưu (ví dụ Basic Auth, Secret Key, Limit IP,..) cái công cụ này cũng khó khăn hơn cái của logsol.
Thời gian chuột bạch thử nghiệm đã hơn 1 năm thành công, hi vọng cũng sẽ giúp ích cho các bạn, bắt đầu thôi!
Thiết lập hệ thống tự động pull/deploy git
Cài đặt SSH để connect Git
Ở bước này, bạn xem ở đây https://help.github.com/articles/connecting-to-github-with-ssh, bước này khá đơn giản, chỉ cần tạo SSH key của server và thêm vào Github là xong, mục đích là không cần phải gõ mật khẩu để pull repo private – phù hợp cho chương trình tự động.
Clone repo bạn muốn tự động deploy
Đơn giản là clone vô cái thư mục chứa code trên server của bạn.
cd /path/to/directory git clone git://github/your_name/your_repo.gitCài đặt Github-Auto-Deploy
cd /path/to/directory git clone git@github.com:logsol/Github-Auto-Deploy.git cd Github-Auto-DeploySau khi vào thư mục bạn sẽ thấy file `GitAutoDeploy.conf.json.example`, copy nó ra và chỉnh sửa
cp GitAutoDeploy.conf.json.example GitAutoDeploy.conf.json{ "port": 8001, "repositories": [ { "url": "https://github.com/{NAME}/{REPOSITORY_NAME}", "path": "/path/to/directory/{DIRECTORY}", "deploy": "git pull origin master && echo deployed {REPOSITORY_NAME_OR_WHATEVER}" } ] }port: port thì nên set cao hơn 1024, dưới 1024 thì phải đòi hỏi có quyền root
url: đường dẫn tới repo có thể dùng git hoặc https
path: đường dẫn tới thư mục đã được cài đặt phía trên
deploy: deploy này thì cơ bản chỉ cần `git pull origin master` – điều chỉnh theo remote/branch tương ứng trường hợp của bạn. Cái lệnh `echo deploy successful` không quan trọng đơn giản là báo hiệu việc pull đã thành công.
Bạn có thể thiết lập bao nhiêu repo cũng được, theo format json như trên là ok.
Chạy hệ thống tự động pull/deploy
cd /path/to/directory/Github-Auto-Deploy nohup python -u GitAutoDeploy.py --daemon-mode --quiet & tail -f nohup.out # kiểm tra logMở đường dẫn http://SERVER_NAME_OR_IP:8001 để kiểm tra server đã hoạt động, nếu bạn thấy hình sau nghĩa là server đã hoạt động ok. Hệ thống chỉ hỗ trợ phương thức POST, nên khi truy cập bằng GET sẽ bị ăn lỗi :D.
Thiết lập webhook
Phần này thì cũng đơn giản thôi, vào tài khoản Github, vô Repo mà bạn muốn thiết lập -> Settings -> Webhook -> Add webhook
Đường dẫn sẽ là: https://github.com/your_name/your_repo_name/settings/hooks, nó ra màn hình:
Payload URL thì để tên/ip server của bạn và nhớ thêm port, ví dụ: `http://123.456.789.111:8001`
Content Type : chọn `application/json`, mấy thứ khác để nguyên.
Nếu sau khi tạo xong mà có dấu check màu xanh lá cây vậy là server hoạt động ok rồi.
Nâng cao/ Tùy chọn
Cho phép tự khởi động khi server restart
crontab -eThêm nội dung như sau
@reboot cd /path/to/directory/Github-Auto-Deploy/ && nohup /usr/bin/python -u GitAutoDeploy.py --daemon-mode --quiet &Ở đây mình sử dụng lệnh nohup, để không bị tắt chương trình Github-Auto-Deploy khi kết thúc phiên làm việc ssh với server, cũng như lưu lại tất cả các log từ stdout của chương trình.
Xử lý khi pull thành công hay thất bại
Xem lại ở phần config:
“deploy”: “git pull origin master && echo deployed {REPOSITORY_NAME_OR_WHATEVER}”
Ở câu lệnh deploy, thì chỉ đơn giản là echo, mình sẽ tối ưu thêm 1 chút để có thể gởi thông báo pull thành công hay thất bại. Tạo thêm 2 script chứa lệnh curl đơn giản đến api nào đó của Chatwork hay Slack, cái này cũng đơn giản thôi.
# notify_success.sh curl -X POST -H "X-ChatWorkToken: e12321ef233d8a92deb1cc15bc09b79e" \ -d "body=Success&self_unread=0" \ "https://api.chatwork.com/v2/rooms/11111178/messages"và
# notify_failed.sh curl -X POST -H "X-ChatWorkToken: e12321ef233d8a92deb1cc15bc09b79e" \ -d "body=Failed&self_unread=0" \ "https://api.chatwork.com/v2/rooms/11111178/messages"Lúc đó lệnh deploy sẽ đổi thành:
“deploy”: “git pull origin master &&/path/to/notify_success.sh || /path/to/notify_failed.sh“
Tùy theo repository mà sửa nội dung phù hợp, là push notification ngon lành thôi.
Kiểm tra
Đến đây thì phần cài đặt đã xong, bạn hãy thử commit & push và kiểm tra xem repo ở server có được cập nhật không. Kiểm tra log ở file /path/to/directory/nohup.out
Fullstack Station Tips
- Thay vì ở cấu hình mỗi repo ở file cấu hình `GitAutoDeploy.conf.json`, mục deploy, bạn dùng lệnh trực tiếp, thì có thể gọi tập lệnh từ file khác ví dụ: /path/to/directory/script.sh, thì file config sẽ đơn giản và dễ nhìn hơn. Nhất là đối với các repo phức tạp đòi hỏi thêm việc chạy migration database, cài đặt package và restart dịch vụ gì đó.
- Nên chạy với quyền user bình thường, vì có thể bạn sẽ cần cài đặt thêm các package từ yarn hoặc composer, pip
Mình biết rằng có không nhiều bạn sử dụng Continuous Integration (CI) cho việc lập trình các dự án đơn giản, hoặc chỉ là dự án cá nhân. Đây là chương trình tự động pull/deploy đơn giản mà hiệu quả, hi vọng sẽ giúp ích nhiều cho các bạn.
Comments
Từ khóa » Cách Pull Code Từ Git
-
Pull Từ Remote Repository [Chia Sẻ Repository] | Hướng Dẫn Về Git Cho ...
-
Lệnh Git Fetch Git Pull Cập Nhật Dữ Liệu Từ Remote
-
Combo Các Lệnh Git đủ Dùng Trong Một Dự án Của Công Ty
-
Tự Học Git | Lệnh Git Pull »
-
Cách Pull Code Từ GitHub
-
Cách Pull Code Từ Git - Quang An News
-
Hướng Dẫn đơn Giản - Git
-
Hướng Dẫn Sử Dụng Git - Git Pull - YouTube
-
Mình Muốn Hỏi Về Cách Sử Dụng Git - GitHub - Viblo
-
[Git] Phần 2: Thao Tác Cơ Bản Với Git - Viblo
-
Git Là Gì? Các Lệnh Git Cơ Bản Mà Mọi Lập Trình Viên Nên Biết | TopDev
-
NHỮNG LỆNH PHỔ BIẾN TRONG GIT | CO-WELL Asia
-
Git Fetch, Pull, Push, & Sync - Visual Studio (Windows) | Microsoft Docs
-
Những Gì Cần Biết Khi Làm Việc Với Git Trong Dự án - TEDU