Jenkins là gì? Tại sao nên sử dụng Công cụ tích hợp liên tục (CI)?

Jenkins là gì?

Jenkins là một máy chủ Tích hợp liên tục mã nguồn mở được viết bằng Java để điều phối một chuỗi hành động nhằm đạt được quy trình Tích hợp liên tục theo cách tự động. Jenkins hỗ trợ vòng đời phát triển hoàn chỉnh của phần mềm từ xây dựng, thử nghiệm, lập tài liệu cho 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.

Jenkins là một ứng dụng được sử dụng rộng rãi trên toàn thế giới với khoảng 300 nghìn lượt cài đặt và ngày càng tăng. 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 xây dựng và thử nghiệm với tốc độ nhanh chóng.

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 phần mềm Jenkins trở nên phổ biến là vì tính năng 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 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 dựng dự án của bạn và chỉ cho bạn các lỗi trong giai đoạn đầu phát triển.

Tích hợp liên tục là gì?

Hội nhập liên tục là một quá trình tích hợp nhiều lần các thay đổi mã từ nhiều nhà phát triển trong một dự án. Phần mềm được kiểm tra ngay sau khi nhập mã. Với mỗi lần cam kết mã, mã sẽ được xây dựng và kiểm tra. Nếu quá trình kiểm tra đạt, bản dựng sẽ được kiểm tra để triển khai. Nếu triển khai thành công, mã sẽ được đưa vào sản xuất.

Cam kết, xây dựng, 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.

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

Jenkins 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 để chạy trên nhiều nền tảng khác nhau như Windows, Linux, macOS, Unix, v.v. Để sử dụng Jenkins, bạn cần tạo các quy trình bao gồm một loạt các bước mà máy chủ Jenkins sẽ thực hiện. Đường ống tích hợp liên tục của Jenkins là một công cụ mạnh mẽ bao gồm một bộ công cụ được thiết kế để chủ nhà, màn hình, biên dịchthử nghiệm mã hoặc thay đổi mã, như:

  • Máy chủ tích hợp liên tục (Jenkins, Bamboo, CruiseControl, TeamCity, và những người khác)
  • Công cụ kiểm soát nguồn (ví dụ: CVS, SVN, GIT, Mercurial, Perforce, ClearCase và các loại khác)
  • Xây dựng công cụ (Tạo, ANT, Maven, Ivy, Gradle, và những người khác)
  • Khung kiểm tra tự động hóa (Selenium, Appium, TestComplete, UFT và các loại khác)

Lịch sử Jenkins

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

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

Một số người có thể nghĩ rằng cách phát triển phần mềm theo kiểu cũ là cách tốt hơn. Hãy cùng tìm hiểu những lợi thế của CI với Jenkins qua 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ữ 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 người khác mất 30 ngày để hoàn thành.

Trước Jenkins Sau Jenkins
Sau khi tất cả các Nhà phát triển đã hoàn thành các nhiệm vụ viết mã được giao, họ thường cam kết tất cả mã của mình cùng một lúc. Later, Build được thử nghiệm và triển khai.

Cam kết mã được xây dựng và chu kỳ kiểm tra rất hiếm và một bản dựng duy nhất được thực hiện sau nhiều ngày.

Mã được xây dựng và kiểm tra ngay khi Nhà phát triển cam kết mã. Jenkins sẽ build và test code nhiều lần trong ngày

Nếu quá trình xây dựng thành công thì Jenkins sẽ triển khai nguồn vào máy chủ thử nghiệm và thông báo cho nhóm triển khai.

Nếu quá trình xây dựng không thành công thì Jenkins sẽ thông báo lỗi cho nhóm nhà phát triển.

Vì mã được xây dựng cùng một lúc nên một số nhà phát triển sẽ phải đợi cho đến khi các nhà phát triển khác viết xong mã để kiểm tra bản dựng của họ Mã được xây dựng ngay sau khi bất kỳ Nhà phát triển nào cam kết.
Việc tách biệt, phát hiện và sửa lỗi cho nhiều lần xác nhận không phải là một nhiệm vụ dễ dàng. Vì mã được xây dựng sau mỗi cam kết của một nhà phát triển nên rất dễ phát hiện mã của ai khiến quá trình xây dựng bị lỗi
Xây dựng mã và quá trình kiểm tra đều hoàn toàn thủ công nên có rất nhiều khả năng thất bại. Quá trình xây dựng và thử nghiệm tự động tiết kiệm thời gian và giảm thiểu lỗi.
Mã được triển khai sau khi tất cả các lỗi được sửa và kiểm tra. Mã được triển khai sau mỗi lần xây dựng 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.

Nghiên cứu trường hợp thực tế về Tích hợp liên tục

Tôi chắc chắn 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à xây dựng hàng đêm. Sau nhiều cam kết từ nhiều nhà phát triển khác nhau trong ngày, phần mềm được xây dựng hàng đêm. Vì phần mềm chỉ được xây dựng một lần trong ngày nên việc tách biệt, xác định và sửa lỗi trong một cơ sở mã lớn là một công việc vô cùng khó khăn.

Later, họ đã áp dụng phương pháp Tích hợp liên tục. Phần mềm được xây dựng và thử nghiệm ngay khi nhà phát triển commit code. Nếu phát hiện bất kỳ lỗi nào, nhà phát triển tương ứng có thể nhanh chóng khắc phục lỗi.

Nghiên cứu trường hợp thực tế về tích hợp liên tục

Plugin Jenkins

Theo mặc định, Jenkins có 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.

Plugin Jenkins
Tích hợp plugin trong Jenkins

Ư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 ​​đóng góp của công chúng để phát triển dự án Jenkins.
  • Cho đến nay, khoảng 280 vé đã được đóng và dự án xuất bản bả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 càng trở nên mạnh mẽ hơn và giàu tính năng hơn.
  • Công cụ 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 đám mây.
  • Lý do khiến Jenkins trở nên phổ biến là vì nó được nhà phát triển tạo ra dành cho 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 mẽ nhưng nó vẫn có những sai sót.

  • 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 UI 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 phải là điều dễ dàng vì Jenkins chạy trên máy chủ và yêu cầu một số kỹ năng của 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 khiến nhiều người không triển khai Jenkins là do nó gặp khó khăn trong việc cài đặt và cấu hình Jenkins.
  • Tích hợp liên tục thường xuyên bị gián đoạn do một số thay đổi cài đặt nhỏ. Quá trình tích hợp liên tục sẽ bị tạm dừng và do đó cần có sự chú ý của nhà phát triển.

Kết luận

  • Trong Tích hợp liên tục, sau khi commit mã, phần mềm được xây dựng và kiểm thử ngay lập tức
  • Jenkins được sử dụng để sắp xếp một chuỗi hành động để Tích hợp liên tục trong một dự án phần mềm
  • Trước Jenkins khi tất cả các Nhà phát triển đã hoàn thành nhiệm vụ mã hóa được giao, họ thường cam kết tất cả mã của mình cùng một lúc. Later, Build được thử nghiệm và triển khai.
  • Sau Jenkins, mã được xây dựng và kiểm tra ngay khi Nhà phát triển xác nhận mã. Jenkins sẽ build và test code nhiều lần trong ngày
  • Theo mặc định, Jenkins có 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. Cũng kiểm tra Công cụ thay thế Jenkins tốt nhất
  • Ưu điểm lớn nhất của Jenkins là nó được quản lý bởi cộng đồng 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 của Jenkins
  • Nhược điểm lớn nhất của Jenkins 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 UI hiện tại. Nếu bạn đang xem xét các tùy chọn khác có thể mang lại trải nghiệm người dùng hiện đại hơn, bạn có thể muốn khám phá một số công cụ tích hợp liên tục hàng đầu có sẵn.