Continuous Integration with Jenkins - Bài 2: Cài đặt và cấu hình Jenkins

Chào các bạn! Chúng ta lại gặp nhau trong phần 2 của loại bài viết về Continuous Integration with Jenkins của mình. Ở bài 1, chúng ta đã được giới thiệu 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. Mình cũng đã giới thiệu về Jenkins - một open source cho CI server, vai trò và lợi ích. Ở bài 2 này, mình sẽ trình bày các mục như sau

  1. Setup Jenkins chạy trên tomcat
  2. Tạo User, quản lý Role và assign Role cho các User
  3. Tạo và cấu hình Job
  4. Kết hợp Jenkins với GIT
  5. Automated Deployment
  6. (bla bla)

Ok. Chúng ta bắt đầu nhé

I. Cài đặt Jenkins

Truy cập vào địa chỉ https://jenkins.io/ và tải jenkins về máy nhé. Bạn sẽ thấy 2 cột, một cột Long-term Support (LTS) và một cột Weekly, ta sử dụng LTS để nó ổn định hơn nhé. Mình tải jenkis Generic Java package (.war), bạn sẽ nhận được file jenkins.war Ok. Giờ ta move jenkins.war vào thư mục /path/to/tomcat/webapps/ Mình ví dụ trên máy của mình nhé

mv /Users/nhs3108/Downloads/jenkins.war /Users/nhs3108/Tools/apache-tomcat-9.0.0.M9/webapps/jenkins.war

Ok. Giờ thì start tomcat lên nhé. Sau khi start tomcat xong, bạn truy cập vào đường dẫn sau http://localhost:8080/jenkins/

II. Cấu hình Jenkins

Để cấu hình jenkins, bạn truy cập vào http://localhost:8080/jenkins/manage, ở đây bạn sẽ thấy 1 danh sách rất nhiều chức năng cho phần quản lý này.

1. Phân quyền user của Jenkins

Ở phần này, mình sẽ trình bày cách để tạo user, tạo ra các role và assign role cho user để phân quyền user. Mục đích là để quy định quyền hạn của user đối với toàn hệ thống jenkins cũng những đối với từng Project cụ thể

1.1. Tạo user

Truy cập tới địa chỉ http://localhost:8080/jenkins/securityRealm/addUser và giao diện cho phần tạo user sẽ như sau Ok. Sau khi xác nhận tạo thành công, bạn sẽ thấy danh sách các user của Jenkins tại http://localhost:8080/jenkins/securityRealm/ Giao diện như dưới đây

1.2. Quản lý role

Đầu tiên, bạn hãy vào phần Manage Plugins và enable "Role-based Authorization Strategy" Ok. Tiếp đến, truy cập vào Configure Global Security > Access Control > Authorization > Chọn phần Role-Based Strategy. Save lại. Tiếp tục truy cập vào Manage and Assign Roles. Giao diện như sau Click vào phần Manage Roles. Bạn sẽ thấy hiện tại có một role admin, role admin này được cấp full tất cả mọi quyền . Có 2 loại Role ở đây bao gồm

  • Global roles: Các role này có tầm ảnh hưởng tới toàn bộ hệ thống, nghĩa là nếu một User A được gán role X có quyền build job, thì User A này có khả năng build mọi job của mọi Project.
  • Project roles: Các role này có tầm ảnh hưởng ở mức thấp hơn. Ví dự ta có một role tên là tester_of_staging (có quyền build app), set pattern là staging. Thì nếu user được gán role "tester_of_staging" thì nó có thể build cho mọi job có chứa pattern này. Ok. cơ bản thế thôi. Mình sẽ đi chi tiết hơn trong phần 1.3. Assign role cho User

1.3. Assign role cho User

Để gán quyền hạn cho một đối tượng user, truy cập Assign Roles

Bây giờ, mình sẽ đi chi tiết hơn về phần quản lý role nhé. Đặt vấn đề là bạn cần 1 role mà tất cả những người có role đó đều có quyền build các job của test_server. Vậy bạn cần làm những gì?

  1. Tạo job có tên deploy_test_server_project_name_1 là job có khả năng deploy code mới nhất lên server test của dự án 1.
  2. Ở phần "Project roles" tại Manage Roles ,
  • Role to add : mình đặt là "deployer_test_server_all_projects" : Nghĩa là người có role này có thể build mọi job liên quan với việc deploy server test của mọi project nhé (Cấp quyền Read, View, Build, Cancel, View Status cho role này nhé)
  • Pattern : mình đặt là ".deploy_test_server.", nghĩa là role có ảnh hưởng tới bất cứ job nào tên có chứa "deploy_test_server" Tham khảo hình dưới đây (bạn để ý cái mình vừa tạo là cái role thứ 2 - ở giữa đó nhé)

Ok. Ta đã tạo role rồi. Giờ thì hãy assign role cho user ta vừa tạo nhé Bạn có thể nhìn ảnh dưới đây sẽ hiểu ngay mình làm gì nhé Vậy là mình đã assign cho user1111 là deployer_test_server_all_projects. Vậy thì nếu công ty của bạn có 100 project, mỗi project đều có job deploy code lên server test và đặt tên theo quy tắc "Tên có chứa chuỗi 'deploy_test_server' " thì user1111 có thể build (cụ thể hơn là deploy) mọi job đó.

III. Job

1. Tạo, cấu hình và chạy job cơ bản

Ok. Để tạo job (tất nhiên account của bạn phải được setting quyền Create Job), bạn truy cập vào http://localhost:8080/jenkins/view/all/newJob. Giao diện như sau Bạn nhập tên job, và chọn type nhé. Ở đây mình chọn FreeStyle Project thôi, sau này ở những bài nâng cao, mình sẽ giới thiệu thêm về các type khác mà bạn đang nhìn thấy ở hình trên Xác nhận "OK" và bạn được chuyển tới trang tiếp theo, đó là trang config của job. Ở trang này, bạn có thể cấu hình lại tên Job, description cho job, chỉ định nơi chứa mã nguồn, các lệnh thực thi khi job chạy ... rất nhiều thứ khác.

Mình sẽ ví dụ một nho xíu cho bạn hình dung nhé. Mình cần tạo 1 cái job, nhiệm vụ của Job này là tạo file log có dạng log_YYYY_MM_DD.log (ví dụ log_2017_05_30.log) và ghi thông tin về người tạo và thời gian tạo. Như vậy, mình sẽ tạo 1 file shellscript để thực hiện việc này trên máy tính của mình trước đã. Và mình có file create_log.sh như sau

FILE_NAME="/Users/nhs3108/Desktop/log_"`date +%Y_%m_%d`".log"
DATE_NOW=`date +%Y/%m/%d-%H:%M:%S`
echo "Creating txt file"
echo "Created by Nguyen Hong Son. Created time is $DATE_NOW" >  $FILE_NAME
echo "Completed"

Giờ, ta cần config để mỗi khi chạy job này, nó sẽ chạy file script create_log.sh. Mình sẽ làm như sau

  1. Truy cập vào phần config http://localhost:8080/jenkins/job/deploy_test_server_project_name_1/configure
  2. Tại phần Build, mình sẽ thêm 1 build step là Execute Shell như dưới Với /Users/nhs3108/scripts/create_log.sh là command chạy file create_log.sh trên máy đặt jenkins (hay cụ thể ở đây là máy mình)
  3. Save lại

Giờ bạn có thể vào job và thực hiện build để cảm nhận kết quả nhé. Kiểm tra trên máy xem đã có file chưa nhé

Ok. Vậy là mình đã hướng dẫn các bạn những bước để tạo, cấu hình và chạy 1 job cơ bản. Ở bài sau của series, mình sẽ hướng dẫn các bạn tạo 1 job có tích hợp mã nguồn từ Github, có nhiệm vụ deploy code mới nhất của một ứng dụng Java web nhé.

IV. Lời Kết

Ở bài 2 này, mình đã giúp các bạn phần nào hiểu được cách cài đặt, cấu hình và sử dụng job trong jenkins. Các bạn hãy tham khảo trên nhiều nguồn khác nhau để chọn lọc và nâng cao trình độ hơn nữa nhé. Tham khảo thêm ở playlist này https://www.youtube.com/watch?v=89yWXXIOisk&list=PLhW3qG5bs-L_ZCOA4zNPSoGbnVQ-rp_dG

Ở bài sau của series, mình sẽ hướng dẫn các bạn tạo 1 job có tích hợp mã nguồn từ Github, có nhiệm vụ deploy code mới nhất của một ứng dụng Java web nhé. Rất cảm ơn các bạn đã quan tâm theo dõi