Đối với những người quan tâm đến tự động hóa các tác vụ, việc hiểu rõ về Jenkins là không thể phớt lờ. Nếu bạn đang tìm kiếm thông tin về khái niệm này, hãy không bỏ qua các kiến thức mà bài viết dưới đây giới thiệu.
Định nghĩa Jenkins là gì?
Jenkins là một ứng dụng mã nguồn mở được thiết kế để thực hiện các chức năng liên tục tích hợp (còn được biết đến là CI – Continuous Integration) và có khả năng tự động hóa các nhiệm vụ xây dựng. Nó tích hợp một cách linh hoạt với mã nguồn từ tất cả các thành viên trong nhóm, giúp quá trình tích hợp trở nên nhanh chóng và liên tục. Jenkins theo dõi quá trình thực thi và trạng thái của mã nguồn thông qua các bước kiểm thử, tạo điều kiện để sản phẩm chạy một cách ổn định hơn. Điều này mang lại lợi ích lớn cho việc phát triển phần mềm, đảm bảo rằng sản phẩm luôn ổn định và có chất lượng cao.
- Cách thức hoạt động của Jenkins
Quá trình hình thành Jenkins là gì?
Kohsuke Kawaguchi, một lập trình viên Java, đã trải qua những thời kỳ khó khăn khi mã nguồn mà ông viết thường xuyên gặp sự cố khi triển khai. Điều này đã đặt ra nhu cầu cần có một cách để kiểm tra mã nguồn trước khi triển khai, nhằm đảm bảo tính ổn định của mã trước khi đưa vào hoạt động. Đáp ứng với nhu cầu này, ông đã phát triển một hệ thống tự động hóa trên server của mình, mang tên Hudson. Hudson cho phép Java kiểm tra trạng thái của mã nguồn trước khi triển khai, giúp đảm bảo rằng mã có khả năng hoạt động mà không gặp lỗi.
Với sự thành công của Hudson tại Sun và sự phổ biến trong cộng đồng mã nguồn mở, nó đã trở thành một công cụ quan trọng được nhiều công ty áp dụng. Tuy nhiên, vào năm 2011, khi Oracle mua lại Sun, một số mối quan tâm và xung đột với cộng đồng nguồn mở đã nảy sinh. Kết quả là, dự án Jenkins đã được tách ra (forked) từ Hudson. Cả Hudson và Jenkins tiếp tục tồn tại, nhưng Jenkins đã trở nên phổ biến hơn rất nhiều trong cộng đồng phần mềm nguồn mở.
Đến năm 2014, Kohsuke Kawaguchi đã trở thành Giám đốc Công nghệ (CTO) của CloudBees, một công ty chuyên cung cấp các sản phẩm dựa trên nền tảng Jenkins. Sự đóng góp của ông đã giúp đưa Jenkins thành một công cụ quản lý mã nguồn và triển khai phần mềm mạnh mẽ, và CloudBees đã tận dụng thành công nền tảng này để cung cấp các sản phẩm và dịch vụ trong lĩnh vực quản lý và triển khai mã nguồn mở.
Tìm hiểu về CI và CD trong Jenkins
Về CI
CI là tên viết tắt của Continuous Integration và nó 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 những thành viên có trong team lại một cách nhanh chóng hơn. Trong đó, chu trình làm việc của nó như sau:
- Các thành viên ở trong team dev sẽ bắt đầu pull code mới nhất từ repo về branch để có thể thực hiện được các yêu cầu chức năng nhất định.
- Quá trình lập trình và test code để có thể đảm bảo được mọi chất lượng với chức năng cũng như toàn bộ source code.
- Các thành viên code xong thì sẽ làm cho việc commit vào branch develop của team.
- Các thành viên sẽ cập nhật code mới ngay từ repo về local repo.
- Merge code sẽ giải quyết được conflict.
- Build và chú trọng đảm bảo code pass thông qua các tests ở dưới local.
- Commit code lên repo.
- Các máy chủ CI sẽ lắng nghe các thay đổi code từ repository và có thể tự động build/test. Sau đó, đưa ra những thông báo lại cho các thành viên.
CI trong Jenkins là gì?
Về CD
Continuous Delivery (CD) là viết tắt của Thuận Tiện Liên Tục: Đây là một phương pháp chuyển giao liên tục, kết hợp nhiều kỹ thuật để thực hiện kiểm thử tích cực cho mã nguồn trên môi trường staging. Qua quá trình này, đảm bảo rằng mã nguồn đã được xem xét và kiểm thử kỹ lưỡng trước khi triển khai lên môi trường production.
Cách thức hoạt động của Jenkins là gì?
Jenkins được cung cấp các gói lưu trữ Java 8 WAR và các gói cài đặt cho các hệ điều hành phổ biến thông qua Homebrew, Docker images và mã nguồn. Mã nguồn chủ yếu của Jenkins là Java, bao gồm các tệp Croovy, Ruby và Antlr. Người dùng có thể chạy Jenkins dưới dạng War độc lập hoặc như một servlet trong máy chủ ứng dụng Java như Tomcat. Cả hai cách này đều tạo ra giao diện người dùng web và hỗ trợ cuộc gọi đến API Rest.
Khi khởi chạy Jenkins lần đầu tiên, chương trình sẽ tạo ra một tài khoản quản trị với mật khẩu ngẫu nhiên dài. Người dùng có thể nhập mật khẩu này vào trang web ban đầu để mở khóa cài đặt. Để vận hành Jenkins, người dùng cần tạo pipeline, là chuỗi các bước mà server Jenkins thực hiện cho nhiệm vụ CI/CD. Các pipeline được lưu trữ trong một tệp văn bản Jenkinsfile.
Jenkinsfile sử dụng cú pháp ngoặc nhọn, tương tự như JSON, để khai báo các bước trong pipeline với các tham số. Các bước này được đặt trong dấu ngoặc nhọn {}, sau đó Jenkins đọc Jenkinsfile và thực hiện các lệnh cũng như đẩy mã xuống pipeline từ mã nguồn. Tệp Jenkinsfile có thể được tạo ra thông qua giao diện người dùng hoặc viết mã trực tiếp.
Các Plugin trong Jenkins là gì?
Sau khi đã cài đặt, Jenkins cho phép bạn hoặc là lựa chọn danh sách plugin mặc định hoặc là lựa chọn plugin của riêng chính mình. Khi bạn đã lựa chọn với bộ plugin ban đầu của mình thì chỉ cần nhấp vào nút cài đặt và Jenkins sẽ được thêm vào chúng. Với màn hình chính Jenkins hiển thị các build queue hiện tại, thì trạng thái executor cung cấp cho các liên kết để tạo ra các mục mới, quản lý cho người dùng, xem lại lịch sử xây dựng, chế độ xem tùy chỉnh, quản lý cho Jenkins và quản lý các thông tin đăng nhập.
Jenkins được sử dụng ngày càng phổ biến
Một Jenkins job mới có thể được thiết lập để thực hiện bất kỳ loại công việc nào trong sáu danh mục khác nhau, và bạn cũng có khả năng tự tạo thêm thư mục để tổ chức và sắp xếp các job bên trong. Trong quá trình quản lý Jenkins, có tổng cộng 18 tác vụ khác nhau mà bạn có thể thực hiện thông qua trang “Manage Jenkins”. Thông thường, các tùy chọn này bao gồm cả khả năng mở giao diện dòng lệnh để thực hiện các thao tác.
Tuy nhiên, điều đáng chú ý là bạn hoàn toàn có thể xem xét và điều chỉnh các pipeline và quy trình công việc để cải thiện tính chính xác và hiệu suất của các đoạn mã script cụ thể. Điều này mang lại cho bạn sự linh hoạt trong việc tối ưu hóa quá trình làm việc của Jenkins theo các yêu cầu cụ thể của dự án hoặc tổ chức của bạn.
Kiến thức mở rộng: Jenkins pipeline và Jenkinsfile
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.
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.
Và, các nội dung có chưa trong Jenkinsfile sẽ bao gồm:
- Trường pipeline{} là một thành phần bắt buộc được sử dụng để có thể khai báo pipeline ở trong jenkinsfile.
- Trường agent được sử dụng để khai báo cho môi trường được thực hiện, nếu như cấu hình là any thì Jenkins có thể sử dụng được bất kỳ agent nào đang hiện có ở trên hệ thống.
- Với trường environment{}, thì nó được sử dụng để thực hiện khai báo cho các biến môi trường cần thiết nhất.
- Trường stages {} chuyên sử dụng để khai báo những giai đoạn con có bên trong pipeline.
- Trường post{}, nó sẽ được dùng để thực thi ngay sau khi các stage hoàn tất được các công việc đã được chỉ định. Trong Jenkinsfile trên, sau khi các stage đã thực hiện workspace thì sẽ được xóa để tránh cho jenkins không bị lỗi trong lần thực thi pipeline tiếp theo.
Cách thức hoạt động của Jenkins
Nhược điểm của Jenkins là gì?
Mặc dù quá trình cài đặt Jenkins được thực hiện một cách dễ dàng và đơn giản, nhưng khi áp dụng trong môi trường sản xuất, người sử dụng thường phải đối mặt với những thách thức đáng kể. Điều này xuất phát từ việc triển khai pipeline thông qua Jenkinsfile, yêu cầu người dùng phải có kỹ năng lập trình sử dụng các ngôn ngữ đặc biệt mà Jenkins hỗ trợ.
Hệ thống mã nguồn mở, mặc dù mang lại sự đơn giản trong quá trình cài đặt, lại mang theo một số hạn chế. Nó có thể giới hạn tài nguyên cho máy tính, máy ảo hoặc container, đặt ra những thách thức về khả năng mở rộng. Jenkins, trong trường hợp này, không thể tự nhiên kết nối giữa các máy chủ một cách linh hoạt, vì điều này có thể ảnh hưởng đến hiệu suất của hệ thống.
Kiến trúc của Jenkins phản ánh sự phụ thuộc vào các công nghệ Java cổ điển, sử dụng servlet và Maven. Điều này có nghĩa là Jenkins có thể hiệu quả trong môi trường cổ điển, nhưng cũng có thể gặp khó khăn khi tích hợp với các công nghệ mới và hiện đại.
Tổng kết
Trong nội dung này, blog đã tổng hợp tất cả các thông tin liên quan đến Jenkins. Chúng tôi mong rằng, sau khi xem xét những kiến thức này, độc giả sẽ có khả năng hiểu rõ hơn về Jenkins và nắm bắt được cách nó hoạt động.