Jenkins và CI/CD

chia sẻ 10/03/2020| 280

Jenkins là gì?

Jenkins là một mã nguồn mở (opensource) dùng để thực hiện chức năng tích hợp liên tục (gọi là CI – Continuous Integration) và xây dựng các tác vụ tự động hóa. Nó tích hợp các source code của các thành viên trong nhóm lại nhanh chóng, liên tục; theo dõi sự thực thi và trạng thái thông qua các bước kiểm thử (Integration testunits test) nhằm giúp sản phẩm chạy ổn định.

Hudson và Jenkins

Năm 2004, Kohsuke Kawaguchi, một nhà phát triển Java tại Sun cảm thấy mỏi vì các mã nguồn mở của mình thường xuyên bị lỗi. Vì vậy, Kawaguchi đã xây dựng một máy chủ tự động hóa cho chính server và cho Java có thể kiểm tra code trước khi deploy, được gọi là Hudson. Hudson trở nên phổ biến tại Sun và lan sang các công ty khác dưới dạng opensource.

Đến năm 2011, Oracle đã mua lại Sun gây nên sự tranh chấp mã nguồn mở với cộng đồng nguồn mở, Hudson lúc này được đổi tên thành Jenkins.

Năm 2014 Kawaguchi trở thành CTO của CloudBees, công ty cung cấp các sản phẩm giao hàng liên tục dựa trên nền tảng Jenkins.

Đến thời điểm hiện tại, các dự án sử dụng Jenkins vẫn hoạt động, các trang sử dụng Hudson đã đóng cửa vào ngày 31/01/2020.

CI là gì? CD là gì?

CI là viết tắt của Continuous Integration

Là tích hợp liên tục, nhằm liên tục tích hợp các source code của các thành viên trong team lại một cách nhanh chóng. Giúp kiểm soát được tình hình phát triển thông qua các bước kiểm thử unit tests, Integration tests.

Chu trình làm việc

  1. Bước đầu tiên, các thành viên trong team dev sẽ bắt đầu pull code mới nhất từ repo về branch để thực hiện các yêu cầu chức năng nhất định.
  2. Tiếp đó là quá trình lập trình và test code để đảm bảo chất lượng của chức năng cũng như toàn bộ source code.
  3. Thành viên code xong thì sẵn sàng cho việc commit vào branch develop của team.
  4. Thành viên cập nhật code mới từ repo về local repo
  5. Merge code và giải quyết conflict.
  6. Build và đảm bảo code pass qua các tests dưới local.
  7. Commit code lên repo
  8. Máy chủ CI lắng nghe các thay đổi code từ repository và có thể tự động build/test, sau đó đưa ra các thông báo (pass/failure) cho các thành viên.

CD là viết tắt của Continuous Delivery

Continuous Delivery là chuyển giao liên tục, là 1 tập hợp các kỹ thuật để triển khai tích hợp souce code trên môi trường staging ( một môi trường rất giống với môi trường production). Với cách này ta có thể đảm bảo source code được review, kiểm thử một cách tỉ mỉ trước khi deploy lên môi trường production.

Cách Jenkins hoạt động

Jenkins được phân phối dưới dạng lưu trữ WAR và dưới dạng các gói cài đặt cho các hệ điều hành chính, gói Homebrew, hình ảnh Docker và dạng mã nguồn. Mã nguồn chủ yếu là Java, với một vài tệp Groovy, Ruby và Antlr.

Bạn có thể chạy độc lập Jenkins WAR hoặc dưới dạng một servlet trong máy chủ ứng dụng Java như Tomcat. Trong cả hai trường hợp, nó tạo ra giao diện người dùng web và chấp nhận các cuộc gọi đến API REST của nó.

Khi bạn chạy Jenkins lần đầu tiên, nó sẽ tạo một người dùng quản trị với mật khẩu ngẫu nhiên dài, bạn có thể dán vào trang web ban đầu của nó để mở khóa cài đặt.

Các plugin của Jenkins

Sau khi cài đặt, Jenkins cho phép bạn chấp nhận danh sách plugin mặc định hoặc chọn plugin của riêng bạn.

Khi bạn đã chọn bộ plugin ban đầu của mình, hãy nhấp vào nút Cài đặt và Jenkins sẽ thêm chúng.

Màn hình chính của Jenkins hiển thị hàng đợi xây dựng hiện tại và trạng thái Executor và cung cấp các liên kết để tạo các mục mới (công việc), quản lý người dùng, xem lịch sử xây dựng, quản lý Jenkins, xem chế độ xem tùy chỉnh của bạn và quản lý thông tin đăng nhập của bạn.

Một mục Jenkins mới có thể là bất kỳ loại nào trong sáu loại công việc cộng với một thư mục để sắp xếp các mục.

Có 18 điều bạn có thể làm từ trang Manage Jenkins, bao gồm tùy chọn mở giao diện dòng lệnh. Tuy nhiên, tại thời điểm này, chúng ta nên xem xét các đường dẫn, đó là các quy trình công việc nâng cao thường được xác định bởi các tập lệnh.

Đường dẫn Jenkins

Khi bạn đã có cấu hình Jenkins, đã đến lúc tạo một số dự án mà Jenkins có thể xây dựng cho bạn. Mặc dù bạn có thể sử dụng giao diện người dùng web để tạo tập lệnh, nhưng cách tốt nhất hiện tại là tạo tập lệnh đường dẫn, có tên là Jenkinsfile và đặt nó vào kho lưu trữ của bạn. Ảnh chụp màn hình bên dưới hiển thị biểu mẫu web cấu hình cho một đường dẫn đa chức năng.

Như bạn có thể thấy, các nguồn nhánh cho loại đường dẫn này trong bản cài đặt Jenkins cơ bản có thể là kho Git hoặc Subversion, bao gồm GitHub. Nếu bạn cần các loại kho lưu trữ khác hoặc các dịch vụ lưu trữ trực tuyến khác nhau, hãy bổ sung các plugin phù hợp và khởi động lại Jenkins. Tôi đã thử, nhưng không thể nghĩ ra một hệ thống quản lý mã nguồn (SCM) mà đã không có một plugin Jenkins được liệt kê.

Blue Ocean, Jenkins GUI

Nếu bạn thích ứng dụng UI mới nhất và tuyệt vời nhất của Jenkins, bạn có thể sử dụng trình cắm Blue Ocean, cung cấp trải nghiệm người dùng đồ họa. Bạn có thể thêm trình cắm Blue Ocean vào bản cài đặt Jenkins hiện tại của mình hoặc chạy bộ chứa Jenkins / Blue Ocean Docker. Với Blue Ocean được cài đặt, menu chính Jenkins của bạn sẽ có thêm một biểu tượng:

Bạn có thể mở Blue Ocean trực tiếp nếu bạn muốn. Nó trong thư mục / màu xanh trên máy chủ Jenkins. Tạo đường ống ở Blue Ocean có đồ họa nhiều hơn một chút so với Jenkins đơn giản:

Docker Jenkins

Như tôi đã đề cập trước đó, Jenkins cũng được phân phối dưới dạng hình ảnh Docker. Quá trình này còn nhiều hơn nữa: Sau khi bạn chọn loại SCM, bạn cung cấp URL và thông tin đăng nhập, sau đó tạo một đường dẫn từ một kho lưu trữ duy nhất hoặc quét tất cả các kho lưu trữ trong tổ chức. Mỗi chi nhánh có Jenkinsfile sẽ nhận được một đường ống dẫn.

Đang chạy một hình ảnh Blue Ocean Docker, đi kèm với một vài plugin dịch vụ Git được cài đặt hơn danh sách mặc định của các nhà cung cấp SCM:

Khi bạn đã chạy một số đường ống, trình cắm Blue Ocean sẽ hiển thị trạng thái của chúng, như được hiển thị ở trên. Bạn có thể phóng to một đường ống riêng lẻ để xem các giai đoạn và các bước:

Bạn cũng có thể phóng to các nhánh (trên cùng) và các hoạt động (dưới cùng):

Tại sao nên sử dụng Jenkins?

Trình cắm Jenkins Pipeline mà chúng tôi đã sử dụng hỗ trợ trường hợp sử dụng tích hợp / phân phối liên tục (CICD) chung, có lẽ là cách sử dụng phổ biến nhất cho Jenkins. Có những cân nhắc chuyên biệt cho một số trường hợp sử dụng khác.

Các dự án Java là bản gốc của Disonêtre cho Jenkins. Chúng tôi đã thấy rằng Jenkins hỗ trợ xây dựng với Maven; nó cũng hoạt động với Ant, Gradle, JUnit, Nexus và Artifactory.

Có hai trường hợp sử dụng chính cho Jenkins và GitHub. Một là tích hợp xây dựng, hai là sử dụng xác thực GitHub để kiểm soát quyền truy cập vào Jenkins thông qua OAuth.

Jenkins hỗ trợ nhiều ngôn ngữ khác ngoài Java. Đối với C / C ++, có các trình cắm để ghi lại lỗi và cảnh báo từ bảng điều khiển, tạo tập lệnh xây dựng với CMake, chạy thử nghiệm đơn vị và thực hiện phân tích mã tĩnh. Jenkins có một số tích hợp với các công cụ PHP.

Mặc dù mã Python không cần phải được xây dựng (trừ khi bạn đang sử dụng Cython hoặc tạo bánh xe Python để cài đặt), thật hữu ích khi Jenkins tích hợp với các công cụ báo cáo và kiểm tra Python, như Nose2 và Pytest và chất lượng mã các công cụ như Pylint. Tương tự, Jenkins tích hợp với các công cụ Ruby như Rake, Cucumber, Brakeman và CI::Reporter.

Jenkins cho CI / CD

Nhìn chung, Jenkins cung cấp một cách đơn giản để thiết lập môi trường CI / CD cho hầu hết mọi tổ hợp ngôn ngữ và kho mã nguồn bằng cách sử dụng các đường ống, cũng như tự động hóa một số nhiệm vụ phát triển thông thường khác. Mặc dù Jenkins không loại bỏ nhu cầu tạo tập lệnh cho từng bước riêng lẻ, nhưng nó mang lại cho bạn cách nhanh chóng và mạnh mẽ hơn để tích hợp toàn bộ chuỗi công cụ xây dựng, kiểm tra và triển khai của bạn hơn là bạn có thể dễ dàng tự xây dựng.

_________________________________________________________

Website: https://staging.willandway.vn/

Fanpage: @willandway.cowell

CO-WELL Will & Way – Dịch vụ Tư vấn và Tuyển dụng nhân sự chất lượng trong nhiều lĩnh vực, đặc biệt là nhóm Việc làm IT.


Đăng trong Kiến thức IT chia sẻ

Tin tức khác

Tầm quan trọng của quyền riêng tư và tính toàn vẹn trong mạng máy tính lớn

Máy tính lớn (mainframe) là nền tảng cho nhiều hệ thống quan trọng, từ cơ sở dữ liệu ngân hàng đến hệ thống chính quyền địa ...

Xem thêm

Mẹo giúp trình duyệt Google Chrome chạy nhanh hơn

Sau một thời gian sử dụng, bạn nhận ra Google Chrome bị chậm dần khiến mọi thao tác trở nên trì trệ. Bạn sẽ tìm thấy ...

Xem thêm

Tại sao các “ông lớn công nghệ” lại trả tiền cho hacker?

Khi nhắc đến hacker, nhiều người sẽ nghĩ đến những kẻ chuyên khai thác lỗ hổng để tấn công các cá nhân hoặc doanh nghiệp. Trên ...

Xem thêm

Top 3 xu hướng ngôn ngữ lập trình năm 2020

Chúng ta đang sống trong thời đại của kỷ nguyên 4.0, nơi mà mọi thứ đều trong luồng vận động không ngừng để phục vụ những ...

Xem thêm