Với những người dùng đang tìm hiểu về các tác vụ tự động hóa thì không thể không bỏ qua Jenkins cũng như cách tích hợp nó vào trong một hệ thống CI/CD của chúng ta. Nếu như bạn cũng đang muốn tìm hiểu thêm các kiến thức này thì đừng bỏ qua những thông tin mà Stringee sẽ mang tới cho bạn trong bài viết này.
Để có thể hiểu được tường tận nội dung chúng ta sẽ cùng tìm hiểu trong bài viết này, bạn có thể tìm hiểu bài viết về CI/CD của Stringee trong kỳ trước:
1. Jenkins
1.1. Jenkins là gì?
Jenkins được định nghĩa là một opensource được sử dụng để thực hiện các chức năng được tích hợp liên tục (nó còn được gọi là CI- Continuous Integration) và có thể xây dựng các tác vụ dạng tự động hóa. Nó được tích hợp hầu hết các source code của những members trong team sẽ nhanh chóng một cách liên tục, theo dõi sự thực thi và các trạng thái thông qua các bước kiểm thử. Việc này đều sẽ giúp cho sản phẩm chạy được ổn định hơn.
1.2. Jenkins hoạt động như thế nào?
Jenkins sẽ được cung cấp các gói lưu trữ Java WAR và những gói cài đặt cho các hệ điều hành phổ biến ở dưới dạng Homebrew, với hình ảnh Docker và mã nguồn. Và, mã nguồn chủ yếu ở đây là Java, gồm một vài tệp Croovy, Ruby và Antlr. Khi đó, bạn có thể độc lập chạy jenkins War hoặc dưới dạng một servlet trong máy chủ của ứng dụng Java như Tomcat.
Trong cả hai trường hợp này thì Jenkins sẽ tạo ra một giao diện cho người dùng web và chấp nhận cho các cuộc gọi đến API Rest. Khi bạn chạy Jenkins lần đầu tiên, khi đó chương trình này sẽ tạo một tài khoản quản trị với các mật khẩu ngẫu nhiên khá dài. Bạn hoàn toàn có thể paste mật khẩu này vào webpage ban đầu là có thể unlock của trình cài đặt. Để có thể vận hành được Jenkins thì các pipeline sẽ được tạo ra, và Pipeline là một trong những chuỗi các bước server Jenkins cần thực hiện cho những tác vụ của CI/CD. Chúng đều được lưu trữ sẵn trong một file văn bản Jenkinsfile
Khi đó, Jenkinsfile
sẽ sử dụng cú pháp ngoặc nhọn, khá giống với JSON. Đây là bước trong pipeline được khai báo ở dưới dạng câu lệnh có chứa tham số. Khi đó, chúng sẽ chứa trong dấu ngoặc nhọn {}, sau đó, thì máy chủ Jenkins đọc các Jenkinsfile và được thực hiện với các câu lệnh cũng như đẩy mã xuống pipeline từ source code. Mỗi một tệp Jenkinsfile đó đều có thể được tạo ra thông qua một GUI hoặc được trực tiếp viết code. Bạn đọc tham khảo thêm: IDE là gì? Kiến thức cần nắm vững về IDE dành cho Developer
1.3. Jenkins pipeline và Jenkinsfile
1.3.1. Jenkins pipeline là gì?
Jenkins Pipeline
được định nghĩa là một bộ plugin giúp hỗ trợ việc triển khai cũng như tích hợp CD dựa theo kiểu pipeline. Quá trình này bao gồm: Tập hợp các quy trình với những tác vụ có liên quan với nhau và được thực hiện theo một cách tuần tự dựa theo thứ tự đã được định sẵn. Khi đó, Jenkins Pipeline
sẽ được khai báo ngay trên một tập tin được gọi với tên Jenkinsfile
.
1.3.2. Jenkinsfile là gì?
Jenkinsfile
được định xem là phần “lõi” của Jenkins Pipeline, nó thường được viết dựa vào cú pháp DSL với các ngôn ngữ chính là: Groovy DSL. Đây là tập tin có chứa danh sách những công việc mà pipeline sẽ thực hiện. Nó được lưu trữ ở trên server Jenkins hoặc ở trên repository của git/Bitbucket. Bộ phận Jenkinsfile
này sẽ được thực hiện với các tác vụ như:
- Thiết lập sẵn các biến của môi trường.
- Pull code từ git repo đã được chỉ định sẵn.
- Thiết lập Jenkins workspace.
- Thực thi các đoạn script đã được chỉ định sẵn.
- Sau khi thực hiện xong thì nó có nhiệm vụ dọn dẹp cho workspace.
Xem thêm bài viết:
- Hướng dẫn cài đặt Web server Apache trên CentOS 7
- Cài đặt cấu hình cân bằng tải với HaProxy và Docker
- Tìm hiểu về ràng buộc (Constraint) trong SQL
2. Cấu hình CI/CD với Jenkins
2.1. Cài đặt Jenkins
Một điều cần lưu tâm đó là Jenkins được phát triển và khởi chạy bằng ngôn ngữ Java, vì vậy trước khi cài đặt bạn nên cài đặt trước jdk trên máy của mình nhé.
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install jenkins -y
Jenkins sẽ lắng nghe tại cổng 8080, bạn chỉ cần truy cập http://localhost:8080 là có thể truy cập vào dashboard Jenkins. Tiếp theo, chúng ta cần cài đặt cho bước khởi động Jenkins. Các bạn có thể làm theo hướng dẫn của Jenkins, đến bước cài plugin thì nên click vào "Install suggested plugins" nhé.
Và như trong một quy trình CI/CD chính, chúng ta cần có một nguồn trigger các sự kiện làm thay đổi đến source code từ repository. Đó gọi là một webhook, mà webhook thì cần có một public domain để hoạt động. Nếu không có một domain, các bạn có thể sử dụng các công cụ tunnel để thay thế như ngrok
hoặc là localtunnel
nhé.
2.2. Cấu hình CI
Trước hết chúng ta cần biết được khi nào trên repo có một pull request mới được tạo để chạy CI. Để làm được điều này cần nhờ đến một plugin của Jenkins là GitHub Pull Request Builder. Chúng ta sẽ vào phần quản lí plugin: Manage Jenkins > Manage Plugins > Tab Available, search và click "Install without restart".
Bước 1: Tạo webhook trên repo: Vào setting webhook, chọn Add webhook. Tại payload url, bạn hãy điền webhook của mình vào đây. Content type chọn application/json và thêm Secret nếu cần. Cuối cùng tại mục action chọn Issue comments và Pull requests.
Bước 2: Cài đặt cho plugin GitHub Pull Request Builder. Vào setting: Manage Jenkins > Configure System, Thêm credentials (username/password) của tài khoản github cho plugin.
Bước 3: Tạo job mới. Tại mục Github project nhập link của repo vào đó. Tiếp theo, chọn GitHub Pull Request Builder, tích chọn "Use github hooks for build triggering". Trong mục Advance Setting..., nhập whitelist branch khi có pull request mới được tạo. Và nếu muốn thay đổi tên hiển thị trên pull request khi job chạy thì bạn có thể setting trong mục Trigger setup. Thêm action "Update commit status during build" và nhập tên hiển thị của job vào ô "Commit Status Context".
Bước 4: Viết script pipeline cho job
2.3. Cấu hình CD
Công việc CD như chúng ta đã biết là thực hiện deploy các ứng dụng sau khi đã thay đổi mã nguồn tới các máy chủ thực hiện chạy ứng dụng. Đây chính là bước 4 trong việc cấu hình CI chúng ta đã đề cập ở trên. Dưới đây, chúng ta sẽ tìm hiểu một đoạn script pipeline sẽ được cấu hình để build ứng dụng và deploy nó nhé.
pipeline {
agent any
tools {
maven "mvn3"
}
stages {
stage("Checkout") {
when {
expression {
return current_status == "closed" && merged == "true"
}
}
steps {
echo "Checkout done."
}
}
stage("Build") {
when {
expression {
return current_status == "closed" && merged == "true"
}
}
steps {
echo "Build done."
}
}
stage("Deploy") {
when {
expression {
return current_status == "closed" && merged == "true"
}
}
steps {
echo "Deploy done."
}
}
stage("Notify") {
when {
expression {
return current_status == "closed" && merged == "true"
}
}
steps {
echo "Notify when deploy success."
}
}
}
Kết
Trên đây là bài viết hướng dẫn các cấu hình, tích hợp CI/CD bằng Jenkins vào project. Mong các bạn có thể học được nhiều điều về Jenkins cũng như CI/CD qua bài viết này.
Stringee Communication APIs là giải pháp cung cấp các tính năng như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài chăm sóc khách hàng có thể tích hợp trực tiếp vào các ứng dụng/website của doanh nghiệp nhanh chóng. Bộ giải pháp này giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.
Mời quý bạn đọc đăng ký dùng thử và nhận tư vấn tại đây: