Khi lần đầu tiên được tham gia vào một dự án có sử dụng Github, mình đã rất hào hứng khi thấy cái tool build và test code tự động Jenkins được tích hợp vào Github. Mỗi lần up source lên Github, **Jenkins**sẽ tự động lấy code vừa up đấy build và test rồi báo trạng thái code chạy bị error hay không ngay trên Github. Sẽ có 3 trạng thái là đang build, build thành công, build lỗi.

status build code

Thấy cái tool **Jenkins**hay quá, thế là bắt tay vào tìm hiểu. Lay hoay tìm hiểu định nghĩa, các cài đặt, setup, v.v… và cuối cùng vẫn chưa chạy được frown. Sau đó tìm thấy một service khác khá thú vị, cũng build, test và deploy code tự động giống Jenkins, mà chẳng phải setup server gì cả, và rất là dễ sử dụng. Thế là mình quyết định viết 1 bài về service này, đó là Travis CI.

Bài viết gồm các phần:

  • Travis CI là gì
  • Tính năng của Travis CI
  • Quy trình làm việc với Travis CI
  • Tổng quan giao diện
  • Demo project PHP với Travis CI (gồm 11 bước) - Kết nối Github với Travis-ci
  • Tạo file cấu hình .travis.yml
  • Push source và check trạng thái

Vậy Travis CI là gì?

Travis là một dịch vụ (service) CI, miễn phí và là open source. Trong đó CI là viết tắt của từ Continuous Integrantion, nghĩa là tích hợp liên tục. Mình giải thích ý nghĩa về CI một xíu nhé. Tích hợp liên tục (CI) nghĩa là trong quá trình phát triển phần mềm, các thành viên trong nhóm nghiên cứu phải tích hợp công việc của họ thường xuyên, thông thường mỗi người đều phải tích hợp công việc ít nhất một lần vào cuối ngày. Sau mỗi tích hợp là công việc build tự động (bao gồm test) để phát hiện lỗi tích hợp càng sớm càng tốt. Chính vì tính chất có thể phát hiện lỗi sớm, nên CI đã rất được các team phát triển phần mềm ưa dùng.

Bạn có thể sử dụng phiên bản free tại https://travis-ci.org , và phiên bản trả phí tạihttps://travis-ci.com.

Tính năng của Travis CI?

  • Tích hợp tự động với Github
  • Hỗ trợ cho hơn 20 ngôn ngữ lập trình
  • Hỗ trợ build và test
  • Hỗ trợ deploy lên nhiều cloud services
  • Cung cấp feedback qua mail
  • Check chất lượng code

Quy trình làm việc?

Các bạn xem sơ đồ sau sẽ dễ hiểu.

  1. Đầu tiên, một developer sẽ thực hiện một lệnh git push để đẩy code ở local lên server Github.
  2. Tiếp đó Github nháy mặt với Travislà “có source mới vừa push lên kìa, build rồi test giúp nhé, khi nào có kết quả báo về cho tui”.
  3. Sau đó **Travis**thực hiện build và test code.
  4. Kết thúc quá trình build và test, **Travis**trả kết quả thành công hay có lỗi về cho Github và gửi mail thông báo cho tài khoản Travis đó.

Thời trước, thường phải có một đội ngồi lấy code của các thành viên trong team về, build, test rồi deploy lên server. Trước đó mình cũng tham gia vào một team, mà đội build code ấy chỉ có một anh duy nhất, còn dev thì tới chục người, mỗi lần push source lên, phải chờ anh giải quyết các lệnh push trước mình, rồi mới tới mình. Thời gian phát hiện có lỗi phát sinh bị kéo dài rồi, rồi đối ứng chậm, dẫn đến việc tới hạn mà không thể release sản phẩm.

Bây giờ nhờ các tool tự động như Travis CI, bên cạnh việc build và deploy tự động, còn giúp các dev phát hiện nhanh lỗi phát sinh và đối ứng kịp thời.

Ngoài Travis CI, thì còn có rất nhiều dịch vụ tương đương như Jenkins,** Circle CI**, Wercker, drone.io, Gitlab-CI, v.v…

Tổng quan giao diện

Mình giới thiệu sơ về giao diện của Travis-ci. Travis-ci cung cấp một giao diện cũng khá đơn giản, và dễ sử dụng.
status build code

  1. Danh sách các repos public trên Github mà đang được build tự động.
  2. Để thêm hay xóa các repos.
  3. Tên project và các liên kết: được định dạng theo username/repository.
  4. Thông tin cho từng kiểu build.
  5. Thông tin chi tiết của mỗi lần build

Demo project PHP với Travis-ci

Bây giờ mình sẽ làm demo project PHPvới Travis-ci nhé.

**Bước 1: Login vào account Github. **Nếu chưa có thì các bạn đăng ký mới nhé.

Bước 2: Tạo một repository. Mình đặt tên cho demo này là travis_php_demo.

Bước 3: Kết nối Travis với Github. Vào trang https://travis-ci.org/ để khai báo kết nối với Github. Bạn bấm vào “Sign in with Github” hay “Sign up” đều được cả.

Bước 4: Thực hiện Authorize. Nếu là account mới thì **Travis**cần bạn cấp quyền để truy cập vào account. Bước này cũng không có gì khó khăn cả, bạn chỉ việc click vào nút màu xanh Authorize application” là xong.

Sau khi đó Travis sẽ tự thực hiện đồng bộ hóa với tài khoản Github của bạn trong vài giây. Trên trang Travis-ci, các bạn sẽ thấy có nút “Sync account”, nếu Travis-ci chưa kịp thực hiện đồng bộ với account Github của bạn, bạn có thể click vào đó để thực hiện đồng bộ nhanh chống với Github.

Bước 5: Turn on repository. Sau khi đồng bộ xong, các bạn sẽ thấy xuất hiện list các repositories giống với bên Github. Tới đây, Travis chỉ mới đồng bộ với Github chứ chưa thực hiện kết nối lắng nghe với bất kì repository nào. Từ danh sách repositories, bạn chọn repository và turn on.

Bước 6: Kiểm tra Github đã tích hợp Travis. Bạn vào **Github **-> repository “travis_php_demo” -> Settings -> Integrations & services, sẽ thấy Travis CI đã được tích hợp vào.

Bước 7: Clone code. Các bạn vào github clone source code về và bắt đầu code nhé. Lưu ý, nếu bạn nào chưa biết xài git thì tìm hiểu trước nhé. Ở đây mình mặc định các bạn đã biết sử dụng git và các command đơn giản của git rồi.

**Bước 8: Directory. **Mình tạo cấu trúc thư mục như sau:

Trong đó:

  • travis_php_demo: là thư mục git của mình.
  • src: là thư mục chứa source code của project.
  • .travis.yml: là file cấu hình cho Travis, file này bắt buộc phải có nhé.
  • phpunit.xml: file cấu hình cho công cụ test là PHPUnit, file này cũng bắt buộc phải có nhé.

Bước 9: Code thôi. Bây giờ mình viết code cho từng file như sau:

  • phpunit.xml __ Dòng code ./src có nghĩa là test các file có đuôi là php trong thư mục src.

  • ** .travis.yml __ **Mình khai báo ngôn ngữ là PHP, và test với php version 5.6 với 7.0

  • **src/index.php__ **Code php đơn giản

** Bước 10: Push code lên Github. **Vào trang Travis-ci với Github để xem thông báo trạng thái code bạn vừa push có OK ko nhé. Nếu màu xanh là mọi thứ **OK**nhé. Ngược lại màu đỏ là bị lỗi.

** Bước 11: Test trường hợp code bị lỗi.** Vào file src/index.php, mình xóa dấu chấm phẩy ; đi. Sau đó push code lên server Github, và đợi Travistest nhé.

Sau khi push code, **Travis**sẽ tự động build lại. Trạng thái màu vàng là đang build nhé. Github cũng hiện trạng thái đang build.

Quá trình build kết thúc. Ôi, có lỗi rồi..

Các bạn click vào để xem bảo lỗi do đâu. Hiện tại thì nó báo lỗi do thiếu dấu chấm phẩy ở dòng số 4. Vậy là biết được nguyên nhân gây lỗi rồi nhé.

Chúc các bạn thành công nhé.