12/08/2018, 15:13

CI/CD with Jenkins (P1)

Trong bài viết này tôi sẽ giới thiệu về CI/CD kết hợp với Jenkins tạo ra 1 chu trình phát triển phần mềm Build-Deploy-Test với việc can thiệp thủ công ít nhất, giúp giảm thiểu chi phí, thời gian và các nguy cơ thay đổi bằng cách cho phép cập nhật gia tăng các tính năng vào trong ứng dụng. ...

Trong bài viết này tôi sẽ giới thiệu về CI/CD kết hợp với Jenkins tạo ra 1 chu trình phát triển phần mềm Build-Deploy-Test với việc can thiệp thủ công ít nhất, giúp giảm thiểu chi phí, thời gian và các nguy cơ thay đổi bằng cách cho phép cập nhật gia tăng các tính năng vào trong ứng dụng.

CI là viết tắt của Continuous Integration

  • Là tích hợp liên tục, nhằm liên tục tích hợp các source code của các members trong team lại một cách nhanh chóng, giúp kiểm soát được tình hình phát triển thông qua các bước kiểm thử (Integration test, regession test), nhằm đưa sản phẩm đạt đến sự ổn định.
  • Hình ảnh minh họa chu trình Continuous Integration (CI)

  • Chu trình làm việc với sources code:
    • Đầu tiên, các members trong team sẽ bắt đầu pull code mới nhất từ repo về branch để thực hiện các ticket nhất định.
    • Tiếp đó là quá trình typing và testing code để đảm bảo chất lượng ticket cũng như toàn bộ source code.
    • Members sẵn sàng cho việc commit vào branch phát triển của cả team.
    • Members cập nhật code mới từ repo về local repo
    • Merge code và giải quyết conflict.
    • Build và đảm bảo code pass qua các tests dưới local.
    • Commit code lên repo
    • Máy chủ CI lắng nghe các thay đổi code từ repository và có thể tự động build/test, sau đó đưa ra các thông báo (pass/failure) cho các members.

CD: Continuous Delivery hay Continuous Deployment ?

  • Trước hết Continuous Delivery: được hiểu là chuyển giao liên tục, là 1 tập hợp các kỹ thuật nhằm đảm bảo việc triển khai tích hợp souce code trên môi trường staging ( một môi trường rất giống với môi trường production). Theo cách này ta có thể đảm bảo source được kiểm thử một cách tỉ mỉ trước khi deploy lên môi trường production. Khi đó source code sẽ không được deploy tự động sang môi trường production.
  • Continuous Deployment: là 1 bước phát triển của Coninuous Delivery, giúp hoàn tất giai đoạn chuyển khai từ môi trường staging ( môi trường kiểm thử) sang môi trường production. Bằng cách này sources code sẽ đuợc tự động deploy lên môi trường production.
  • Vì vậy, ta sẽ hiểu CD là Continuous Delivery hay Continuous Deployment thì phụ thuộc vào cách thức mà nó triển khai trai trên môi trường production hay môi trường testing/staging
  • Sự khác nhau giữa Continuous Delivery vs Continuous Deployment được thể hiện dưới biểu đồ sau:

2.1.Jenkins là gì ?

  • Jenkins là 1 open source continuous integration tool được viết trên Java. Dự án được forked từ Hudson sau khi xảy ra tranh chấp với Orcale.
  • Jenkins cung cấp continous integration service cho phát triển phần mềm. Nó là hệ thống chạy trên servlet container như Apache Tomcat.
  • Jenkins giúp giám sát thực hiện việc thực thi các jobs như build project hay chạy các jobs.

Mô hình hoạt động của Jenkins:

2.2 Cài đặt Jenkins

  • Môi trường cài đặt:
- OS: Ubuntu 14
- Java Runtime Enviroment (JRE): 1.8
- Git: 1.9.1
  • Tạo tài khoản Git Account
  • Configure SSH Keys. GitHub sử dụng SSH keys để thiết lập secure connection giữa my tính của bạn với GitHub server. Tham khảo cách add SSH keys: https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/
  • Forking sample project để practise
  • Bắt đầu setup Jenkins
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

Sau khi installed xong jenkins, bắt đầu acess Jenkins theo url mặc định: localhost:8080

2.3 Config Jenkins Build Job

  • Tại màn hình dashboard, click create new job.
  • Một khi ta đã nói với Jenkins nơi mà nó có thể tìm thấy source code của ứng dụng, ta cần nói cho nó biết là khoảng thời gian nó nên kiểm tra cập nhật. Chúng ta muốn Jenkins giám sát repository và bắt đầu build bất kể khi nào có sự thay đổi về committed. Đây là cách thức chung để set up build job, nhằm kịp thời thông báo 1 cách nhanh nhất về trạng thái build. Một cách tiếp cận khác, bao gồm việc xây dựng 1 khoảng thời gian đều đặn để kích hoạt việc build, hoặc yên cầu người dùng click build 1 cách thủ công. hoặc trigger build remote sử dụng "post-commit" hook trong SCM.
  • Configure simple Maven build bằng tại pull down Build với option "Invoke top-level Maven targets". Trong trường hợp này, Maven sẽ xóa các artifacts trước đó, complie code, chạy unit tests và generate ra file JAR
  • Ngay khi lưu lại cấu hình, tại màn hình home, ta có thể thấy Jenkins bắt đầu thực hiện việc build job.
  • Lịch sử build job thành công (bóng màu xanh) và thất bại (bóng màu đỏ):

Trên đây là bài viết mở đầu, giới thiệu các khái niệm cơ bản về CI/CD, cũng như cách thức setup 1 ví dụ đơn giản để làm việc với Jenkins. Trong bài viết sau tôi sẽ hướng dẫn 1 số kỹ thuật nâng cao trong việc tích hợp Jenkíns để build các jobs hữu ích, phục vụ trong quá trình làm việc.

0