Tích hợp liên tục (Continuous Integration) và ứng dụng CircleCI vào rails

Tích hợp liên tục

Thời xa xưa

Thời sinh viên, mỗi khi có một bài tập nhóm, phải làm chung, nhóm thường chia công việc ra, mỗi người làm một phần (trong điều kiện lý tưởng :)) chứ thực chất toàn một ông gánh team), sau đó thì zip code lại, gửi qua email, yahoo…để tổng hợp code lại. Và mỗi lần ghép code như vậy là một lần ác mộng (chắc hẳn các bạn ít nhất đã trải qua một lần rồi nên mình không muốn nhắc thêm về quá khứ đau thương này nữa :P)

Thời gian trôi qua

Rồi ra đi làm, chúng ta được tiếp xúc với các hệ quản lý phiên bản (VCS) như SVN, git chẳng hạn. (Nếu bạn chưa biết gì về git, hoặc còn mơ hồ, muốn tìm hiểu thêm về git hoặc hệ thống lại kiến thức, vui lòng đọc loạt bài viết về git của mình)
Mặc dù mỗi người làm một nhánh riêng, rồi được hỗ trợ xử lý xung đột code…nhưng cuối mỗi ngày làm việc, việc ghép code vẫn là một điều gian khổ: nào là test, nào là convention, nào là ghép phần code mình vào chắc gì đã chạy đúng, blah blah blah.

Continuous Integration (CI) – kẻ cứu rỗi linh hồn

CI là phương pháp thực hiện các công việc kiểm tra code của bạn ngay khi nào push code lên VCS một cách HOÀN TOÀN TỰ ĐỘNG và nó sẽ báo cáo kết quả về cho bạn.

Thường CI sẽ làm cho bạn các việc sau:

  • Build project
  • Chạy test cases
  • Chạy các tác vụ mà bạn chỉ định (check convention,tiền xử lý,deploy code, report…)
  • Nhiều thứ hay ho khác đang chờ bạn khám phá.

CircleCI – một dịch vụ miễn phí

CircleCI là một dịch vụ miễn phí áp dụng CI để tích hợp cho dự án của mình. Hiện CircleCI hỗ trợ hầu hết các ngôn ngữ, framework thông dụng hiện nay (và rails là đương nhiên :P)

  • CircleCI thực hiện việc hook vào github repo của bạn, và test ở mỗi lần bạn push, tạo pull request, merge pull request.
  • CircleCI làm việc với github repo của bạn, và nó có thể hook vào được cả private lẫn public repo (rock)
  • Với mỗi build fail hoặc fix được cái fail, CircleCI sẽ email cho bạn để báo cáo tình hình.
  • Việc tích hợp với github tương đối đơn giản, và bạn có thể custom những task mà CircleCI làm cho bạn thỏa mái.
  • Document khá đầy đủ và đơn giản, dễ hiểu, dễ áp dụng.

Tích hợp CircleCI vào rails app trên github.

Điều kiện tiên quyết

  • Có rails app trên github (tất nhiên :P)
  • Có tài khoản CircleCI. Bạn dùng tài khoản github để đăng ký CircleCi, và cấp các quyền truy cập cho CircleCI luôn 🙂

Tích hợp

Bạn vào Add project để chọn project từ github của bạn cho CircleCI build.
Đến đây là có thể chạy được rồi, nhưng để chắc ăn, bạn nên config thêm một số môi trường.
Tiếp đến, bạn cần chỉ định cho CircleCI biết bạn cần nó làm cho những việc gì, hay phải cài đặt môi trường thế nào. Ở thư mục root của project, bạn tạo mfile circle.yml với nội dung:

Các thông số cấu hình ở trên bạn đọc vào là có thể tự hiểu được:

  • version: chỉ định rõ version nào của ruby sẽ dùng, để tránh việc bị lệch môi trường giữa máy bạn và máy của CircleCI (và các thành viên khác trong team nữa)
  • environment: Các biến môi trường sẽ dùng (EMAIL, PASSWORD)
  • test: các tác vụ cho test (mặc định thì CircleCI đã chạy cái test mặc định của framework rồi, mình chỉ cấu hình thêm thôi, như ở trên là mình cho chạy rubocop để check convention)
  • deployment: Thông tin về tự động deploy lên server.
    Ngoài ra, còn nhiều thông số cấu hình khác, bạn có thể xem thêm ở CircleCI documentation page
    Đến đây là xong, mỗi lần bạn push code lên, CircleCI sẽ thực hiện build với code mới của bạn. Bạn có thể xem tiến trình và báo cáo trong trang dashboard.

Xem báo cáo

Screenshot from 2015-11-19 10:06:41
Dashboard của project sẽ list ra các build với những thông tin cơ bản về build đấy: branch, revision, author, datetime…
Click vào từng build để biết cụ thể hơn build đó đã làm những task gì, và kết quả ra sao.
Sơ lược về CI và CircleCI là vậy, ngoài ra, bạn có thể tìm hiểu sâu hơn ở Offical documentation

Thêm tí nữa

Bài viết này mình demo ở rails, nhưng các ngôn ngữ và framework khác đều tương tự, chỉ cần bạn hiểu cơ chế làm việc. Bạn có thể vào List languages để xem thêm.
Với bài viết này, mình hy vọng bạn đã có một cái nhìn tổng quan về những lợi ích mà CI mang lại, và biết cách tích hợp CI vào dự án của mình bằng CircleCI.
Bài tiếp theo, mình sẽ đi sâu hơn vào việc cho CircleCi chạy rubocop để kiểm tra code của bạn và comment trực tiếp vào Pull request nếu có lỗi xảy ra.

Lập trình và hơn thế nữa

Spread the love
  • 2
  •  
  •  
  •  
  •  
    2
    Shares

Leave a Reply

3 Comments on "Tích hợp liên tục (Continuous Integration) và ứng dụng CircleCI vào rails"

avatar
  Subscribe  
newest oldest most voted
Notify of
trackback

[…] bài viết trước mình đã mang đến cho bạn một cái nhìn ban đầu về CI và cách tích hợp CI vào […]

trackback

[…] bài viết trước mình đã mang đến cho bạn một cái nhìn ban đầu về CI và cách tích hợp CI vào […]

nga
Guest

eeeee