1. Mở đầu

Gần đây, mình mới được nhận một task khám phá và tích phù hợp CI/CD cho dự án công trình đang làm. Nếu khách hàng nào đang từng tìm hiểu về CI/CD rồi thì có lẽ rằng sẽ thấy sự quan trọng của bài toán tích thích hợp nó vào trong vượt trình cải tiến và phát triển phần mềm. Tốt nói nôm na là nó sẽ đảm nhiệm việc auto build, chạy kiểm tra và thực hiện code khi tất cả thay đổi. Qua một tuần ngồi vọc vạch, tìm hiểu trên mạng thì cũng hiểu rằng Jenkins bao gồm một công cụ có thể hỗ trợ để tạo ra những job chạy CI với CD.

Bạn đang xem:

CI/CD - Continuous Intergration/Continuous Delivery

Đầu tiên, nói lại về CI/CD một chút. CI tuyệt Continuous Integration, là phương thức phát triển ứng dụng yêu cầu những thành viên của team tích hợp các bước của họ thường xuyên, hàng ngày ít tuyệt nhất một lần. Từng tích vừa lòng được build tự động hóa (bao tất cả cả test) nhằm phát hiện nay lỗi sớm nhất có thể có thể. Và tất nhiên giúp cho vấn đề tích hợp cùng phát triển phần mềm trở bắt buộc nhanh và hiệu quả hơn.

Tiếp đến, CD hay không hề thiếu là Continuous Delivery (tạm dịch là bàn giao liên tục), là quá trình triển khai vớ cả chuyển đổi về code lên môi trường xung quanh test hoặc staging. Continuous Delivery cho phép auto hóa phần testing kề bên việc sử dụng unit test, kiểm tra ứng dụng qua nhiều thước đo trước lúc triển khai mang lại khách hàng.

Jenkins là gì?

Là một áp dụng Web mã mối cung cấp mở được viết bởi Java, đóng vai trò máy chủ build & test của khối hệ thống tích phù hợp liên tục. Jenkins hoàn toàn có thể kết thích hợp được với hầu như các chế độ khác của khối hệ thống tích hợp thường xuyên với nhiều nền tảng khác nhau. Ngoài ra, xã hội sử dụng Jenkins không nhỏ nên cũng tương đối dễ trong việc áp dụng và hỗ trợ khi gặp mặt khó khăn.

2. áp dụng Jenkins để thông số kỹ thuật CI/CD

Trở lại bài toán đưa ra lúc đầu, cụ thể yêu mong như sau: Khi 1 PR bắt đầu được tạo, Jenkins đã bắt sự kiện với trigger để chạy job CI, CI job sẽ chạy Unit Test, checkstyle code cùng report kết quả. Khi PR được (merged), thì job CD sẽ chạy deploy code bắt đầu lên server test và chỉ việc chờ tới khi có thông báo deploy thành công trên Chatwork là hoàn thành :v.

2.1. Setup Jenkins

Jenkins được viết bởi Java nên trước khi cài bạn cần cài đặt Java mang đến máy tính của người tiêu dùng nhé. Bước đầu thôi nào!

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 universesudo apt-get updatesudo apt-get install jenkins -yĐể truy cập vào Jenkins, vào browser cùng nhập địa chỉ http://localhost:8080. Tiếp sau là bước setup cho lần đầu khởi hễ Jenkins. Nói thông thường cũng không tồn tại gì quánh biệt, chỉ gồm bước download plugin thì nên click vào "Install suggested plugins" thôi.

Ở đây bọn họ còn cần được sử dụng Github webhook để trigger hồ hết sự kiện như chế tác PR hoặc merge PR, nhưng mà webhook cần được có một public domain nhằm hoạt động. Các bạn có thể dùng những tool nhằm public cổng 8080 bên trên local thành public domain. Ví như ngrok.com và tuân theo hướng dẫn hoặc chạy lệnh ssh -R 80:localhost:8080 ssh.localhost.run.

2.2. Thông số kỹ thuật CI

Trước hết họ cần biết được lúc nào trên repo bao gồm một pull request new được tạo ra để chạy CI. Để có tác dụng được vấn đề đó cần nhờ cho một plugin của Jenkins là GitHub Pull Request Builder. Họ sẽ vào phần cai quản lí plugin: Manage Jenkins > Manage Plugins > Tab Available, tìm kiếm và click "Install without restart".

*
Bước 1: chế tạo ra webhook trên repo: Vào setting webhook, chọn showroom webhook. Trên payload url, điền cùng với format sau: /ghprbhook/ ví dụ: http:/my-domain.com/ghprbhook/. Content type chọn application/json cùng thêm Secret trường hợp cần. Sau cuối tại mục action chọn Issue comments với 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 mang lại plugin.

Bước 3: tạo nên job mới. Trên mục Github project nhập links của repo vào đó. Tiếp theo, chọn GitHub Pull Request Builder, tích lựa chọn "Use github hooks for build triggering". Trong mục Advance Setting..., nhập whitelist branch khi bao gồm pull request mới được tạo. Cùng nếu muốn thay đổi tên hiện trên pull request khi job chạy thì chúng ta có thể setting vào 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 mang lại job.

Việc setting sẽ xong, bây chừ hãy thử tạo một pull request trên repo vào nhánh master và trải nghiệm.

*

2.3. Cấu hình CD

Thật rủi ro là github webhook chưa hỗ trợ cho chúng ta khi có sự kiện merge pull request. Do vậy cần thực hiện plugin Generic Webhook Trigger Plugin cùng phân tích payload của Github webhook khi gồm sự kiện merge. Ở đây, bọn họ cần kiểm soát 2 ngôi trường $.action="closed" và $.pull_request.merged=true.

Bước 1: sản xuất một webhook không giống với payload url như sau: /generic-webhook-trigger/invoke?token=my-token, trên mục action chọn Pull requests.

Bước 2: sinh sản job mới. ở đoạn Build Trigger, tích vào chọn Generic Webhook Trigger và setting như vào hình bên dưới đây.

Xem thêm: Kỹ Sư Qa Qc Là Gì - Mô Tả Công Việc Qa/Qc

*
Bước 3: Viết script mang đến 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." 3. Kết luậnTrên đây là nội dung bài viết hướng dẫn các cấu hình, tích hòa hợp CI/CD bằng Jenkins vào project. Rất ý muốn nhận được sự góp ý và share những chủ ý thêm của đầy đủ người. Thank all!