Part 1 - Gerrit Code Review with Jenkins CI : Introduction

Nhắc đến các hosted version control sites, có lẽ những cái tên GitHub, GitLab, Bitbucket, Google source ..vv đã không còn xa lạ với giới developer.

Chuỗi bài viết này mình sẽ giới thiệu với các bạn, một công cụ quản lý và review source code cực kỳ tốt, tuy không còn mới lạ nhưng cũng là cái tên ít được nhắc đến - đó là Gerrit. Cùng với đó là tích hợp với Jenkins CI để xây dựng nên một hệ thống quy trình CI(continuous integration) hoàn chỉnh.

Index

1. Gerrit là gì ?

gerrit_.png

Nếu bạn đã từng làm việc với Github, GItlab, Bitbucket thì khái niệm Gerrit sẽ không còn xa lạ gì. Cũng giống như vậy, Gerrit là một công cụ hỗ trợ việc quản lý và review source code dựa trên nền tảng web, sử dụng git làm version control, được phát triển tại Google bởi Shawn Pearce trong quá trình phát triển dự án Android.

Gerrit không đơn thuần chỉ là công cụ review mà nó có thể được sử dụng nó để xây dựng một server quản lý source code, giống như những gì mà github, gitlab ..vv đang làm.

Từ thuở sơ khai, Gerrit được viết bằng Python. Kế từ phiên bản 2.x, Gerrit có một sự lột xác hoàn toàn khi chuyển từ Python sang Java trên nền tảng J2EE servlet container. Gerrit là open source, nó hoàn toàn free và bạn có thể sử dụng nó làm công cụ quản lý và review source code cho team của mình.

Hiện nay, Android Open Source Project (AOSP) cũng sử dụng Gerrit làm công cụ quản lý version chính. Ngoài ra còn có các team lớn nhỏ như : CyanogenMod, Eclipse Foundation, LibreOffice, OpenStack,Qt ..vv

Home Page : https://www.gerritcodereview.com/


2. Gerrit tổ chức như thế nào ?

alt

Gerrit sử dụng Git làm source control , nó xây dựng một khối repository(màu xanh) - nơi lưu trữ main source (Authoritative Repository) và các commit cần được review từ phía Developers (Pending Changes).

Các developers sẽ Fetch source từ Authoritative Repository. Mỗi khi hoàn thành một task thay vì push lại repository này, họ phải push vào một Pending Changes repository. Điều này đảm bảo rằng mọi commit cần được Approve từ Reviewer(việc push back Authoritative Repository chỉ khi có permission đặc biệt). Một khi change đã được approved, reviewer có thể submit để merge change sang Authoritative Repository.

Trong một vài tổ chức team khác nhau, các commit pending changes này cũng có thể được auto verify bởi CI Build Server (eg : Jenkins) trước khi thực hiện verify bởi yếu tố con người (Reviewer) - điều này giúp cho developer và reviewer phát hiện được lỗi sớm nhất.


3. Review trong Gerrit

gerrit_comment.png

Một điểm+ dễ nhận thấy , Gerrit có cơ chế review rất trực quan. CommentReply comment được insert trên từng dòng code của files. Giúp cho việc phân tích và khả năng communicate tốt hơn.

Trong Gerrit, đánh giá chất lượng source của commit được thể hiện theo mức điểm -2 to +2 ( như hình dưới) . Ý nghĩa cụ thể như sau :

  • Label verify (thường được áp dụng cho auto verify - compile, passes basic unit tests):
    • -1 : Fails - compile error hoặc unit tests fail
    • 0 : No score - việc verification không được thực hiên.
    • +1
  • Code Review :
    • -2 : Mang ý nghĩa gặp phải lỗi lớn, horribly incorrect, buggy/broken.
    • -1 : Gặp lỗi nhỏ có vẻ không đúng ( mức độ nhỏ hơn).
    • 0 : No score
    • +1 : Có vẻ tốt, nhưng cần sự đồng quan điểm của vài người khác.
    • +2 : Dường như là tốt và được tất cả đồng quan điểm.

Gerrit cũng cho phép bạn thêm Reviewers, nhằm notify và assign công việc reviewing được tốt hơn. Nhờ vào đó reviewer cũng quản lý được các task của mình.

Các thông báo tương tác trong teamwork cũng được gửi qua mail với các nội dung tương ứng.

Selection_008.png

4. Jenkins

Cũng giống như Gerrit, Jenkins là một web application chạy trên nền J2EE, đóng vai trò là một máy chủ build & test hệ thống tích hợp liên tục ( Continuous Integration) .

Jenkins được viết bởi Kosuke Kawaguchi tại Sun và tiền thân có tên là Hudson, kể từ khi Oracle mua lại Sun vào năm 2010 thì bộ phận phát triển Hudson đã tách ra phát triển riêng và đặt tên là Jenkins như ngày nay.

Do được viết bằng Java, nên Jenkins có thể kết hợp được hầu hết các công cụ tích hợp của các nền tảng khác nhau. Home page : https://jenkins.io/

Những đặc điểm nổi trội của Jenkins :

  • Đa nền tảng.
  • Hỗ trợ hầu hết các công nghệ phần mềm.
  • Hỗ trợ đầy đủ với các hệ thống tích hợp khác dễ dàng thông qua plugin.
  • Đóng gói quy trình phát triển phần mềm một cách tự động.

(Hình minh họa bên dưới là flow mô tả tích hợp hệ thống Jenkins vs Gerrit)

gerrit-workflow-demo-infra2.png

Một số ví dụ, lợi ích mà Jenkins mang lại :

  • Deploy and build product đồng thời cho nhiều môi trường khác nhau(dev, test, staging, production).
  • Quản lý version build.
  • Run test tool, Unit test vv..
  • Phân tích thống kế định kỳ
  • Verify source code
  • vv...

5. Tổng kết

Vậy là mình đã đi qua các khái quát về Gerrit, mô hình tổ chức quản lý source, một vài đặc điểm trong review của Gerrit.

Giới thiệu qua về Jenkins, những đặc điểm và lợi ích mà nó mang lại trong hệ thống continuous integration.

Hy vọng sau phần này bạn đã có những kiến thức cơ bản về Gerrit vs Jenkins , để tiếp tục tìm hiểu trong bài tiếp theo Cài đặt và cấu hình Gerrit với basic authen .