Xem thêm

GoCD vs Jenkins: So sánh chi tiết

Huy Erick
Việc triển khai các chiến lược CI/CD giúp phân phối cập nhật phần mềm tới người dùng một cách tự động, tránh tương tác của con người. Điều này giảm thiểu các lỗi do con...

Việc triển khai các chiến lược CI/CD giúp phân phối cập nhật phần mềm tới người dùng một cách tự động, tránh tương tác của con người. Điều này giảm thiểu các lỗi do con người gây ra khi triển khai lên máy chủ và giảm thời gian chờ đợi của ứng dụng để sản phẩm được ra mắt nhanh hơn.

Sự khác biệt chính giữa CI & CD:

  • Liên tục tích hợp (Continuous Integration): tích hợp những commit từ các nhánh tính năng vào nhánh chính bằng cách liên tục chạy và hợp nhất các bài kiểm tra.
  • Liên tục triển khai (Continuous Deployment): triển khai mã kết hợp từ nhánh chính tới môi trường phát triển hoặc sản xuất.

CI/CD được cung cấp bởi các công ty như GitLab với GitLab CI, Github với Github Actions, Travis CI, Circle CI, Jenkins và GoCD. Hướng dẫn này nhằm định nghĩa và rút ra những khác biệt cốt lõi giữa GoCD và Jenkins sẽ giúp bạn lựa chọn công cụ phù hợp nhất cho dự án của bạn.

GoCD là gì?

GoCD là một máy chủ CI/CD mã nguồn mở và một phần mềm có thể triển khai vào các máy ảo, Docker, Kubernetes và các nhà cung cấp đám mây như Amazon Web Services (AWS), Google Cloud và Microsoft Azure. GoCD được phát triển bằng Java và Ruby.

Nó hoạt động trong mô hình master-slave, tức là sẽ có một máy đơn nhận lệnh điều khiển các máy khác.

GoCD Server đóng vai trò làm chủ và giao công việc cho các agent GoCD Server đóng vai trò làm chủ và giao công việc cho các agent

Trong sơ đồ trên, GoCD Server đóng vai trò làm chủ và giao công việc cho các agent.

Khái niệm cốt lõi của GoCD

GoCD có một số khái niệm cốt lõi, hiểu rõ các khái niệm này sẽ giúp xây dựng và tăng tốc độ các đường ống CI/CD một cách hiệu quả.

Hãy cùng tìm hiểu các khái niệm cốt lõi của GoCD thông qua ví dụ:

  • Task: Đây là đơn vị nhỏ nhất của công việc mà có thể thực hiện. Nó có thể là việc chạy một tập lệnh shell, sử dụng công cụ xây dựng như Maven/Gradle hoặc chạy các bài kiểm tra đơn vị bằng một lệnh.
  • Job: Một nhóm các task được gọi là job. Giả sử chúng ta có một công việc gọi là phân tích mã tĩnh (kiểm tra phức tạp thành phần và kiểu dáng mã bằng các công cụ như SonarQube hoặc Checkstyle).

Trong trường hợp này, công việc có thể được chia thành nhiều task như sau:

  • Task 1: Lấy mã từ Git
  • Task 2: Chạy công cụ phân tích mã tĩnh (SAT)
  • Task 3: Kiểm tra kết quả từ công cụ SAT có đáng tin cậy không
  • Task 4: Dọn dẹp các tạo vật do SAT tạo ra

GoCD Job GoCD Job

Một công việc được cho là thất bại nếu bất kỳ task nào trong công việc đó thất bại.

  • Stage: Một stage là một nhóm công việc. Như đã đề cập ở trên, trong công việc phân tích mã tĩnh, có thể có các công việc khác như chạy các bài kiểm tra tự động cấp cuối (end-to-end) bao gồm nhiều task khác. Các công việc trong stage có thể độc lập với nhau.

GoCD Stage

  • Pipeline: Một nhóm các stage tạo thành một pipeline. Pipeline có thể phụ thuộc vào trạng thái hoàn thành của công việc trước đó. Điều này có nghĩa là, như được hiển thị trong biểu đồ dưới đây, nếu "Stage Kiểm tra mã và Kiểm tra Đơn vị" thất bại, "Stage Triển khai" sẽ không bắt đầu.

GoCD Pipeline

Làm thế nào để kích hoạt pipeline CI/CD?

Pipeline CI/CD được kích hoạt hoặc bắt đầu dựa trên các sự kiện chỉ ra khi công việc, task, stage hoặc pipeline bắt đầu.

Một sự kiện kích hoạt sẽ khởi chạy việc thực thi của một pipeline. Có các loại kích hoạt sau:

  • Kích hoạt commit Git: Nếu chúng ta gộp các thay đổi từ nhánh tính năng vào nhánh chính, đây có thể được coi là một sự kiện. Sự kiện này có thể kích hoạt pipeline CI/CD.
  • Kích hoạt theo thời gian: Nếu chúng ta cấu hình một công việc/pipeline như chạy các bài kiểm tra vào khoảng thời gian cụ thể như hàng ngày vào lúc 8:00 sáng giờ UTC, thì các bài kiểm tra cần được chạy; điều này có thể được đạt được bằng cách sử dụng kích hoạt theo thời gian.

Bản đồ luồng giá trị

Bản đồ luồng giá trị là một tính năng của GoCD giúp mô phỏng toàn bộ quy trình CI/CD. Đây thực chất là một biểu đồ phụ thuộc mà mô tả luồng từ trái sang phải.

GoCD Value Stream Bản đồ luồng giá trị của GoCD

Hình ảnh trên là một ví dụ về bản đồ luồng giá trị GoCD giúp bạn hiểu rõ các phụ thuộc hướng lên và hướng xuống.

Các phụ thuộc hướng lên là các công việc cần thiết cho công việc tiếp theo được chạy cho đến khi hoàn tất.

GoCD Services

Trong hình ảnh trên, các phụ thuộc hướng lên là "Services". Các "Services" phải hoàn thành thành công trước khi chạy công việc tiếp theo được gọi là "Build".

Các phụ thuộc hướng xuống là các công việc có thể được chạy độc lập mà không phụ thuộc vào công việc trước.

GoCD Environment 2 Hình ảnh chỉ có Môi trường 2

Trong hình ảnh chỉ có Môi trường 2, không có công việc nào được gọi là "Môi trường 1", điều này có nghĩa là công việc "Môi trường 2" có thể chạy mà không phụ thuộc vào "Môi trường 1".

Integrate BrowserStack Automate với GoCD

Jenkins là gì?

Jenkins là một công cụ CI/CD mã nguồn mở có thể được sử dụng để tự động hóa các công việc xây dựng, kiểm tra và triển khai phần mềm. Nó được phát triển hoàn toàn bằng Java. Jenkins cũng tuân theo kiến trúc master-slave, trong đó có một nút chủ gán nhiệm vụ cho các nút con.

Khái niệm cốt lõi của Jenkins

Kiểm tra liên tục với Jenkins CI có ba khái niệm chính giúp xây dựng một chuỗi công việc. Một chuỗi công việc là một định nghĩa mà người dùng có thể chỉ định công việc cần thiết để kiểm tra, phát triển và triển khai.

  • Bước (Step): Đây là đơn vị nhỏ nhất của công việc có thể thực hiện. Nó có thể đơn giản như Checkout mã từ Quản lý Mã Nguồn (SCM) như Git.

Checkout mã từ GIT

  • Giai đoạn (Stage): Một nhóm các bước tạo thành một giai đoạn. Giả sử, nếu các bài kiểm tra đơn vị cần được chạy cho dự án, đầu tiên cần kiểm tra mã nguồn và sau đó chạy các bài kiểm tra sử dụng các công cụ phù hợp.

Stage 1

  • Chuỗi công việc (Pipeline): Một nhóm các giai đoạn tạo thành một chuỗi công việc, giúp trong việc triển khai liên tục (CD). Giả sử cần triển khai một ứng dụng Java trong môi trường sản xuất, sau đây là các giai đoạn cần có:
    • Giai đoạn 1 - Chạy bài kiểm tra
    • Giai đoạn 2 - Xây dựng tệp JAR và đẩy lên kho lưu trữ
    • Giai đoạn 3 - Triển khai

Kích hoạt Jenkins Pipeline

Có nhiều cách mà một pipeline Jenkins có thể được kích hoạt. Một số trong số chúng là:

  • Kích hoạt bằng commit Git: Khi có bất kỳ commit nào trên nhánh chính, kích hoạt một pipeline Jenkins.
  • Pipeline lập lịch: Một pipeline Jenkins có thể được cấu hình để chạy định kỳ vào một thời gian cụ thể hoặc khoảng thời gian cụ thể.
  • Kích hoạt từ xa: Một API/ webhook bên ngoài có thể được sử dụng để kích hoạt một pipeline Jenkins.

Xem pipeline Jenkins

Các pipeline đã xây dựng có thể được xem dưới dạng các giai đoạn hoặc biểu đồ trong giao diện người dùng (UI) của Jenkins. Điều này giúp hiểu cách giai đoạn được sắp xếp trong một pipeline cụ thể và giúp người dùng dễ hiểu luồng của pipeline. Jenkins hiện có hai giao diện người dùng. Giao diện cổ điển là giao diện mà ban đầu đã có từ khi ra đời và giao diện Blue Ocean cung cấp giao diện sạch hơn để xem các pipeline.

Giao diện cổ điển Jenkins Giao diện cổ điển Jenkins

Giao diện Blue Ocean Jenkins Giao diện Blue Ocean Jenkins

Sự khác biệt cốt lõi giữa GoCD và Jenkins

Một cách tổng quan, GoCD và Jenkins đều là các công cụ CI/CD giúp việc của bạn được hoàn thành. So sánh Jenkins vs GoCD giúp bạn hiểu rõ các khác biệt cốt lõi của chúng.

Tham số so sánh GoCD Jenkins
CI liên tục Được xây dựng cho CI liên tục. Cần cài đặt plugin cho các tác vụ khác Được xây dựng đặc biệt với triển khai liên tục
Hỗ trợ ngôn ngữ Ruby và JavaScript thông qua plugin Hỗ trợ một phần Ruby và JavaScript
Hỗ trợ plugin Chỉ có một số plugin có sẵn Có rất nhiều plugin cho nhiều trường hợp sử dụng
Cộng đồng Cộng đồng nhỏ Cộng đồng lớn
Bắt đầu như thế nào Hướng dẫn bắt đầu của GoCD là một nơi tốt Jenkins cung cấp một trình hướng dẫn để giúp bạn cài đặt plugin và thiết lập công việc đầu tiên
Giao diện người dùng Tốt nhưng cần cải thiện Giao diện dễ nhìn và thân thiện với người dùng

Những điểm cần lưu ý

Khi so sánh GoCD vs Jenkins, Jenkins là một dự án mã nguồn mở từ khi ra đời vào năm 2011 trong một giai đoạn mà nhiều công ty phần mềm đang chuyển dần sang phương pháp DevOps, nó đã được nhiều tổ chức tiếp nhận và nhiều dự án sử dụng nó.

So sánh chi tiết GoCD và Jenkins

Khi đạt đến tự động hoá, Jenkins cung cấp các plugin giúp chạy bộ kiểm tra, thu thập kết quả dashboard và cung cấp chi tiết về lỗi.

  • Chạy bộ kiểm tra tự động: Jenkins cung cấp plugin cho các framework kiểm tra như Selenium, Cucumber, Appium, Robot framework, vv. Những cái này có thể được tích hợp vào các đường ống CI để chạy các kiểm tra tự động cho mỗi lần xây dựng.
  • Cung cấp xu hướng: Jenkins theo dõi kết quả và hiển thị chúng dưới dạng biểu đồ xu hướng. Điều này cung cấp một cái nhìn tốt hơn về cách các bài kiểm tra đã thực hiện trong quá khứ.
  • Hiển thị chi tiết về lỗi kiểm tra: Kết quả kiểm tra được liệt kê và ghi lại các lỗi với kết quả kiểm tra.

Về GoCD, mặc dù nó đã có sẵn từ năm 2007, nhưng nó mới được công khai mã nguồn vào năm 2014. Điều này là nguyên nhân khiến nó ít được tiếp nhận, có cộng đồng nhỏ hơn và số lượng plugin ít hơn.

Khi chúng ta so sánh Jenkins vs GoCD, Jenkins đã được thử nghiệm và sử dụng bởi các công ty như Facebook, Oracle, Netflix, Lyft, vv. So sánh GoCD vs Jenkins trên đây nên đưa ra cho bạn một cái nhìn rõ ràng về sự khác biệt và giúp bạn lựa chọn công cụ CI/CD cho công việc của mình.

Dù bạn chọn công cụ CI/CD nào, bạn có thể nâng cao đường ống CI/CD của mình bằng cách tự động hóa kiểm tra trên mạng lưới Selenium Cloud của BrowserStack với hơn 3000 trình duyệt và thiết bị thực sự, và tận dụng tích hợp với các công cụ CI/CD mạnh mẽ nhất hiện nay.

Hãy thử BrowserStack ngay!

1