Jenkins là một mã nguồn mở nhằm mục đích tự động hóa các tác vụ kỹ thuật lặp đi lặp lại liên quan đến việc tích hợp và phân phối phần mềm liên tục. Với một hệ sinh thái bổ trợ mạnh mẽ và hỗ trợ rộng rãi, Jenkins có thể xử lý một loạt khối lượng công việc khác nhau để xây dựng, thử nghiệm và triển khai ứng dụng. Với hướng dẫn về cách cài đặt hệ thống tích hợp liên tục bằng Jenkins trên Ubuntu 20.04 này, sẽ giúp bạn trình bày cách thiết lập Jenkins để tự động kiểm tra ứng dụng khi các thay đổi được đẩy vào kho lưu trữ GitHub.
Điều kiện để cài đặt hệ thống tích hợp liên tục bằng Jenkins trên Ubuntu 20.04
Để làm theo hướng dẫn này, bạn sẽ cần một Ubuntu server 20.04 với ít nhất 1GB RAM đã cài đặt Jenkins an toàn từ nguồn đáng tin cậy. Để bảo mật web interface đúng cách, bạn sẽ cần gán một tên miền cho Jenkins server. Ubuntu server cần cài đặt các chương trình sau:
- Đã cài đặt Jenkins.
- Đã cài đặt Nginx. (Hướng dẫn cách cài đặt Nginx trên Ubuntu 20.04 tại đây)
- Đã thiết lập bảo mật Nginx với Let’s Encrypt.
- Cấu hình Jenkins với SSL sử dụng Nginx làm Reverse Proxy.
- Đã cài đặt Docker.
Bước 1: Thêm Jenkins User vào Docker Group
Khi bạn đã thực hiện theo điều kiện, tức là cả Jenkins và Docker đều được cài đặt trên server của bạn. Tuy nhiên, mặc định người dùng Linux chịu trách nhiệm chạy quy trình Jenkins không thể truy cập vào Docker.
Vì vậy, cần phải thêm người dùng jenkins
vào docker group
bằng lệnh usermod trong Linux:
sudo usermod -aG docker jenkins
Bạn có thể liệt kê các thành viên của docker group
để xác nhận rằng người dùng jenkins
đã được thêm thành công bằng câu lệnh:
grep docker /etc/group
Output
docker:x:999:sammy,jenkins
Để sử dụng Jenkins với tư cách thành viên mới, bạn cần khởi động lại dịch vụ:
sudo systemctl restart jenkins
Nếu bạn đã cài đặt Jenkins với các plugin mặc định, bạn có thể cần kiểm tra để đảm bảo rằng cả docker
và docker-pipeline
đã được bật. Thực hiện nhấp vào Manage Jenkins
từ thanh sidebar, sau đó chọn Manage plugin
từ menu.
Nhấp vào danh mục Available
của menu plugin để tìm kiếm plugin mới và nhập từ khóa docker
vào thanh tìm kiếm. Nếu cả Docker Pipeline
và Docker plugin
đều được trả về dưới dạng tùy chọn và chưa được bật, hãy chọn cả hai và khi có thông báo, hãy cho phép Jenkins khởi động lại bằng các plugin mới được kích hoạt.
Quá trình này sẽ mất khoảng một phút và sau đó trang sẽ tự động làm mới.
Bước 2: Tạo Personal Access Token trong GitHub
Để Jenkins thao tác với các dự án GitHub của bạn, thì bạn cần tạo một mã truy cập cá nhân (Personal Access Token) mới trong tài khoản GitHub.
Bắt đầu, bạn truy cập GitHub và thực hiện đăng nhập vào tài khoản chứa mã nguồn mà bạn muốn tích hợp. Sau đó, nhấp vào biểu tượng người dùng phía góc trên bên phải và chọn Settings
từ menu như sau:
Tiếp theo, tìm phần Developer settings
và nhấp vào Personal Access Token
.
Nhấp vào nút Generate new token
để tạo một mã truy cập mới.
Sau đó, bạn sẽ được đưa đến trang nơi bạn có thể xác định phạm vi (scope) cho Access Token mới này.
Trong hộp Mô tả mã thông báo (Token description
), thực hiện thêm mô tả cho phép bạn nhận ra rằng Access token này sử dụng cho dự án nào, phạm vi như thế nào để tránh sự nhầm lẫn với các token có mục đích sử dụng khác.
Trong phần Select Scope, bạn hãy tích vào các phần repo:status
, repo:public_repo
và admin:org_hook
. Các thành phần này sẽ cho phép Jenkins cập nhật trạng thái và tạo webhook cho dự án. Nếu đang sử dụng kho lưu trữ riêng tư, bạn sẽ chọn phần repo
chung bao gồm tất cả thay vì các tiểu mục nhỏ bên trong.
Khi hoàn tất chọn phạm vi, hãy nhấp vào Generate Token
ở dưới cùng để hoàn thành.
Bạn sẽ được chuyển hướng trở lại trang Personal Access Token
và Personal Access Token
mới của bạn vừa tạo sẽ được hiển thị ngay bên dưới:
Sao chép Access Token
và lưu ngay vào một file ghi nhớ nào đó để có thể sử dụng sau này vì thông báo cho biết, không có cách nào để truy xuất lại Access Token sau khi thoát khỏi trang này.
Lưu ý: Như đã đề cập trong ảnh ở trên, vì lý do bảo mật, không có cách nào để hiển thị lại mã thông báo sau khi bạn rời khỏi trang này. Nếu bạn quên mất Access Token đã tạo thì bạn hãy xóa Access Token đó khỏi tài khoản GitHub của bạn rồi thực hiện tạo mã mới để sử dụng.
Bây giờ bạn đã có Access Token
cho tài khoản GitHub của mình, tiếp theo bạn có thể cấu hình Jenkins để xem kho lưu trữ dự án của bạn. Đầu tiên, bạn thêm Personal Access Token vừa mới tạo trên GitHub vào Jenkins.
Cần thêm đoạn mã đó vào Jenkins server để có thể tự động thiết lập webhook đăng nhập vào Jenkins web interface bằng tài khoản quản trị mà bạn đã cấu hình trong khi cài đặt.
Nhấp vào tên người dùng ở góc trên cùng bên phải để truy cập cài đặt người dùng của bạn và từ đó, nhấp vào Credentials
trong menu bên trái. :
Trên trang tiếp theo, nhấp vào mũi tên bên cạnh global
trong Jenkins Scope
. Nhấp vào Add credentials
vào hộp thoại được mở lên ngay sau đó.
Sau đó, bạn sẽ nhận được một biểu mẫu để thêm thông tin tài khoản đăng nhập mới.
Trong phần Kind
chọn phần Secret text
. Trong trường Secret
, bạn dán Personal Access Token GitHub
đã tạo ở bước 1 vào. Điền vào trường Description
để có thể xác định code đó để làm gì. Bạn nên chọn scope
là global
và trường ID có thể để trống như hình bên dưới.
Nhấp vào nút OK để hoàn tất thêm Personal Access Token GitHub
vào Jenkins
.
Bước 3: Thiết lập quyền truy cập của Jenkins với GitHub
Quay lại bảng điều khiển chính của Jenkins, thực hiện nhấp vào Manage Jenkins
ở menu bên trái:
Trong danh sách các tác vụ trên, bạn chọn phần Configure System
:
Tìm và chọn danh mục GitHub và thực hiện thêm GitHub server (Add GitHub Server) rồi chọn Github server của bạn.
Sau đó, một cửa sổ mở rộng để bạn nhập một số thông tin bổ sung của GitHub server đó và thực hiện chọn Personal Access Token GitHub
:
Nhấp vào nút Test Connection
để kiểm tra kết nối. Quá trình kiểm tra, Jenkins sẽ thực hiện lệnh gọi API thử nghiệm tới tài khoản của bạn và xác minh kết nối.
Nếu kết nối thành công sẽ được thông báo như hình trên. Nhấp vào nút Save
để lưu các thay đổi cấu hình.
Để thiết lập hệ thống tích hợp liên tục bằng Jenkins, sử dụng VPS là một lựa chọn thường dùng. Giúp bạn có thể dễ dàng quản lý và cấu hình hệ thống tích hợp liên tục mà không cần lo lắng về vấn đề phần cứng và môi trường máy tính.
Muốn chạy Jenkins và các công cụ hỗ trợ tích hợp liên tục trên một VPS được quản lý chuyên nghiệp, bạn có thể tham khảo lựa chọn Vietnix – nhà cung cấp dịch vụ VPS hàng đầu tại Việt Nam. Với Vietnix, bạn sẽ được cung cấp các gói VPS với nhiều cấu hình khác nhau, đảm bảo đáp ứng được nhu cầu sử dụng như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp và VPS NVMe.
Hơn nữa, Vietnix còn cung cấp công cụ quản trị VPS chuyên nghiệp để giúp bạn quản lý và vận hành hệ thống VPS của mình một cách hiệu quả. Với sự hỗ trợ 24/7 của đội ngũ chuyên gia giàu kinh nghiệm từ Vietnix, bạn có thể hoàn toàn tập trung vào việc thiết lập hệ thống tích hợp liên tục của mình mà không cần lo lắng về vấn đề kỹ thuật.
Liên hệ với Vietnix để biết thêm thông tin chi tiết về các gói VPS và được tư vấn lựa chọn gói phù hợp nhất.
Bước 4: Thiết lập Demonstration Application trên tài khoản GitHub
Để trình bày cách sử dụng Jenkins để kiểm tra một ứng dụng, hướng dẫn này sẽ sử dụng một chương trình cơ bản là “hello world” được tạo bằng Hapi.js
. Bạn cần có bản sao code của chương trình này bằng cách fork kho lưu trữ của chương trình.
Truy cập kho lưu trữ của dự án và nhấp vào nút Fork
ở góc trên bên phải để tạo một bản sao của kho lưu trữ trong tài khoản của bạn như sau:
Một bản sao của kho lưu trữ sẽ được thêm vào tài khoản của bạn ngay sau đó.
Kho lưu trữ chứa file pack.json
xác định các phần phụ thuộc thời gian chạy và phát triển, cũng như cách hoạt động bao gồm cả phần kiểm . Các phần phụ thuộc có thể được cài đặt bằng cách chạy npm install
và các kiểm tra có thể được chạy bằng cách sử dụng npm test
.
Jenkinsfile
cũng đã được thêm sẵn vào kho lưu trữ. Jenkins sẽ đọc tệp này để xác định các hành động sẽ chạy đối với kho lưu trữ để xây dựng, kiểm tra hoặc triển khai và tệp này được viết bằng bản khai báo của Jenkins Pipeline DSL
.
Jenkinsfile
trong kho lưu trữ hello-hapi sẽ trông như thế này:
#!/usr/bin/env groovy
pipeline {
agent {
docker {
image 'node'
args '-u root'
}
}
stages {
stage('Build') {
steps {
echo 'Building...'
sh 'npm install'
}
}
stage('Test') {
steps {
echo 'Testing...'
sh 'npm test'
}
}
}
}
Pipeline
chứa toàn bộ định nghĩa mà Jenkins sẽ mô phỏng. Bên trong file có một thành phần agent
chỉ định nơi các hành động trong pipeline sẽ thực thi. Để tách biệt các môi trường khỏi hệ thống server thì cần thử nghiệm trong các Docker Container, được chỉ định bởi docker agent
.
Vì Hapi.js là một framework của Node.js, vậy nên phải sử dụng node
của nút làm cơ sở. Cần định người dùng root
trong container để người dùng có thể đồng thời ghi vào cả ổ đĩa đính kèm có chứa code đã kiểm xuất và ổ đĩa mà tập lệnh ghi output.
Tiếp theo, file xác định hai giai đoạn, tức là phân chia công việc hợp lý. Đặt tên cho giai đoạn đầu tiên là “Build” và giai đoạn thứ hai là “Test”. Bước Build sẽ in một thông báo chẩn đoán và sau đó chạy lệnh npm install
để tải xuống các gói phụ thuộc cần thiết. Bước Test sẽ in một thông báo khác rồi chạy các kiểm tra như đã xác định trong file pack.json
.
Bây giờ bạn đã có một kho lưu trữ với Jenkinsfile
hợp lệ và có thể thiết lập Jenkins để xem kho lưu trữ, chạy file khi các thay đổi trên kho lưu trữ được thông báo.
Xem thêm: Cách cài đặt Node.js trên Ubuntu 20.04
Bước 5: Tạo một quy trình mới trong Jenkins
Bạn có thể thiết lập Jenkins để sử dụng Personal Access Token GitHub để xem kho lưu trữ.
Quay lại với bảng điều khiển chính của Jenkins, nhấp vào New Item
trong menu bên trái:
Nhập tên cho quy trình mới của bạn trong trường Enter an item name
. Sau đó, chọn loại pipeline
:
Nhấp vào nút OK ở phía dưới để tiếp tục.
Trên màn hình kế tiếp, bạn chọn GitHub project để xác định dự án sẽ áp dụng và điền liên kết GitHub của dự án.
Lưu ý: Bạn cần đảm bảo trỏ tới nhánh của ứng dụng Hello Hapi bạn đã fork để Jenkins có quyền cấu hình webhook.
Tiếp theo, trong phần Build Triggers
, bạn tích chọn GitHub hook trigger for GITScm polling
như sau:
Phần Pipeline cần Jenkins chạy đường ống được xác định trong Jenkinsfile
của kho lưu trữ nên bạn cần thay đổi từ Definition
thành Pipeline script from SCM
.
Trong hộp thoại mới bạn chọn Git
trong menu SCM
và thực hiện nhập lại URL
của kho lưu trữ vào trường Repository URL
như hình phía dưới.
Lưu ý: Ví dụ này sử dụng file tham chiếu Jenkinsfile
có sẵn trong kho lưu trữ công cộng. Nếu dự án của bạn không thể truy cập công khai, bạn sẽ cần sử dụng nút thêm thông tin đăng nhập để thêm quyền truy cập bổ sung vào kho lưu trữ và thêm Personal Access Token như ở bước 1.
Khi hoàn tất các bước trên, đừng quên nhấp vào nút Save
ở cuối trang để lưu lại các cấu hình.
Bước 6: Thực hiện bản dựng đầu tiên và cấu hình Webhook
Jenkins sẽ không tự động cấu hình webhook khi xác định đường dẫn cho kho lưu trữ trong giao diện. Để kích hoạt Jenkins thiết lập các hook thích hợp, bạn cần thực hiện quá trình tạo thủ công lần đầu tiên.
Trên trang chính pipeline
, nhấp vào Build Now
ngay trong menu bên trái:
Một bản dựng mới sẽ được sắp xếp lịch trình thực thi. Trong danh sách lịch sử bản dựng (Build History) ở góc dưới bên trái, một bản dựng mới sẽ xuất hiện trong giây lát. Ngoài ra, chế độ xem theo giai đoạn (Stage View) sẽ bắt đầu được vẽ như một biểu đồ trong khu vực chính của giao diện sẽ giúp quá trình theo dõi tiến trình chạy thử nghiệm khi các giai đoạn khác nhau được hoàn thành.
Trong danh sách lịch sử bản dựng, mỗi khi nhấp vào số được liên kết với bản dựng sẽ chuyển đến trang chi tiết bản dựng đó. Từ đây, bạn có thể nhấp vào nút Console Output
trong menu bên trái để xem chi tiết các bước đã được chạy dưới dạng câu lệnh.
Nhấp vào mục Back to Project
trên menu bên trái khi bạn hoàn tất để quay lại chế độ xem Pipeline chính.
Bây giờ đã xây dựng dự án lần đầu thành công, lúc này có thể yêu cầu Jenkins tạo webhook cho dự án bằng cách nhấp vào phần Configure
trong menu bên trái của quy trình như sau:
Chỉ cần nhấp vào nút Save ở dưới cùng mà không cần thao tác hay thay đổi nào cả. Bây giờ, Jenkins đã có thông tin về dự án từ quá trình xây dựng ban đầu, sau đó sẽ đăng ký một webhook với dự án GitHub khi bạn lưu trang.
Bạn có thể xác minh điều này bằng cách truy cập kho lưu trữ GitHub của mình và nhấp vào nút Settings. Trên trang tiếp theo, nhấp vào Webhook từ menu bên. Bạn sẽ thấy Webhook Jenkins trong giao diện chính tương tự như hình sau:
Nếu vì bất kỳ lý do gì mà Jenkins không thể đăng ký hook (ví dụ: do thay đổi API hoặc ngừng hoạt động giữa Jenkins và Github), bạn có thể nhanh chóng tự thêm một hook khác bằng cách nhấp vào Add webhook
và chắc chắn rằng Payload URL
được đặt thành https:// my-jenkins-server:8080/github-webhook
và Content Type
được đặt thành application/json
, sau đó nhấp lại vào Add webhook
ở phía cuối.
Khi bạn đẩy các thay đổi mới vào kho lưu trữ của mình, Jenkins sẽ được thông báo và sau đó thực hiện lấy mã mới và kiểm tra lại với một quy trình tương tự.
Để xác thực quy trình này, trong trang kho lưu trữ trên GitHub, bạn có thể nhấp vào nút Create new file
ở bên trái nút Clone or download
màu xanh lục:
Trên trang tiếp theo, chọn tên file và một số nội dung giả định như sau:
Nhấp vào nút Commit new file
ở dưới cùng khi hoàn tất.
Khi đó, nếu bạn quay lại giao diện Jenkins, bạn sẽ thấy một bản dựng mới tự động bắt đầu được thông báo như bên dưới:
Bạn thấy rằng quá trình tích hợp liên tục này đã thành công, bạn có thể bắt đầu các bản dựng bổ sung tiếp theo bằng cách thực hiện các commit khác trên một bản sao cục bộ của kho lưu trữ và đẩy sao lưu lên GitHub.
Vietnix là một trong những nhà cung cấp dịch vụ VPS hàng đầu tại Việt Nam. Với hơn 10 năm kinh nghiệm hoạt động trong lĩnh vực này, đồng hành cùng 50.000+ khách hàng, Vietnix đã được khẳng định là một địa chỉ tin cậy của các doanh nghiệp và cá nhân có nhu cầu sử dụng dịch vụ VPS.
Đặc biệt, Vietnix luôn đặt chất lượng dịch vụ lên hàng đầu, đảm bảo cho khách hàng sử dụng VPS của họ với tốc độ truy cập nhanh chóng và ổn định, cùng với độ bảo mật cao nhất. Do đó, không có gì ngạc nhiên khi có tới 97% khách hàng của Vietnix đánh giá 5 sao và giới thiệu cho người khác sử dụng dịch vụ. Điều này là một minh chứng cho uy tín và đáng tin cậy của Vietnix trên thị trường VPS tại Việt Nam.
Vietnix cũng đã đạt được nhiều thành công và công nhận nhờ chất lượng dịch vụ xuất sắc mà công ty đã mang đến. Việc nhận giải thưởng Thương hiệu Việt Nam xuất sắc năm 2022 là một minh chứng cho sự cam kết của Vietnix trong việc cung cấp dịch vụ tốt nhất cho khách hàng.
Liên hệ với Vietnix theo những thông tin dưới đây để trải nghiệm dịch vụ VPS tốc độ cao ngay hôm nay.
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
Lời kết
Qua hướng dẫn về cách cài đặt hệ thống tích hợp liên tục bằng Jenkins trên Ubuntu 20.04 này, bạn có thể áp dụng việc cấu hình Jenkins để xem dự án GitHub và tự động kiểm tra mọi thay đổi mới được commit. Qua đó, tự động hóa quá trình làm việc để giảm tải các bước, nâng cao hiệu suất làm việc và cải thiện sai sót trong quá trình phát triển phần mềm. Nếu bạn thấy hướng dẫn này có hữu ích thì đừng quên bình luận và chia sẻ bài viết này nhé.