Test tự động với CircleCI và thông báo kết quả lên Slack

Trong quá trình phát triển phần mềm, CI/CD có vai trò rất quan trọng trong việc đảm bảo phát triển phần mềm liên tục, mà vẫn giữ được chất lượng sản phẩm tốt.

Trong bài viết này, mình sẽ dùng thử CircleCI để

  • Test tự động (Java)
  • Push kết quả lên kênh chat trên Slack

Đôi nét về CircleCI

CircleCI là 1 công cụ CI được tin dùng bởi hơn 100,000 công ty và developers trên toàn thế giới, trong đó có Facebook, Segment, Kickstarter, Percolate, Spotify, ...
Với những ưu điểm như sau:

  • Faster Performance: Có thể tùy chọn resource để tối ưu performance cho quá trình building, testing và deploying code
  • Granular Control: Có thể build theo các cách tùy thích bằng cách sử dụng custom job với WorkWorkflows
  • Complete Flexibility: Tất cả ngôn ngữ chạy trên Linux thì đều chạy được với CricleCI. Hỗ trợ First-class Docker giúp ta có thể tùy chỉnh môi trường tùy thích

CricleCI tương thích với nhiều sản phẩm và dịch vụ được sử dụng nhiều trong quá trình phát triển phần mềm

  • Source Code: GitHub, Atlassian Bitbucket, GitHub Enterprise
  • Tương thích với rất nhiều test tool
  • Deployment: Heroku, Docker, AWS, Azure, Google Cloud, ...
  • Collaborations: Jira, HipChat, Slack, ...

Ngoài bản Enterprise, CricleCI có Free bao gồm:

  • Build on Linux
  • Không giới hạn repos và user
  • 1,500 build minutes per month
  • 1 container
  • 1 concurrent build

Bản Free khá thoải mái cho những dự án nhỏ.

Bắt đầu với CricleCI

Để sử dụng CricleCI thì chỉ cần 3 bước đơn giản sau đây

Đăng ký

Để đăng ký sử dụng CricleCI ta có thể dùng tài khoản GitHub, Bitbucket hoặc tài khoản Google. Với các dự án cần bảo mật cao, thì có thể sử dụng CricleCI Enterprise để build trực tiếp trên private cloud.

Ở đây mình chọn GitHub với Public repo only

Add Code

Mình sẽ tạo 1 public repo trên GitHub để test thử: cricleci-test

Ta vào Project > Add Project, rồi chọn project test đã tạo ở trên.

Ta có thể chọn

  • Môi trường: Linux, OS X
  • CricleCI version: Đang hỗ trợ 2 phiên bản 2.0 và 1.0
  • Ngôn ngữ: Với khá nhiều lựa chọn. Ở ví dụ này ta chọn Maven (Java)

Tiếp theo ta làm 5 bước như hướng dẫn dưới hình

    1. Tạo thư mục .circleci và thêm file config.yml vào repo test
    1. Tham khảo file sample .yml để thêm nội dung cho config.yml. File này được thay đổi tương ứng với setting mình đã chọn ở trên như ngôn ngữ, môi trường, ... Sau đây là file sample của Maven (Java) với CricleCI 2.0 và build trên Linux. CricleCI sẽ chạy thứ tự các bước được định nghĩa trong steps.
# Java Maven CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-java/ for more details
#
version: 2
jobs:
  build:
    docker:
      # CricleCI dùng docker. Ở dưới là mình dùng bản Pre-built có sẵn của CricleCI
      # Ta có thể dùng image tự tạo
      # specify the version you desire here
      - image: circleci/openjdk:8-jdk
      
      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      # - image: circleci/postgres:9.4

    working_directory: ~/repo

    environment:
      # Customize the JVM maximum heap limit
      MAVEN_OPTS: -Xmx3200m
    
    steps:
      # Pull code về
      - checkout

      # Download và cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "pom.xml" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-

      - run: mvn dependency:go-offline

      - save_cache:
          paths:
            - ~/.m2
          key: v1-dependencies-{{ checksum "pom.xml" }}
        
      # Chạy test
      - run: mvn integration-test
    1. Sửa lại setting cho phù hợp với project
    1. Push .circleci/config.yml lên GitHub
    1. Start building!

Cứ mỗi một lần ta push code lên, CricleCI sẽ tự động build như hình

Khá là đơn giản và nhanh chóng để tích hợp CI nhỉ! Ta cũng có thể xem chi tiết 1 lần build như 2 hình sau:


Testing

Ta sẽ thử với 1 test lỗi. Kết quả sẽ fail như hình sau

Ta có thể biết rõ chi tiết fail ở bước nào cùng với lỗi cụ thể

Đồng thời, ở giao diện web của GitHub ta cũng có thể phân biệt được commit nào test bị fail

Gửi notification tới Slack

Với mỗi lần push code lên GitHub, CricleCI sẽ tự động build và chạy test. Sau khi xong, mặc định sẽ tự động gửi kết quả tới mail của mình.

Tuy nhiên để có thể giao tiếp dễ dàng với các member khác trong team, ta có thể setting để kết quả của CricleCI sẽ tự động gửi đến kênh chat của Slack.

Ở App Directory của Slack ta có thể tìm kiếm và cài đặt CircleCI

Sau đó chọn kênh chat mà CricleCI sẽ gửi kết quả

Add CricleCI Intergration và ta sẽ có 1 webhook URL.

Tiếp đến, trên CricleCI ta vào Project và chọn setting cho project cần notification tới Slack. Chọn Chat notifications và ta có thể thấy CricleCI tương thích với khá nhiều tool như Slack, Hipchat, Flowdock, Campfire, IRC, ...

Và kết quả trên Slack:

Như vậy, cứ mỗi lần ta push code, CricleCI sẽ tự build và test rồi thông báo kết quả lên Slack. Nó giúp cho việc phát triển của team thuận tiện hơn rất nhiều.

Kết luận

  • Test tự động góp phần nâng cao chất lượng của phần mềm. Và với CricleCI, ta có thể tích hợp test tự động vào hệ thống một cách nhanh chóng, dễ dàng.

  • Bài viết này mới chỉ đưa ra ví dụ đơn giản về việc tích hợp CricleCI và dùng nó cho việc test tự động. CricleCI còn rất nhiều tính năng hữu ích khác, các bạn có thể tự tìm hiểu và mày mò thêm ở CricleCI Documentation

Tham khảo