Hướng dẫn tích hợp Travis-CI vào project trên github

Như mình giới thiệu ở bài trước, CI mang lại rất nhiều lợi ích cho một dự án phần mềm. Ở các công ty, sẽ có một server để cài đặt Team City, Hudson, Jenkin, TFS… phục vụ cho CI. Tuy nhiên, nếu các bạn làm bài tập nhóm, làm freelance hoặc project riêng, việc setup 1 server riêng cho CI khá là khó khăn.

May thay, với Travis-CI, mọi công việc cài đặt phức tạp đã được thực hiện sẵn cho bạn. Travis-CI có hỗ trợ tích hợp với github. Bạn chỉ cần config project github một chút là xong ngay. (Mình đã có 1 bài hướng dẫn tích hợp Visual Studio và github, nếu cần bạn có thể xem lại nhé).
travis-ci

Cùng bắt đầu nào! Để test chức năng của CI, mình sẽ dùng1 project có sử dụng Unit Test.  Các bạn có thể sử dụng lại project “Viết Unit Test với NUnit” trong bài trước (Lưu ý là CI chạy trên nền Mono, chỉ chạy được NUnit, không chạy được MSTest đâu).

Nếu lười, các bạn có thể fork project của mình tại đây: https://github.com/ToiDiCodeDaoSampleCode/travis-sample. Bắt buộc các bạn phải có tài khoản github.

1

Vào trang ravis-ci.org, bấm “Sign in with Github” góc trên bên phải.

travis

Sau khi đăng nhập, bấm vào dấu + bên trái, nhấp vào project muốn test để nó chuyển sang màu xanh là ok. Chờ một chút để Travis tích hợp vào project bên github.

select

Tiếp theo, bạn vào project trên github, kiểm tra xem nó đã nhận được Travis hay chưa?. Bấm Settings  -> Webhooks & Services. Nếu không thấy TravisCI thì bấm Add Service, thêm TravisCI vào.

step1 step2 step3

Bạn có thể bấm “Test service” để thử xem Github và Travis đã kết nối với nhau chưa.

4

Bước tiếp theo khá đơn giản, bạn chỉ cần tạo 1 file .travis.yml, commit lên thư mục trên github là xong. Bạn có thể tham khảo nội dung file .travis.yml trong folder của mình

language: csharp
solution: TravisSample.sln
install:
– nuget restore TravisSample.sln
– nuget install NUnit.Runners -Version 2.6.4 -OutputDirectory testrunner
script:
– xbuild /p:Configuration=Release TravisSample.sln
– mono ./testrunner/NUnit.Runners.2.6.4/tools/nunit-console.exe           ./TravisSample.Test/bin/Release/TravisSample.Test.dll

TravisCI sẽ thực hiện build dựa theo file .travis.yml này. Đầu tiên, nó sẽ restore các nuget package của solution. Sau đó build file `TravisSample.sln` và chạy các unit test. Ngay khi bạn vừa push lên git, bạn có thể vào web của Travis-CI để xem quá trình build bắt đầu chạy. Toàn bộ unit test cũng đã pass.

build-passbuild

Giả sử khi sửa code, bạn vô ý làm cho build bị lỗi, hoặc Unit Test chạy sai. Khi commit code lên, TravisCI sẽ tự động build, chạy unit test và báo lỗi.

3

sync

Lỗi sẽ được báo ngay trên CI.

fail1 fail2

Không chỉ thế, TravisCI còn gửi mail báo cáo về tình trạng bản build.

mail mail2

Không cần lấy code về, mình vẫn biết được code chạy được hay không, quá tiện lợi phải không nào? Với TravisCI, bạn có thể truy ra “thủ phạm” làm build bị lỗi, code chạy sai, không còn cảnh đùn đẩy đổ thừa qua lại khi code lỗi.

Qua bài viết, hi vọng các bạn hiểu thêm phần nào về công dụng cũng như cách áp dụng Continous Integration vào các dự án thực tế. Bạn nào có thắc mắc hay muốn tìm hiểu thêm về CI cứ để lại comment nhé.

20 thoughts on “Hướng dẫn tích hợp Travis-CI vào project trên github”

  1. Bạn ơi cho mình hỏi: Khi mình bấm Test Service thì nhận được lỗi: “Oops, we weren’t able to send the test payload: no pushes found”. Phải làm sao?

    Liked by 1 person

      1. Có phải mình tạo từ đường dẫn của project rồi nhấn biểu tượng + để tạo 1 file có đuôi .travis.yml không bạn?

        Like

      1. Cho mình hỏi làm sao travis gửi email tới các thành viên trong nhóm github mình đã tạo ra vậy?

        Like

  2. mình cũng đã nhập email của các thành viên trong nhóm nhưng nó lại không báo build thành công hay bị lỗi. nó chỉ thông báo cho người commiter. Người mà tạo ra group trên github thôi bạn. Còn các thành viên mà add vào github thì không nhận được thông báo từ TravisCI.

    Like

  3. Cảm ơn bạn, bài viết rất chi tiết.
    Mình muốn hỏi là Travis có hỗ trợ cho gitlab không? Mình đang sử dụng gitlab cài trên server nội bộ. Nếu không thì bạn có thể suggest mình tool nào tương tự chạy được trên gitlab không?

    Like

Leave a comment