[CI/CD] Hướng dẫn cài đặt Jenkins trên Ubuntu 20.04

Jenkins là gì? Đối với những kỹ sư và lập trình viên làm việc trong môi trường phát triển chuyên nghiệp, các công cụ hỗ trợ tạo ra các job chạy CI/CD là vô cùng cần thiết. Jenkins là một trong những công cụ như thế. Bài viết này, BKNET sẽ chia sẻ các kiến thức để tìm hiểu Jenkins và cách cài đặt Jenkins trên Ubuntu 20.04 đơn giản.

Cài đặt Jenkins trên Ubuntu 20.04

1. Jenkins là gì?

Jenkins là một phần mềm tự động hóa và là open source được viết bằng Java dùng để tự động thực hiện chức năng tích hợp liên tục (CI – Continuous Integration) và xây dựng các tác vụ tự động hóa. Nó được sử dụng để thực hiện các workflow CI/CD (gọi là các pipelines).

pipline jekins

Các pipelines tự động hóa quá trình test, report những thay đổi độc lập trong code base lớn. Ngoài ra, nó còn hỗ trợ việc tích hợp các nhánh riêng biệt của code thành một nhánh chính. Pipelines còn liên tục phát hiện các lỗi, build, tự động test, chuẩn bị code base cho việc deploy. Cuối cùng, các code được deploy đến container và máy ảo, cũng như bare metal và các server cloud.

Jenkins giúp tự động hóa các quy trình trong phát triển phần mềm, hiện nay được gọi theo thuật ngữ tích hợp liên tục. Jenkins là một phần mềm dạng server, chạy trên nền serlver với sự hỗ trợ của Apche Tomcat. Nó hỗ trợ hầu hết các phần mềm quản lý mã nguồn phổ biến hiện nay như Git, Maven, Gradle,…

Việc kích hoạt build dự án phần mềm bằng Jenkins có thể thực hiện bằng nhiều cách: dựa trên các lần commit trên mã nguồn theo các khoảng thời gian, kích hoạt qua các URL.

2. Tìm hiểu CI và CD trong Jenkins là gì?

CI- Continuous Integration

CI viết tắt của Continuous Integration là phương pháp phát triển phần mềm yêu cầu các thành viên trong team tích hợp công việc thường xuyên, mỗi ngày ít nhất một lần. Mỗi tích hợp được build tự động (gồm cả test) nhằm mục đihcs phát triển lỗi nhanh chóng. Và nó giúp cho quá trình làm việc được tích hợp và phát triển hiệu quả.

Quy trình làm việc của CI:

  • Tất cả các thành viên trong team dev sẽ bắt đầu pull code 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 để đảm bảo được chất lượng toàn bộ source code.
  • Sau khi thành viên code xong có thể làm việc commit vào branch của team.
  • Sau đó, các thành viên thực hiện cập nhật code mới từ repo về local repo.
  • Merge code sẽ sẽ giải quyết được conflict.
  • Xây dựng và đảm bảo code pass thông qua các tests ở local.
  • Commit code lên repo.
  • Các server CI sẽ theo dõi các thay đổi code từ repository và có thể tự động build/test. Sau đó, sẽ thông báo lại cho các thành viên trong team.

CD – Continuous Delivery

CD viết tắt của Continuous Delivery hay gọi đơn giản “chuyển giao liên tục” là quá trình triển khai tất cả thay đổi trong quá trình tự động test và deloy các code lên các môi trường staging và production. Ngoài ra, CD còn cho phép tự động hóa phần testing bên cạnh việc sử dụng units test. Với mục đích là thử nghiệm phần mềm liên tục để kiểm tra hệ thống trước khi public cho khách hàng.CI CD Jenkins

Các lỗi được giảm thiểu vì các bước kiểm tra đã được tích hợp vào Jenkins. Jenkins mô tả một trạng thái mong muốn và máy chủ tự động đảm bảo việc thực hiện nó. Ngoài ra, tốc độ release có thể được cải thiện khi mà quá trình deploy không còn bị hạn chế bởi việc giới hạn nhân sự. Cuối cùng, Jenkins giảm thiểu áp lực cho các nhóm phát triển và điều hành. Bởi vì họ không còn phải cho ra sản phẩm của mình vào giữa đêm hay cuối tuần nữa.

3. Jenkins hoạt động như thế nào?

Sau khi biết được Jenkins là gì và lịch sử phát triển của nó, biết được cách vận hành của Jenkins sẽ giúp chúng ta có cái nhìn sâu hơn về công cụ này. Jenkins chạy như một máy chủ trên nhiều nền tảng khác nhau: Windows, MacOS, Unix và đặc biệt là Linux. Jenkins yêu cầu Java 8 VM trở lên và có thể chạy trên Oracle JRE hay OpenJDK.

Thông thường, Jenkins vận hành như một Java servlet trong một máy chủ ứng dụng Jetty. Không những vậy, nó còn có thể chạy trên các ứng dụng Java khác như Apacha Tomcat. Gần đây, Jenkins đã được điều chỉnh để có thể vận hành trong một Docker Container.

Để vận hành Jenkins, các pipeline sẽ được tạo ra. Pipeline là một chuỗi các bước server Jenkins cần thực hiện cho các tác vụ của CI/CD. Chúng được lưu trữ trong một file văn bản Jenkinsfile. Jenkinfiles sử dụng cú pháp ngoặc nhọn, tương tự như JSON. Các bước trong pipline được khai báo dưới dạng câu lệnh có chứa tham số. Chúng được “chứa” trong các dấu ngoặc nhọn “{}”.

Sau đó, máy chủ Jenkins đọc các Jenkinsfile và thực hiện các câu lệnh, đẩy mã xuống pipeline từ source code. Một tệp Jenkinsfile có thể được tạo thông qua một GUI hoặc trực tiếp viết code.

4. Ưu điểm và nhược điểm của Jenkins

Như hầu hết mọi phần mềm, Jenkins cũng có những ưu và nhước điểm của nó.

Ưu điểm của Jenkins

  • Có thể được mở rộng bằng cách sử dụng các plugin. Điều này giúp Jenkins có thể thích nghi tốt với những thay đổi trong môi trường CNTT. Đồng thời, plugin cũng giúp Jenkins linh hoạt hơn và cũng phù hợp với hầu hết các môi trường, kể cả các hệ thống phức hợp và đám mây.
  • Với thời gian tồn tại lâu, được triển khai rộng rãi. Do đó, Jenkins được tìm hiểu rõ hơn, có nguồn tài liệu phong phú và cộng đồng to lớn. Điều này giúp Jenkins dễ được kiểm soát, cài đặt và các sự cố cũng được dễ dàng khắc phục.
  • Jenkins cùng với các plugins được xây dựng dựa trên Java – một doanh nghiệp được thẩm định cùng với một hệ sinh thái rộng lớn. Điều này giúp Jenkins có một nền tảng vững chắc với khả năng mở rộng lớn.

Nhược điểm của Jenkins

  • Mặc dù việc cài đặt Jenkins là tương đối đơn giản và dễ dàng. Production lại gây khó khăn cho người dùng và việc phát triển các pipeline bằng Jenkinsfile yêu cầu phải lập trình bằng ngôn ngữ khai báo riêng của nó. Đặc biệt, với các pipeline phức tạp thì việc lập trình, debug và bảo trì là tương đối khó khăn.
  • Hệ thống open source là một kiến trúc máy chủ đơn, giúp cho việc cài đặt trở nên dễ dàng. Tuy nhiên, nó lại giới hạn tài nguyên của máy tính, máy ảo hoặc container.
  • Jenkins không cho phép liên kết giữa các máy chủ nếu nó có thể ảnh hưởng đến hiệu năng. Việc này dẫn đến sự gia tăng số lượng các máy chủ Jenkins độc lập. Từ đó gây khó khăn cho việc quản lý trong một doanh nghiệp lớn.
  • Jenkins dựa trên các kiến trúc, công nghệ Java cũ, đặc biệt là các servlet và Maven. Ngay cả việc cài đặt Jenkins Docker vẫn yêu cầu Jenkins code và phần mềm trung gian servlet phải được gộp chung, duy trì kiến trúc của nó.
  • Ngoài ra, nó không được thiết kế để triển khai các công nghệ Java mới như Spring Boot hay GraalVM.

5. Các plugins trong Jenkins

Plugin là một cải tiến cho hệ thống Jenkins, được viết bằng Java. Nó giúp mở rộng khả năng của Jenkins và tích hợp Jenkins với các phần mềm khác. Plugin có thể được download từ kho lữu trữ Plugin Jenkins online. Hiện tại, cộng đồng Jenkins đang có sẵn khoảng 1500 plugins cho từng mục đích sử dụng khác nhau.jenkins plugins

6. Hướng dẫn cài dặt Jenkins trên Ubuntu 20.04

6.1 Cài đặt Java

Jenkins là một ứng dụng Java và yêu cầu cài đặt Java 8 trở lên trên hệ thống. Chúng tôi sẽ cài đặt OpenJDK 11 , triển khai mã nguồn mở của Nền tảng Java.

Chạy các lệnh sau với tư cách là root hoặc người dùng có đặc quyền sudo để cài đặt OpenJDK 11:

sudo apt update
sudo apt install openjdk-11-jdk

Khi quá trình cài đặt hoàn tất, hãy xác minh bằng cách kiểm tra phiên bản Java:

java -version

Đầu ra sẽ trông giống như sau:

openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)

6.2 Cài đặt Jenkins

Cài đặt Jenkins trên Ubuntu tương đối đơn giản. Chúng tôi sẽ kích hoạt kho lưu trữ Jenkins

Đầu tiên, thêm khóa kho lưu trữ vào hệ thống:

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

Sau khi thêm khóa, hệ thống sẽ trả về OK.

Tiếp theo, hãy thêm địa chỉ kho lưu trữ gói Debian vào sources.list của máy chủ:

sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

 

 

Bài viết này hữu ích như thế nào?

Hãy bấm vào ngôi sao để đánh giá!

Đánh giá trung bình 5 / 5. Số phiếu bầu: 123