Winston is a highly experienced digital marketing professional, specializing in Cybersecurity, IT services, and Software as a Service (SaaS).
Trong nội dung trước, Locker đã giới thiệu về bảo mật CI/CD với GitLab là nền tảng tích hợp mặc định. Tuy nhiên, trong thế giới phát triển phần mềm hiện đại, có nhiều giải pháp CI/CD hữu ích và phổ biến khác. Một trong số đó là Jenkins – một công cụ tự động hóa mã nguồn mở được nhiều đội ngũ phát triển ưa chuộng. Jenkins có những ưu điểm riêng và cách tiếp cận độc đáo trong việc quản lý quy trình CI/CD. Hãy cùng tìm hiểu chi tiết hơn về Jenkins CI/CD trong bài hướng dẫn này nhé
Jenkins là gì?
Jenkins là một công cụ DevOps mã nguồn mở dùng để tự động hóa quy trình tích hợp liên tục/phát triển liên tục (CI/CD). Nó được viết bằng ngôn ngữ Java và được sử dụng để thực hiện các quy trình trong CI/CD, còn gọi là pipeline.
Các pipeline tự động hóa việc kiểm thử và báo cáo các thay đổi riêng lẻ trong codebase lớn theo thời gian thực. Nó cũng hỗ trợ tích hợp các nhánh code khác nhau vào nhánh chính.
Jenkins ban đầu được phát triển bởi Hudson trước khi trở thành được phát hành như phần mềm mã nguồn mở. Hiện nay, nó là một trong những công cụ tích hợp CI/CD phổ biến nhất với hàng trăm nghìn bản cài đặt trên toàn cầu.
CI đã được vào Jenkins ngay trong những ngày đầu tiên. Ban đầu, tiêu chuẩn cũ là build hàng ngày. Bây giờ, quy tắc thông thường là mỗi thành viên trong nhóm sẽ gửi commit hàng ngày hoặc thường xuyên hơn và hệ thống sẽ có build mới khi có thay đổi đáng kể trong codebase.
Theo thời gian, Jenkins đã bổ sung thêm các tính năng CD. Chúng tự động hóa việc build và đóng gói code để triển khai đến môi trường test, staging và production.
Nội dung liên quan: GitOps là gì? Nên lựa chọn GitOps hay DevOps?
Jenkins CI/CD Pipeline
Jenkins Pipeline (chú ý chữ P viết hoa) là một bộ plugin hỗ trợ việc triển khai và tích hợp các pipeline CI/CD vào Jenkins.
Nó cung cấp một tập hợp công cụ để mô hình hóa các pipeline từ đơn giản đến phức tạp dưới dạng code, sử dụng cú pháp ngôn ngữ chuyên biệt (DSL) của Pipeline. Các định nghĩa của một pipeline được viết trong một file văn bản (gọi là Jenkinsfile).
File này sau đó có thể được commit vào kho lưu trữ mã nguồn của project. Đây chính là nền tảng của khái niệm “Pipeline-as-code” – coi pipeline CD như một phần của ứng dụng, cần được quản lý phiên bản và đánh giá như bất kỳ đoạn code nào khác. Điều này giúp các đội phát triển dễ dàng cấu hình và tối ưu hóa CI/CD cho Jenkins hơn.
Sau đây là các khái niệm chính trong Jenkins Pipeline:
- Pipeline: Đây là mô hình CD pipeline do người dùng định nghĩa. Code của pipeline mô tả toàn bộ quy trình build, thường bao gồm các stage như build ứng dụng, test và deploy.
- Node: Là một máy chủ trong môi trường Jenkins, có khả năng thực thi pipeline.
- Stage: Đây là khối lệnh xác định một tập hợp các tác vụ riêng biệt trong toàn bộ pipeline (ví dụ: các stage “Build”, “Test” và “Deploy”). Nhiều plugin sử dụng stage để hiển thị trạng thái và tiến độ của pipeline.
- Task: Là một tác vụ đơn lẻ. Về cơ bản, task chỉ định cho Jenkins thực hiện một hành động cụ thể tại một thời điểm nhất định trong quy trình.
>> Tìm hiểu thêm về Secure coding
Cách tạo và cấu hình Jenkins CI/CD Pipeline
Việc tích hợp Jenkins với GitHub sẽ giúp quá trình xây dựng, kiểm thử và triển khai project của bạn hiệu quả hơn. Cụ thể, hôm nay chúng tôi sẽ hướng dẫn bạn cách thiết lập pipeline như sau:
- Khi có một Pull Request (PR) mới được tạo, Jenkins sẽ phát hiện sự kiện này và kích hoạt job CI. Job CI sẽ thực hiện các bước sau:
- Chạy Unit Test
- Kiểm tra định dạng code (checkstyle)
- Báo cáo kết quả
- Sau khi PR được chấp nhận và merge, job CD sẽ được kích hoạt để deploy code mới lên server test. Bạn chỉ cần đợi đến khi nhận được thông báo triển khai thành công.
Cài đặt Jenkins
Bước đầu tiên là tải và cài đặt Jenkins trên máy tính của bạn. Jenkins là một ứng dụng Java, vì vậy bạn cần cài đặt Java trước.
Để tải Jenkins, hãy truy cập trang web chính thức và vào phần Download. Chọn phiên bản phù hợp với hệ điều hành của bạn (Windows, Linux, MacOS), và tải file ‘war’. Lưu file này vào thư mục bạn muốn.
Sau khi tải xong file này, bạn có thể cài đặt Jenkins bằng cách chạy nó bằng Java Runtime Environment (JRE). Mở ứng dụng dòng lệnh, di chuyển đến thư mục chứa file ‘war’, và chạy lệnh sau:
java -jar jenkins.war
Lệnh này sẽ khởi động Jenkins trên máy tính của bạn. Giữ nguyên cửa sổ lệnh rồi truy cập http://localhost:8080 và làm theo hướng dẫn để hoàn tất quá trình cài đặt.
Thiết lập CI
Đầu tiên, chúng ta cần biết khi nào có pull request mới trên repo để chạy CI. Để làm được điều này, ta cần sử dụng plugin GitHub Pull Request Builder của Jenkins.
Cách cài đặt plugin:
- Vào Manage Jenkins > Manage Plugins > Tab Available
- Tìm kiếm “GitHub Pull Request Builder”
- Chọn “Install without restart”
Sau đó thiết lập cho cả GitHub và Jenkins bằng các bước sau:
- Tạo webhook trên repo:
- Vào Settings > Webhooks > Add webhook
- Điền Payload URL theo format: <PUBLIC_DOMAIN>/ghprbhook/(Ví dụ: http://my-domain.com/ghprbhook/)
- Chọn Content type: application/json
- Thêm Secret nếu cần
- Tại Actions, chọn Issue comments và Pull requests
- Cấu hình plugin:
- Vào Manage Jenkins > Configure System
- Thêm tên đăng nhập và mật khẩu GitHub của bạn vào plugin
- Tạo job mới:
- Điền link repo vào mục GitHub project
- Chọn GitHub Pull Request Builder
- Tích “Use github hooks for build triggering”
- Trong Advanced Settings, nhập whitelist branch cho pull request
- Tại Trigger setup, bạn có thể thay đổi tên hiển thị trên pull request
- Thêm action “Update commit status during build”
- Nhập tên hiển thị của job vào “Commit Status Context”
- Viết script pipeline cho job
Sau khi hoàn tất cài đặt, hãy thử tạo một pull request vào nhánh master trên repo để kiểm tra.
Tích hợp CD
GitHub webhook hiện chưa hỗ trợ trực tiếp cho các merge pull request. Do đó, chúng ta cần dùng một plugin khác (tên là Generic Webhook Trigger) để phân tích thủ công payload từ GitHub webhook khi có sự kiện merge. Cụ thể, ta sẽ kiểm tra hai trường: $.action=”closed” và $.pull_request.merged=true.
Trước tiên, hãy cài đặt plugin này vào hệ thống Jenkins của bạn. Sau đó thực hiện các bước sau:
- Tạo webhook mới với Payload URL là <PUBLIC_DOMAIN>/generic-webhook-trigger/invoke?token=my-token. Sau đó chọn action là Pull requests.
- Tạo job mới trong Jenkins. Ở phần Build Trigger, chọn Generic Webhook Trigger và cấu hình như hình minh họa bên dưới
- Viết script cho job
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."
}
}
}
Lưu ý: Hãy đảm bảo bạn đã cài đặt plugin Generic Webhook Trigger trước khi thực hiện các bước trên.
Lời kết
Jenkins nổi bật với khả năng tùy biến cao, hỗ trợ đa dạng plugin và tích hợp dễ dàng với nhiều công cụ phát triển khác nhau. Đây là lý do vì sao Jenkins vẫn là lựa chọn CI/CD hàng đầu của nhiều đội ngũ phát triển phần mềm trên thế giới. Locker hy vọng bài hướng dẫn này đã cung cấp cho bạn cái nhìn tổng quan về cách cài đặt và sử dụng cơ bản Jenkins CI/CD.
Bảo mật hệ thống CI/CD và đảm bảo quá trình phát triển phần mềm diễn ra liền mạch với Trình quản lý dữ liệu bí mật Locker Secrets Manager. Đây là công cụ lưu trữ và kiểm soát quyền truy cập vào token, mật khẩu, chứng chỉ và khóa mã hóa thông qua Locker UI, CLI hoặc SDK một cách dễ dàng nhất.