Continuous Integration with Jenkins - Bài 1: Giới thiệu về CI và Jenkins

Xin chào các bạn. Nếu các bạn đang làm việc ở một môi trường phát triển phần mềm chuyên nghiệp và theo phương pháp Agile, các bạn chắc hẳn đã nghe tới từ khóa Continuous Integration (CI) - Tích hợp liên tục. Vậy nó là gì và thực hiện nó ra sao. Trong series này của mình sẽ: Bài 1: Giới thiệu về CI và Jenkins 1. Giới thiệu cơ bản về CI, các ưu điểm và khó khăn khi triển khai CI trong phát triển phần mềm 2. Giới thiệu về Jenkins - một open source cho CI server, vai trò và lợi ích

Bài 2: Cài đặt và cấu hình CI 1. Hướng dẫn cài đặt 2. Cấu hình 3. Kết hợp với một project thực tế: để xem Jenkins thực sự làm việc như thế nào và lợi ích thực tiện mà nó đem lại

Bài 3: (Cập nhật sau)

I. Continuous Integration (CI) - Tích hợp liên tục

1. Định nghĩa

Tích hợp liên tục (CI) là phương pháp phát triển phần mềm đòi hỏi các thành viên trong nhóm tích hợp công việc thường xuyên. Mỗi ngày, các thành viên đều phải theo dõi và phát triển công việc của họ ít nhất 1 lần. Việc này sẽ được một nhóm khác kiểm tra tự động, nhóm này sẽ tiền hành kiểm thử truy hồi để phát hiện lỗi nhanh nhất có thể. Cả nhóm thấy rằng phương pháp tiếp cận này giúp giảm bớt vấn đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn

2. Minh họa

  • Các developer thực hiện các ticket và đẩy code lên thư mực nơi sẽ lưu giữ code của Project.
  • Hệ thống CI sẽ lắng nghe và thực hiện kéo code về (server CI), build rồi test code.
  • Trong trường hợp build, test thất bại, các thành viên trong team sẽ nhìn thấy ngay được lỗi phát sinh và các developer sẽ chịu trách nhiệm sửa lỗi và đẩy code sửa lỗi đó lên repo.

3. Các đặc điểm thực tiễn của CI

  • Quản lý phiên bản (source control and version control ).
  • Tự động build bao gồm test.
  • Đôi ngũ phát triển thường xuyên chuyển (commit) source về nơi lưu trữ chính (mainline).
  • Mỗi khi code có thay đổi sẽ build lại (mainline) thông qua build server.
  • Báo lỗi cho người lập trình gây lỗi và quản lý dự án.
  • Phát hành phiên bản hoàn chỉnh cho khách hàng khi không còn lỗi.
  • Tự động phân phối phiên bản mới đến khách hàng.
  • Mọi người có thể nhìn thấy những gì đã xảy ra (thay đổi, lỗi…) để xem xét và giải quyết kịp thời.

Tuy nhiên, để triên khai hệ thống tích hợp liên tục, ta sẽ gặp những khó khăn như sau:

  • Cần thời gian thiết lập hệ thống ban đầu.
  • Đòi hỏi quản lý dự án, người lập trình, người kiểm định phải am hiểu mô hình phát triển phần mềm Agile, hệ thống tích hợp CI, cách sử dụng các công cụ hỗ trợ cho Agile và CI.
  • Chi phí thiết bị phần cứng (các server cho CI).

4. Lợi ích của Tích hợp liên tục

Để trả lời cho câu hỏi tại sao chúng ta phải sử dụng Hệ thống tích hợp liên tục, ta sẽ đưa ra vài lợi ích chính như sau

  • Giảm thiểu rủi ro do lỗi được phát hiện sớm.
  • Giảm thiểu sự lặp lại cho các quá trình
  • Tạo phần mềm có giá trị sử dụng sớm nhất có thể và sẳn sàng triểnkhai mọi lúc mọi nơi.
  • Cung cấp cái nhìn xuyên suốt tổng quan và cụ thể cho từng giai đoạn.
  • Nâng cao kỹ năng của đội ngũ nhân viên phát triển phần mềm.
  • Cải thiện chất lượng phần mềm
  • ...

5. Các công cụ sử dụng

  • Code Repositories : SVN, Mercurial, Git, Visual Source Safe…
  • Continuous Build Systems : Jenkins, Bamboo, Cruise,Hudson, …
  • Test Unit Frameworks : JUnit,Cucumber , CppUnit …
  • Test report website : Mantis, TestLink, Redmine…
  • Artifact Repositories : Nexus, Artifactory, Archiva … .v.v.v

II. Jenkins - An Open Source for Continuous Integration Server

1. Giới thiệu

  • Là một ứng dụng web application mã nguồn mở (được cộng đồng phát triển theo giấy phép MIT) đóng vai trò máy chủ build & test của hệ thống tích hợp liên tục.
  • Jenkins được viết bằng Java nên Jenkins có thể kết hợp được với hầu hết các công cụ khác của hệ thống tích hợp liên tục với nhiều nền tảng khác nhau và đặc biệt là tảng
  • mobi application (android).
  • Tiền thân là Hudson được viết bởi Kosuke Kawaguchi tại Sun, kể từ khi Sun được mualại bởi Oracle vào năm 2010, một bộ phận phát triển Hudson đã tách ra phát triển riêngvà được đặt tên là Jenkins.
  • Được sử dụng rộng rãi và được phát triển cải tiến liên tục bởi cộng đồng mã nguồn mở
  • Đạt nhiều giải thưởng :InfoWorld Bossies Award, 2011 O'Reilly Open-Source Award, 2011ALM&SCM, SDTimes 100, 2010, 2011 ,GlassFish Community Innovation Award 2008, Duke'sChoice Award 2008
  • Được các tổ chức lớn tin dùng: Ebay,Apache, NASA,Boeing,Mozilla, Linked in,…

2. Đặc điểm

  • Dễ dàng cài đặt và sử dụng.
  • Đa nền tảng.
  • Hỗ trợ cho nhiều công nghệ phát triển phần mềm.
  • Được sử dụng rộng rãi.
  • Dễ mở rộng.
  • Dễ dàng liên kết với các công cụ khác của hệ thống tích hợp liên tục thông qua các plug in.
  • Miễn phí.

3. Vai trò của Jenkins trong Hệ thống tích hợp liên tục

    • Là trái tim của CI - Là CI server (build & test server) giữ vị trí trung tâm “trái tim” cho mọi hoạt động của hệ thống .
  1. -CI giúp khép kín quy trình phát triển phần mềm một cách tự động

    • Nhờ vào việc hỗ trợ đa nền tảng, công nghệJenkins giúp khép kín quy trình phát triển phầnmềm một cách tự động theo mô hình Agile nóichung và hệ thống tích hợp liên tục nói riêng.
    • Với hơn 400 plugin và được phát triển thêm khôngngừng Jenkins đã trở thành trợ thủ đắc lực cho hệthống CI.

4. Lợi ích mà Jenkins mang lại

Tất cả với Jenkins hầu như là tự động. => Giảm thời gian và chi phí. Nâng cao năng lực nhân viên Có thể tóm gọn lợi ích Jenkins mang lại là FESS. * Faster. * Easier. * Safer. * Smarter.

III. Lời kết

Phần một của series này mình sẽ chỉ giới thiệu sơ qua về CI và Jenkins như vậy. Các bạn có thể tham khảo thêm trong cuốn Jenkins - The Definitive Guide tại link dưới đây. http://www.bogotobogo.com/DevOps/Jenkins/images/Intro_install/jenkins-the-definitive-guide.pdf

Trong bài 2, mình sẽ đi sâu hơi về cài đặt và cấu hình Jenkins, kết hợp với một project thực tế để xem Jenkins thực sự làm việc như thế nào và lợi ích thực tiện mà nó đem lại. Các bạn chú ý đón đọc nhé. Cảm ơn vì đã theo dõi