Thứ hai, 24/07/2017 | 00:00 GMT+7

So sánh công cụ CI / CD: Jenkins, GitLab CI, Buildbot, Drone và Concourse

Tích hợp, phân phối và triển khai liên tục là các chiến lược được thiết kế để giúp tăng tốc độ phát triển và tung ra các sản phẩm có thể sử dụng được, đã được thử nghiệm tốt. Tích hợp liên tục khuyến khích các group phát triển sớm thử nghiệm và tích hợp các thay đổi của họ vào cơ sở mã dùng chung để giảm thiểu xung đột tích hợp. Phân phối liên tục dựa trên nền tảng này bằng cách loại bỏ các rào cản trên đường triển khai hoặc phát hành. Triển khai liên tục tiến thêm một bước nữa bằng cách triển khai mọi bản dựng tự động vượt qua bộ thử nghiệm.

Trong khi thuật ngữ trên chủ yếu liên quan đến các chiến lược và thực tiễn, công cụ phần mềm đóng một role lớn trong việc cho phép các tổ chức đạt được những mục tiêu này. Phần mềm CI / CD có thể giúp các group tiến hành các thay đổi mới thông qua một loạt các giai đoạn một cách tự động để giảm thời gian phản hồi và loại bỏ các rắc rối khỏi quy trình.

Trong hướng dẫn này, ta sẽ so sánh một số server tích hợp, phân phối và triển khai liên tục open-souce và miễn phí phổ biến được thiết kế để giúp phát triển phần mềm cộng tác dễ dàng hơn. Ta sẽ xem xét Jenkins, GitLab CI, Buildbot, Drone và Concourse.

Jenkins

Jenkins là một trong những server tích hợp liên tục open-souce sớm nhất và vẫn là lựa chọn phổ biến nhất được sử dụng ngày nay. Ban đầu là một phần của dự án Hudson , cộng đồng và cơ sở mã chia tách do xung đột nhãn hiệu với Oracle sau khi họ mua lại Sun Microsystems, nhà phát triển ban đầu. Hudson ban đầu được phát hành vào năm 2005, trong khi bản phát hành đầu tiên với tên Jenkins được thực hiện vào năm 2011.

Qua nhiều năm, Jenkins đã phát triển thành một hệ thống tự động hóa các việc liên quan đến phần mềm một cách mạnh mẽ và linh hoạt. Bản thân Jenkins chủ yếu đóng role là một khung công tác tự động hóa với nhiều logic quan trọng được thực hiện thông qua một thư viện các plugin. Mọi thứ từ lắng nghe các móc web hoặc xem repository đến xây dựng môi trường và hỗ trợ ngôn ngữ đều được xử lý bởi các plugin. Mặc dù điều này cung cấp rất nhiều tính linh hoạt, quy trình CI của bạn có thể phụ thuộc vào nhiều plugin của bên thứ ba, có thể rất dễ hỏng.

Luồng công việc của Jenkins - cũng được cung cấp thông qua một plugin - là một bổ sung tương đối mới, có sẵn kể từ năm 2016. Quy trình CI có thể được xác định theo cách khai báo hoặc theo thứ bậc bằng cách sử dụng ngôn ngữ Groovy trong các file trong chính repository hoặc thông qua các hộp văn bản trong web Jenkins Giao diện user . Một chỉ trích phổ biến đối với Jenkins là mô hình cấu hình tập trung vào plugin và khả năng xác định đường ống hoặc xây dựng các quy trình bên ngoài repository đôi khi có thể gây khó khăn cho việc sao chép cấu hình trên một version Jenkins khác.

Jenkins được viết bằng Java và được phát hành theo giấy phép của MIT. Làm theo hướng dẫn của ta về cách cài đặt Jenkins trên Ubuntu 16.04 để cấu hình server Jenkins cho dự án của bạn.

GitLab CI

GitLab CI là một công cụ tích hợp liên tục được tích hợp vào GitLab , một nền tảng công cụ phát triển và lưu trữ repository git. Ban đầu được phát hành dưới dạng một dự án độc lập, GitLab CI được tích hợp vào phần mềm GitLab chính với việc phát hành GitLab 8.0 vào tháng 9 năm 2015.

Quá trình CI / CD trong GitLab CI được xác định trong một file trong chính repository mã bằng cách sử dụng cú pháp cấu hình YAML. Sau đó, công việc được chuyển đến các máy gọi là máy chạy, dễ cài đặt và có thể được cung cấp trên nhiều hệ điều hành khác nhau.Khi cấu hình trình chạy, bạn có thể chọn giữa các trình thực thi khác nhau như Docker, shell, VirtualBox hoặc Kubernetes để xác định cách các việc được thực hiện.

Sự kết hợp chặt chẽ của GitLab CI với nền tảng repository GitLab có ý nghĩa rõ ràng về cách phần mềm được dùng . GitLab CI không phải là một lựa chọn cho các nhà phát triển sử dụng các nền tảng lưu trữ repository khác. Về mặt tích cực, chức năng tích hợp cho phép user GitLab cài đặt môi trường CI / CD mà không cần cài đặt và tìm hiểu một công cụ bổ sung. Thử nghiệm tự động có thể bắt đầu bằng cách bật một vài tùy chọn trong giao diện web, đăng ký máy chạy và thêm file định nghĩa đường ống vào repository . Mối quan hệ chặt chẽ cũng cho phép bạn chia sẻ người chạy giữa các dự án, tự động xem trạng thái bản dựng hiện tại trong repository lưu trữ và giữ bản dựng tạo tác bằng mã đã tạo ra chúng.

GitLab và GitLab CI được viết bằng Ruby và Go và được phát hành theo giấy phép MIT. Bạn có thể làm theo hướng dẫn của ta về cách cài đặt đường ống tích hợp liên tục với GitLab CI để tìm hiểu cách cấu hình chức năng này trên server GitLab của bạn.

Buildbot

Buildbot là một khung tích hợp liên tục cung cấp rất nhiều tính linh hoạt. Được phát hành lần đầu tiên vào năm 2003 như một giải pháp thay thế cho dự án Tinderbox của Mozilla, Buildbot được thiết kế chủ yếu như một cách để tự động hóa thử nghiệm xây dựng trên nhiều nền tảng.

Buildbot được phát hành với giấy phép GPL và được viết bằng Python sử dụng thư viện Twisted. Thay vì trừu tượng hóa ngôn ngữ cơ bản để đơn giản hóa cấu hình, cấu hình của Buildbot được viết hoàn toàn bằng Python. Điều này nghĩa là cấu hình có xu hướng phức tạp hơn đáng kể so với các hệ thống khác nhưng administrator có nhiều phạm vi hơn để thiết kế quy trình và quy trình làm việc lý tưởng của họ. Mỗi giai đoạn của quá trình xây dựng được tách biệt rõ ràng và có thể lập trình. Buildbot tự đặt mình như một khuôn khổ với các công cụ để xây dựng các quy trình tùy chỉnh của bạn , có thể so sánh với cách các khuôn khổ web cho phép bạn tạo các trang web tùy chỉnh.

Lịch sử của Buildbot với quyền là một nền tảng thử nghiệm xây dựng nghĩa là nó có hỗ trợ cho nhiều hệ điều hành và hệ thống kiểm soát version khác nhau. Tương tự như vậy, vì nó được thiết kế với mục đích kiểm tra open-souce , nên kiến trúc của nó cho phép user dễ dàng gửi nhân viên có nền tảng ưa thích của họ vào các dự án để mở rộng cơ sở kiểm tra có sẵn. User chỉ cần cài đặt một vài gói Python trên hệ thống và sau đó cung cấp thông tin xác thực cho dự án.

Để bắt đầu sử dụng Buildbot nhằm tự động hóa các quy trình xây dựng của bạn, hãy làm theo hướng dẫn của ta về cách cài đặt Buildbot trên Ubuntu 16.04 .

Máy bay không người lái

Drone là một nền tảng CI / CD hiện đại được xây dựng với kiến trúc ưu tiên container. Mặc dù các công cụ được thảo luận ở trên đều bao gồm tùy chọn chạy các bản dựng với Docker, nhưng quy trình làm việc dựa trên containers là cốt lõi trong thiết kế của Drone. Drone được viết bằng Go và được phát hành lần đầu tiên vào năm 2014 theo giấy phép Apache.

Drone hoạt động như một lớp điều phối trung gian giữa Docker và nhà cung cấp repository . Thay vì khởi động server CI / CD và sau đó kết nối vào dịch vụ lưu trữ hệ thống kiểm soát version sau đó, Drone yêu cầu thông tin account repository trước để khởi động các mô hình xác thực, user và quyền của riêng nó.Như với tất cả các quy trình CI của nó, bản thân Drone được chạy như một containers . Nó hỗ trợ nhiều chương trình backend database và nhà cung cấp repository , đồng thời có hỗ trợ tích hợp để cài đặt certificate TLS / SSL với Let's Encrypt để mã hóa truyền tải.

Drone tìm kiếm các file YAML đặc biệt trong repository để xác định đường ống. Cú pháp được thiết kế để dễ đọc và dễ diễn đạt để bất kỳ ai sử dụng repository đều có thể hiểu được quá trình tích hợp liên tục. Drone cung cấp một hệ thống plugin, nhưng nó được sử dụng khác với hệ thống trong Jenkins. Trong Drone, các plugin là các containers Docker đặc biệt được sử dụng để thả các việc được cấu hình trước vào quy trình làm việc thông thường. Điều này giúp bạn hoàn thành các việc thông thường dễ dàng hơn bằng cách gọi plugin với một vài tham số thay vì viết kịch bản toàn bộ quy trình theo cách thủ công. Theo nghĩa này, các plugin Drone hơi giống với các lệnh tiện ích Unix được thiết kế để thực hiện tốt một nhiệm vụ tập trung hẹp.

Để tìm hiểu cách cài đặt server Drone để tự động kiểm tra commit của bạn, hãy làm theo hướng dẫn cách cài đặt và cấu hình Drone trên Ubuntu 16.04 của ta .

Phòng chờ

Concourse là một nền tảng tích hợp liên tục tương đối mới được phát hành lần đầu tiên vào năm 2014. Cách tiếp cận của Concourse đối với không gian CI / CD khác biệt đáng kể so với các công cụ khác mà ta đã xem xét ở chỗ nó cố gắng đưa bản thân ra khỏi phương trình càng nhiều càng tốt, giảm thiểu nêu và trừu tượng hóa mọi yếu tố bên ngoài thành một thứ mà nó gọi là “tài nguyên”. Mục tiêu của triết lý này là làm cho server tích hợp hoàn toàn dùng một lần để các quá trình tương tự có thể dễ dàng chạy trên bất kỳ server Concourse nào.

Mọi phần của quá trình tích hợp liên tục được cấu thành từ các nguyên thủy cơ bản mô hình hóa các phần tử khác nhau của hệ thống. Mỗi phần của quy trình xác định rõ ràng các phần phụ thuộc của nó. Ví dụ: tác vụ đầu tiên có thể yêu cầu commit mới nhất đối với repository VCS trong khi các phần sau của quy trình có thể yêu cầu commit mới nhất đã vượt qua các giai đoạn trước đó . Phương pháp xây dựng đường ống này bằng cách lập bản đồ phụ thuộc chính xác của từng bước dẫn đến hành vi được xác định nghiêm ngặt.

Để loại bỏ thêm trạng thái ngẫu nhiên khỏi quy trình, Concourse không ngầm chuyển bất kỳ điều gì giữa các công việc và không cung cấp bất kỳ cách nội bộ nào để lưu trữ các tạo tác xây dựng. Tất cả thông tin cần thiết của giai đoạn tiếp theo phải được xác định rõ ràng và có khả năng được đẩy đến một cửa hàng bên ngoài để chuyển sang bước tiếp theo. Bằng cách yêu cầu các định nghĩa rõ ràng, Concourse hy vọng sẽ giảm thiểu số lượng các giả định và các biến chưa biết mà hệ thống phải tính đến.

Concourse được viết bằng Go và được phát hành theo giấy phép Apache. Nếu bạn muốn tìm hiểu cách cài đặt server Concourse để tự động hóa các quy trình tích hợp liên tục của bạn , hãy xem hướng dẫn của ta về cách cài đặt Concourse CI trên Ubuntu 16.04 .

Kết luận

Phần mềm tích hợp, phân phối và triển khai liên tục là các hệ thống tự động hóa phức tạp được thiết kế để làm cho các quy trình của bạn tin cậy và có thể lặp lại. Như bạn có thể thu thập từ các mô tả ở trên, có nhiều ý tưởng khác nhau về cách kiểm tra và phát hành tự động được thực hiện tốt nhất, với trọng tâm là các phần khác nhau của phương trình.Không có công cụ duy nhất nào đáp ứng được nhu cầu của mọi dự án, nhưng với rất nhiều giải pháp nguồn mở chất lượng cao có sẵn, rất có thể bạn sẽ tìm được một hệ thống đáp ứng nhu cầu của group mình.


Tags:

Các tin trước