Continuous Integration with Jenkins
Bài đăng này đã không được cập nhật trong 8 năm
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:
-
Dòng đầu tiên thông báo Jenkins để thực hiện các bước xây dựng bash script
-
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.
-
Di chuyển vào workspace
-
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
-
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
- 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