Tích hợp liên tục (CI) sử dụng Jenkins

Jenkins là gì?

Jenkins là một máy chủ tích hợp liên tục (CI server) mã nguồn mở có khả năng điều phối một chuỗi các hành động giúp đạt được quy trình tích hợp liên tục (CI) theo cách tự động.

Jenkins miễn phí và được viết hoàn toàn bằng Java. Jenkins là một ứng dụng được sử dụng rộng rãi trên khắp thế giới với khoảng 300 nghìn lượt cài đặt và đang phát triển từng ngày.

Nó là một ứng dụng dựa trên máy chủ và yêu cầu một máy chủ web như Apache Tomcat. Lý do Jenkins trở nên nổi tiếng là vì nó giám sát các nhiệm vụ lặp đi lặp lại phát sinh trong quá trình phát triển một dự án. Ví dụ: nếu nhóm của bạn đang phát triển một dự án, Jenkins sẽ liên tục kiểm tra các bản build dự án của bạn và chỉ ra cho bạn những lỗi trong giai đoạn đầu phát triển của bạn.

Bằng cách sử dụng Jenkins, các công ty phần mềm có thể đẩy nhanh quá trình phát triển phần mềm của họ, vì Jenkins có thể tự động hóa việc build và thử nghiệm với tốc độ nhanh chóng. Jenkins hỗ trợ vòng đời phát triển hoàn chỉnh của phần mềm từ build, thử nghiệm, lập tài liệu phần mềm, triển khai và các giai đoạn khác của vòng đời phát triển phần mềm.

Tích hợp liên tục (CI)

Trong tích hợp liên tục (CI) sau khi commit code, phần mềm được build và thử nghiệm ngay lập tức. Trong một dự án lớn với nhiều nhà phát triển, commit code được thực hiện nhiều lần trong ngày. Với mỗi lần commit, code được build và thử nghiệm. Nếu thử nghiệm được thông qua, bản build đã được thử nghiệm để triển khai. Nếu việc triển khai thành công, mã sẽ được chuyển sang production. Commit, build, thử nghiệm và triển khai này là một quá trình liên tục và do đó có tên là tích hợp / triển khai liên tục (CI/CD).

Đường ống tích hợp liên tục (CI Pipeline) là một công cụ mạnh mẽ bao gồm một bộ công cụ được thiết kế để lưu trữ, giám sát, biên dịchkiểm tra code hoặc các thay đổi code, như:

  • Máy chủ tích hợp liên tục (Jenkins, Bamboo, CruiseControl, TeamCity, ...)
  • Công cụ kiểm soát source code (ví dụ: CVS, TFS, SVN, GIT, Mercurial, Perforce, ClearCase, ...)
  • Công cụ build (Make, ANT, Maven, Ivy, Gradle, ...)
  • Testing framework tự động hóa (Selenium, Appium, TestComplete, UFT, ...)

Lịch sử Jenkin

  • Kohsuke Kawaguchi, một nhà phát triển Java, làm việc tại SUN Microsystems, cảm thấy mệt mỏi với việc build code và sửa lỗi lặp đi lặp lại. Năm 2004, ông đã tạo ra một máy chủ có tên Hudson để tự động hóa tác vụ build và thử nghiệm.
  • Năm 2011, Oracle sở hữu Sun Microsystems đã tranh chấp với cộng đồng mã nguồn mở Hudson, vì vậy họ đã tách Hudson và đổi tên nó thành Jenkins.
  • Cả Hudson và Jenkins vẫn tiếp tục hoạt động độc lập. Nhưng trong khoảng thời gian ngắn, Jenkins đã có được rất nhiều dự án và những người đóng góp trong khi Hudson chỉ còn lại với 32 dự án. Cùng với thời gian, Jenkins trở nên nổi tiếng hơn, và Hudson không được duy trì nữa.

Tại sao nên sử dụng Tích hợp liên tục (CI) với Jenkins?

Một số người có thể nghĩ rằng cách phát triển phần mềm kiểu cũ là cách tốt hơn. Hãy cùng Jenkins tìm hiểu những ưu điểm của CI với ví dụ sau:

Chúng ta hãy tưởng tượng, có khoảng 10 nhà phát triển đang làm việc trên một kho lưu trữ source code được chia sẻ. Một số nhà phát triển hoàn thành nhiệm vụ của họ trong 25 ngày trong khi những nhà phát triển khác mất 30 ngày để hoàn thành.

Không có Jenkins Có Jenkins

Sau khi tất cả các nhà phát triển (dev) đã hoàn thành các nhiệm vụ được giao, họ sẽ đồng thời commit code của mình. Sau đó, build code, thử nghiệm và triển khai.

Chù kỳ commit code, build và thử nghiệm rất không thường xuyên và mỗi lần build được thực hiện sau nhiều ngày.

Mã được build và thử nghiệm ngay sau khi nhà phát triển (dev) commit code. Jenkins sẽ build và thử nghiệm code nhiều lần trong ngày.

Nếu build thành công thì Jenkins sẽ triển khai source code vào máy chủ thử nghiệm và thông báo cho nhóm triển khai.

Nếu bản build không thành công, Jenkins sẽ thông báo lỗi cho nhóm nhà phát triển.

Vì code được tạo cùng một lúc, một số nhà phát triển sẽ cần phải đợi cho đến khi các nhà phát triển khác hoàn thành để kiểm tra bản build của họ. Code được build ngay lập tức sau khi nhà phát triển commit code.
Việc cô lập, phát hiện và sửa lỗi cho nhiều lần commit không phải là một nhiệm vụ dễ dàng. Vì code được build sau mỗi lần commit của một nhà phát triển, nên thật dễ dàng để phát hiện code của ai đã khiến quá trình build bị lỗi.
Quá trình build và thử nghiệm source code hoàn toàn là thủ công, vì vậy có rất nhiều khả năng thất bại. Quá trình build và thử nghiệm tự động giúp tiết kiệm thời gian và giảm thiểu các khuyết tật.
Code được triển khai sau khi tất cả các lỗi được sửa và kiểm tra. Code được triển khai sau mỗi lần build và thử nghiệm thành công.
Chu kỳ phát triển chậm. Chu kỳ phát triển nhanh chóng. Các tính năng mới sẵn có hơn cho người dùng. Tăng lợi nhuận.

Case study thực tế về tích hợp liên tục (CI)

Tôi chắc rằng tất cả các bạn đều biết đến điện thoại Nokia cũ. Nokia đã từng thực hiện một quy trình gọi là build hàng đêm. Sau nhiều commit từ các nhà phát triển khác nhau trong ngày, phần mềm được build hàng đêm. Vì phần mềm chỉ được build một lần trong ngày nên việc cô lập, xác định và sửa lỗi trong một codebase lớn là một điều rất khó khăn.

Sau đó, họ đã áp dụng cách tiếp cận tích hợp liên tục (CI). Phần mềm được build và thử nghiệm ngay sau khi một nhà phát triển commit code. Nếu bất kỳ lỗi nào được phát hiện, nhà phát triển tương ứng có thể nhanh chóng sửa chữa lỗi đó.

Tích hợp liên tục (CI) hoạt động như thế nào?

Jenkins Plugins

Theo mặc định, Jenkins đi kèm với một số tính năng hạn chế. Nếu bạn muốn tích hợp cài đặt Jenkins của mình với các công cụ kiểm soát phiên bản như Git, thì bạn cần cài đặt các plugin liên quan đến Git. Trên thực tế, để tích hợp với các công cụ như Maven, Amazon EC2, bạn cần cài đặt các plugin tương ứng trong Jenkins của mình.

Jenkins Plugins

Ưu điểm của việc sử dụng Jenkins

  • Jenkins đang được quản lý bởi cộng đồng rất cởi mở. Hàng tháng, họ tổ chức các cuộc họp công khai và lấy ý kiến ​​từ công chúng để phát triển dự án Jenkins.
  • Cho đến nay khoảng 280 ticket đã được đóng và dự án phát hành ổn định ba tháng một lần.
  • Khi công nghệ phát triển, Jenkins cũng vậy. Cho đến nay Jenkins đã có khoảng 320 plugin được xuất bản trong cơ sở dữ liệu plugin của mình. Với các plugin, Jenkins thậm chí còn trở nên mạnh mẽ hơn và nhiều tính năng hơn.
  • Jenkins cũng hỗ trợ kiến ​​trúc dựa trên đám mây để bạn có thể triển khai Jenkins trên các nền tảng dựa trên đám mây.
  • Lý do tại sao Jenkins trở nên phổ biến là nó được tạo ra bởi một nhà phát triển dành cho các nhà phát triển.

Nhược điểm của việc sử dụng Jenkins

Mặc dù Jenkins là một công cụ rất mạnh, nhưng nó có những nhược điểm.

  • Giao diện của nó đã lỗi thời và không thân thiện với người dùng so với xu hướng giao diện người dùng hiện tại.
  • Mặc dù Jenkins được nhiều nhà phát triển yêu thích, nhưng việc duy trì nó không dễ dàng. Vì Jenkins chạy trên một máy chủ và yêu cầu một số kỹ năng như quản trị viên máy chủ để giám sát hoạt động của nó.
  • Một trong những lý do tại sao nhiều người không triển khai Jenkins là do nó khó cài đặt và cấu hình.
  • Tích hợp liên tục (CI) thường xuyên bị hỏng do một số thay đổi cài đặt nhỏ. Tích hợp liên tục sẽ bị tạm dừng và do đó cần một số nhà phát triển chú ý.

Kết luận

  • Trong tích hợp liên tục (CI), sau khi commit code, phần mềm được build và thử nghiệm ngay lập tức.
  • Jenkins là một máy chủ tích hợp liên tục (CI server) mã nguồn mở có khả năng điều phối một chuỗi các hành động.
  • Trước khi có Jenkins, tất cả các nhà phát triển (dev) đã hoàn thành các task được giao, họ sẽ commit code của mình cùng một lúc. Sau đó, build code, thử nghiệm và triển khai.
  • Khi có Jenkins, code được build và thử nghiệm ngay khi nhà phát triển commit code. Jenkin sẽ build và thử nghiệm code nhiều lần trong ngày.
  • Theo mặc định, Jenkins đi kèm với một số tính năng hạn chế. Nếu bạn muốn tích hợp cài đặt Jenkins của mình với các công cụ kiểm soát phiên bản như Git, thì bạn cần cài đặt các plugin liên quan đến Git.
  • Ưu điểm lớn nhất của Jenkins là nó được quản lý bởi cộng đồng, nơi tổ chức các cuộc họp công khai và lấy ý kiến ​​đóng góp từ công chúng để phát triển các dự án Jenkins.
  • Nhược điểm lớn nhất của Jenkin là giao diện của nó đã lỗi thời và không thân thiện với người dùng so với xu hướng giao diện người dùng hiện tại.
CI/CDJenkins
Bài Viết Liên Quan:
Hướng dẫn tạo User, Role và phân quyền trong Jenkins
Trung Nguyen 25/11/2020
Hướng dẫn tạo User, Role và phân quyền trong Jenkins

Bài viết này sẽ hướng dẫn bạn cách cài đặt, cấu hình plugin Role-based Authorization Strategy để tạo user, role và phân quyền trong Jenkins.

Hướng dẫn cài đặt plugin Git cho Jenkins
Trung Nguyen 23/11/2020
Hướng dẫn cài đặt plugin Git cho Jenkins

Bài viết này sẽ hướng dẫn bạn từng bước cài đặt plugin Git vào Jenkins. Tạo dự án đầu tiên trong Jenkins và cấu hình cho plugin Git.

Hướng dẫn cài đặt Jenkins trên Windows
Trung Nguyen 22/11/2020
Hướng dẫn cài đặt Jenkins trên Windows

Hướng dẫn đầy đủ và chi tiết từng bước cách tải, cài đặt, cấu hình mở khóa, cấu hình plugin cho Jenkins trên Windows.

Tích hợp liên tục (CI) là gì?
Trung Nguyen 22/11/2020
Tích hợp liên tục (CI) là gì?

Tích hợp liên tục (CI) là gì? Vì sao CI giúp tăng tốc quá trình phát triển, xây dựng phần mềm chất lượng tốt hơn và giảm thiểu các rủi ro.