Continuous Integration

Created by Oanh Nguyen

Nội dung

  1. CI là gì?
  2. Tại sao nên dùng CI?
  3. Workflow cỉa CI
  4. Triển khai trên Travis CI
  5. Làm việc với Gitlab CI

CI là gì?

“Tích hợp liên tục (CI) là phương pháp phát triển phần mềm đòi hỏi các thành viên trong nhóm tích hợp công việc thường xuyên. Mỗi ngày, các thành viên đều phải theo dõi và phát triển công việc của họ ít nhất một lần. Việc này sẽ được một nhóm khác kiểm tra tự động, nhóm này sẽ tiến hành kiểm thử truy hồi để phát hiện lỗi nhanh nhất có thể. Cả nhóm thấy rằng phương pháp tiếp cận này giúp giảm bớt vấn đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn.”
-- Thư viện phát triển phần mềm của IBM

Chuyện của Nam

https://toidicodedao.com
  • Sinh viên IT năm cuối của trường A
  • Làm bài tập nhóm
  • Phân tích module nhỏ, giao cho từng người
  • Cơn ác mộng khi cả nhóm ráp code

  • Ra trường
  • Được nhận vào công ty B
  • Biết dùng SVN/Git và tích hợp code
  • OT để suẳ lỗi tích hợp
Công ty C
  • Áp dụng Agile, CI
  • Code được viết Unit Test đầy đủ
  • Code được tự động test với hệ thống CI khi commit
  • Code lỗi hoặc build bị lỗi sẽ có mail thông báo
  • Tích hợp liên tục và đơn giản

=> Thời gian phát triển giảm xuống

TDD + Automatic = CI

Tại sao nên dùng CI ?

  • Đảm bảo code luôn build được, luôn chạy đúng
  • Tăng tốc đô phát triển

Framework thực hiện CI

CI Không phải là CodeIgniter

  • Team Foundation Server - Microsoft
  • TeamCity - Jet Brains
  • Hudson
  • Jenkin
  • Travis
  • GitLab CI
  • other sercives

Travis CI là gì?

Cấu tạo của Travis CI

Triển khai trên Travis CI

Chuẩn bị:

  • Tài khoản github
  • Open source project
  • Unit tests

Tạo file .travis.yml


language: php
php:
- 5.5
- 5.6
- 7.0
- hhvm
sudo: false
addons:
  mariadb: '10.1'
before_install:
- composer self-update
install:
- composer install
- composer require satooshi/php-coveralls '~1.0'
before_script:
- composer run-script post-create-project-cmd
- mysql -u root -e 'CREATE DATABASE IF NOT EXISTS testdb;'
script:
- php vendor/bin/phpcs
- php vendor/bin/phpunit --coverage-clover build/logs/clover.xml
after_script:
- php vendor/bin/coveralls -v
notifications:
  slack:
    oanhnn:xxxxxxxxxxxxxxxxxxxxxxxxxx
		

Tham khảo https://docs.travis-ci.com/

Kiểm tra trong settings projects trên github

Push code và xem kết quả build & test

Đánh giá

Ưu điểm:

  • Dễ dàng setup & configure
  • Free for open source project
  • Hỗ trợ nhiều ngôn ngữ, nhiều mỗi trường, với các phiên bản khác nhau
  • Tài liệu hỗ trợ tốt

Nhược điểm:

  • Chỉ hỗ trợ Github
  • Phải trả phí với private project
  • Chưa support môi trường Windows

GitLab CI là gì?

Triển khai trên GitLab CI

Chuẩn bị:

  • Gitlab 8.0+ và cài đặt GitLab Runner
  • Tài khoản gitlab
  • Unit tests
  1. Tạo project
  2. Bật GitLab CI cho project
  3. Chuẩn bị source code và script Unit test
  4. Viết config cho GitLab CI
  5. Push code và xem kết quả build & test

Tạo file .gitlab-ci.yml


# Select image from https://hub.docker.com/r/_/php/
image: php:5.5

# Select what we should cache
cache:
  paths:
  - vendor/

# Install dependencies
before_script:
  # Install git, the php image doesn't have installed
  - apt-get update -yqq
  - apt-get install git -yqq
  # Install mysql driver
  - docker-php-ext-install pdo_mysql
  # Install composer
  - curl -sS https://getcomposer.org/installer | php
  - php composer.phar install

services:
  - mysql

# Variables
variables:
  GIT_STRATEGY: clone
  GIT_DEPTH: "3"
  # Configure mysql service (https://hub.docker.com/_/mysql/)
  MYSQL_DATABASE: testdb
  MYSQL_ROOT_PASSWORD: mysql

# We test PHP5.5 (the default) with MySQL
test:php55:
  script:
    - php vendor/bin/phpcs
    - php vendor/bin/phpunit

# We test PHP5.5 (the default) with MySQL
test:php56:
  image: php:5.6
  script:
    - php vendor/bin/phpcs
    - php vendor/bin/phpunit

# We test PHP7 with MySQL, but we allow it to fail
test:php7:
  image: php:7
  script:
    - php vendor/bin/phpcs
    - php vendor/bin/phpunit
  allow_failure: true
		

Tham khảo http://doc.gitlab.com/ce/ci/

Đánh giá

Ưu điểm:

  • Free and open source
  • Hỗ trợ nhiều ngôn ngữ, nhiều mỗi trường, với các phiên bản khác nhau
  • Hỗ trợ sử dụng Docker image

Nhược điểm:

  • Chỉ hỗ trợ GitLab