Sunday, January 19, 2025

[Jenkins] Webhook and Poll SCM

-

Chào mừng bạn đến với website của mình, trong bài học này, mình sẽ chỉ cho bạn cách tự động kích hoạt job trong Jenkins bất cứ khi nào thay đổi được đẩy vào kho lưu trữ. Nếu bạn đã theo dõi, bạn hẳn đã quen với cách sử dụng kiểm soát nguồn trong một công việc.

Jenkins là máy chủ tự động hóa mã nguồn mở hàng đầu. Nó cung cấp hàng trăm plugin để hỗ trợ xây dựng, triển khai và tự động hóa bất kỳ dự án nào. Trong bài viết này, chúng ta sẽ xem xét cách định cấu hình trình kích hoạt GitHub trong công việc của chúng tôi và giao tiếp với GitHub bằng cách sử dụng webhook cho biết thời điểm thăm dò công việc để xây dựng các thay đổi được thực hiện trên dự án.

1. Triển khai 1 job từ Github.

Đầu tiên bạn hãy tạo 1 repository mới

Mình tạo 1 file test có tên hoanghd.sh trong repository mới này của mình.

Thực hiện Commit file đầu tiên

Sau khi thực hiện commit xong, bạn sẽ có 1 file tên hoanghd.sh trong repository của bạn, thực hiện copy url repository của bạn như các bước ở dưới.

Thực hiện xong mình sẽ có 1 url repository của mình như dưới

https://github.com/hoanghd164/webhook-and-poll-scm.git

Trong Jenkins bạn hãy vào job của bạn rồi vào Configure kéo xuống Source Code Management, chọn Git.

Tại Repository URL hãy dán url kho repository của bạn đã lấy được ở bước trên

Ở bước 2 hình trên, chỗ Branch Specifier (blank for ‘any’), bạn hãy nhập tên nhánh của bạn, ở trường hợp của mình đang là nhánh main nên mình sẽ nhập ở ô này là */main

Nếu khi đưa url vào mà bạn gặp lỗi như dưới thì cách xử lý là bạn hãy cài git vào Jenkins của bạn nhé, lỗi này xuất hiện do Jenkins của bạn chưa có git.

Failed to connect to repository : Error performing git command: git ls-remote-h
https://github.com/hoanghd164/webhook-and-poll-scm.git HEAD

Nếu bạn sử dụng Ubuntu thì sử dụng lệnh dưới để cài git.

$ sudo apt update
$ sudo apt install git

Để chắc chắn git đã được cài, hãy verify bằng lệnh dưới

$ git --version
git version 2.17.1

Do mình muốn sau khi có commit mới thì Jenkins phải chạy file hoanghd.sh cho mình, mình sẽ sử dụng câu lệnh dưới để chỉ cho Jenkins cách chạy job này.

sh "/var/jenkins_home/workspace/hello-world/hoanghd.sh"

Bạn hãy vào Build Step, chọn Execute shell, chỗ Command bạn hãy đưa lệnh chạy file hoanghd.sh ở trên vào.

File hoanghd.sh chính là file mình đã tạo trên repository trên Githut, sau đó hãy thực hiện lưu lại cài đặt.

Hãy bấm vào Build now để quá trình build được bắt đầu. Khi build xong, mình đã có thêm 1 job (#4) đã hoàn thành như hình dưới

Hãy bấm vào Console Output, bạn sẽ thấy kết quả như hình dưới

Kết quả cho thấy Jenkins đã chạy file hoanghd.sh và xuất ra nội dung “Chao mung den voi website cua toi” thành công.

$ /bin/sh -xe /tmp/jenkins10356625079690243017.sh
+ sh /var/jenkins_home/workspace/hello-world/hoanghd.sh
Chao mung den voi website cua toi
Finished: SUCCESS

Khi Jenkins clone source code về thì nó đã được lưu tại thư mục /var/jenkins_home/workspace/hello-world/.

Tiến hành list file tại thư mục này, ta có file hoanghd.sh đã được tải xuống như dưới.

$ docker exec jenkins ls /var/jenkins_home/workspace/hello-world/
hoanghd.sh

Như vậy là đến đây bạn đã chạy được 1 job trong Jenkins được lấy từ kho chứa Github, tiếp theo mình sẽ hướng dẫn các bạn kết nối Webhook từ Jenkins tới Github nhé.

2. Kết nối Jenkins với Webhook của Github.

Từ Jenkins, bạn hãy vào project của bạn, ở phần Build Triggers và tích vào GitHub hook trigger for GITScm polling

Từ repository trên Github, hãy vào Settings

Chọn Webhook -> Add Webhook

Tại Payload URL hãy thêm url với định dạng sau https://<jenkins_url>/github-webhook/, ví dụ tên miền Jenkins của mình là https://jenkins.matbao.io nên url đầy đủ của mình như sau

https://jenkins.matbao.io/github-webhook/

Tại phần SSL verification, nếu bạn có ssl hãy chọn Enable SSL verification và ngược lại thì chọn Disable (not recommended), trường hợp của mình có ssl nên mình chọn Enable SSL verification.

Tại Which events would you like to trigger this webhook, mình chọn Just the push event, các phần khác bạn tìm hiểu sau nhé.

Sau khi thiết lập xong, bấm Add Webhook

Lưu ý: Github và Jenkins phải thấy nhau nhé.

Nếu thành công url của bạn bạn sẽ có tích xanh như dưới.

Hãy để ý hình dưới, mình đang có 4 job được hoàn thành. Bây giờ mình sẽ tiến hành cập nhật repository của mình trên Github và bạn hãy xem chuyện gì xảy ra nhé.

Vào repository trên Github, sửa file hoanghd.sh

Mình thêm nội dung như dưới

echo "Chao mung den voi website cua toi"
echo "Toi ten la Ha Dang Hoang"

Ý nghĩa của nó là khi chạy job thì hãy in ra cho mình 2 dòng với nội dung “Chao mung den voi website cua toi” và “Toi ten la Ha Dang Hoang”

Tiến hành commit repository

Hãy qua Jenkins, ta thấy job đang chạy lần thứ 5, tại sao lại như vậy. Đó là do khi bạn thay đổi repository trên Github thì Github thông qua Webhook sẽ báo cho Jenkins rằng repository đã có cập nhật mới và yêu cần Jenkins thực hiện chạy Job để cập nhật thay đổi này lên server.

Hãy vào Console Output chúng ta thấy kết quả

$ /bin/sh -xe /tmp/jenkins15373818406552537645.sh
+ sh /var/jenkins_home/workspace/hello-world/hoanghd.sh
Chao mung den voi website cua toi
Toi ten la Ha Dang Hoang
Finished: SUCCESS

Chúng ta thấy file hoanghd.sh đã được tải xuống Jenkins như dưới

$ docker exec jenkins cat /var/jenkins_home/workspace/hello-world/hoanghd.sh
echo "Chao mung den voi website cua toi"
echo "Toi ten la Ha Dang Hoang"

Chúc các bạn thành công.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories