Continuous Integration with Jenkins

Việc sử dụng Continuous Integration (CI) là 1 khía cạnh không thể thiếu của 1 team phát triển dự án. Một công cụ CI thực hiện các công việc cần thiết của việc tích hợp và biên dịch các mã nguồn trên 1 hệ thống độc lập. Các công cụ CI sẽ đảm bảo chất lượng code và gửi cảnh báo khi code không còn hoạt động chính xác.

Sau đây là 1 số nguyên lí tạo nên triết lí cốt lõi của 1 môi trường CI thích hợp. Nó khá dễ hiểu nhưng lại khá khó để diễn đạt bằng tiếng Việt nên mình sẽ để nguyên bản gốc 😄

Automation of builds

Self-testing of builds

Building of every commit

Emphasizing build speed

Testing in a clone of the production environment

Publishing the results of the latest build

Dưới đây là giới thiệu sơ lược về cấu hình để sử dụng trong việc xây dựng hệ thống Jenkins CI. Jenkins có khá nhiều plugin cho phép hỗ trợ các dự án Ruby và Rails.

Jenkins

Creating a Job

Muốn tạo 1 job bạn cần:

Đặt tên cho job và mô tả

Chọn 1 cái tên xác định rõ ràng những gì bạn muốn xây dựng hoặc thực hiện. Điều đó sẽ khiến mục đích của việc xây dựng task rõ ràng cho bạn và cá nhân khác trong đội dự án

Xác định rõ type và location của các source repository

Jenkins cung cấp hỗ trợ cho một số hệ thống kiểm soát source code bao gồm CVS, SVN, Mercurial, và Git.

Chỉ định một khoảng thời gian xây dựng

Khi bắt đầu với CI là thời điểm tốt nhất để xây dựng sẵn những thay đổi sẽ diễn ra trong kế hoạch

Xác định các bước kiểm thử

Phần quan trọng nhất của việc xây dựng 1 hệ thống CI là xây dựng các build step và build action.

Hãy nhớ rằng các thông tin được lưu trữ trong Jenkins không phải là 1 phần của source code trong dự án của bạn. Nếu công việc định nghĩa hoặc các step quá phức tạp, hãy củng cố chúng thành 1 script trong source code của dự án.

Adding a Build Step

Trong một Jenkins jobs bạn có thể thêm một bước xây dựng để Execute lệnh shell. Điều này cung cấp cho bạn khả năng xác định một script bash để thực hiện xây dựng execution của bạn.

#!/bin/bash
[[ -s '/usr/local/lib/rvm' ]] && source '/usr/local/lib/rvm'
cd $WORKSPACE
bundle install
bundle exec rake db:migrate spec RAILS_ENV=test

Chúng ta sẽ kiểm tra script vừa rồi:

  1. Dòng đầu tiên thông báo Jenkins để thực hiện các bước xây dựng bash script

  2. Dòng thứ 2 kích hoạt RVM cho người dùng hiện tại. RVM trong trường hợp này được cài đặt tại các hệ thống không mang tính local cho 1 người dùng cụ thể. Khi RVM được cài đặt, người dùng được nhắc để bao gồm lệnh này trong .bashrc hoặc .bash_profile của họ. Trong 1 số trường hợp, các tài khoản người dùng có thể bị thiếu dòng này. Nó cũng có thể bỏ qua trong 1 số trường hợp vì người sử dụng bắt đầu trong 1 non-interactive mode, bỏ qua 1 số tập tin môi trường.

  3. Di chuyển vào workspace

  4. Cài đặt các necessary dependencies. Khi các dependencies thay đổi hoặc được update, kịch bản build có thể thất bại nếu Jenkins không cập nhật các gem được cài đặt trong project

  5. Thực hiện việc tạo cơ sở dữ liệu và kiểm tra các test. Với môi trường được xác định bởi Bundler, thực hiện script của bạn trong lần đầu migrate database, sau đó thực hiện các test theo spec.

Adding a Documentation Step

Ngoài việc executing tests, bạn có thể sử dụng Jenkins để biên dịch tài liệu cho dự án của bạn.

#!/bin/bash
[[ -s '/usr/local/lib/rvm' ]] && source '/usr/local/lib/rvm'
cd $WORKSPACE
yard 'lib/**/*.rb' 'app/**/*.rb'

Các DocLinks Plugin cho phép bạn định nghĩa:

  • title

  • description

  • directory to archive

  • index file

Adding a Coverage Step

Bạn có thể sử dụng SimpleCov gem cho việc kiểm tra Coverage

  1. Add SimpleCov vào Gemfile sau đó bundle install:
gem 'simplecov', require: false, group: :test

2.Load và chạy SimpleCov ở test/test_helper.rb

require 'simplecov'
SimpleCov.start

Kết quả hiển thị tại coverage/index.html


All Rights Reserved