PHP coding standard là chuẩn viết code trong lập trình PHP, việc lập trình theo chuẩn này giúp cho việc thống nhất chung giữa các đoạn mã để dễ đọc, tái sử dụng, phát hiện lỗi và bảo trì, phát triển hệ thống sau này. PHP coding standard bao gồm các quy tắc về đặt tên biến, tên hàm, các hàm dựng sẵn được sử dụng, những quy định về khoảng trắng, tab, dấu nháy… Bạn có thể tìm hiểu thêm về PHP coding standard trong tài liệu này.

https://sangplus.com/wp-content/uploads/2015/11/PHP-Coding-Standard.pdf

Có nhiều cách để kiểm tra mã nguồn của bạn có đúng theo chuẩn coding standard hay không. Trong bài viết này mình sẽ hướng dẫn các bạn sử dụng CircleCI để kiểm tra.

Đầu tiên, hãy xem qua một chút CircleCI có thể làm gì cho bạn.

 

 

2015-11-24_150126 Kiểm tra mã nguồn của bạn xem có đúng theo coding standard hay không

 

2015-11-24_150314 Lỗi không được phép sử dụng hàm is_null()

 

 

2015-11-24_150611 Lỗi về khoảng trắng sau dấu phẩy

 

circle-ci-check-pull-request Kiểm tra source trước khi merge pull request

Đó là một số hình ảnh về CircleCI, nếu bạn thấy hứng thú và muốn áp dụng CircleCI vào ứng dụng của bạn, hãy bắt tay vào bắt đầu làm theo hướng dẫn bên dưới.

Đăng ký tài khoản trên circleci.com

Đầu tiên các bạn cần có 1 tài khoản github, vì CircleCI hoạt động giống như 1 dịch vụ bổ trợ cho Github vậy, nó sẽ check source trong tài khoản Github của bạn. Vào thời điểm hiện tại CircleCI vẫn chưa hỗ trợ Bitbucket.

Các bạn truy cập vào trang circleci.com và đăng ký 1 tài khoản.

2015-11-24_143814Nhấn vào nút “Add Code From Github”, sau đó nó sẽ chuyển bạn đến trang đăng nhập github (nếu bạn chưa đăng nhập github) và tạo tài khoản cho bạn dựa trên xác thực github.

Cấu hình CircleCI trong mã nguồn Laravel của bạn.

* Cài thư viện PhpMD và PHP Codesnipper:

Thêm 2 thư viện này vào file composer.json và chạy composer update


"phpmd/phpmd" : "2.*",
 "squizlabs/php_codesniffer": "2.*"

* Tạo file cấu hình cho CircleCI:

Tạo file circle.yml tại thư mục gốc của ứng dụng với nội dung như sau.


## Cấu hình cho máy ảo test
machine:
# Cấu hình phiên bản php sử dụng
php:
version: 5.6.5

# Cấu hình các biến môi trường
environment:
CIRCLE_ENV: testing
APP_ENV: testing
APP_KEY: lpivZFWb3A4xtCc6S4f3eSdE3jdP5hWm
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_DATABASE: circle_test
DB_USERNAME: ubuntu
DB_PASSWORD:
DB_SOCKET: /var/run/mysqld/mysqld.sock
APP_DEBUG: false

## Lệnh cài các thư viện cần thiết, import database mẫu, tạo file .env ...
dependencies:
pre:
- wget https://sangplus.com/db.sql.gz
- gunzip db.sql.gz
- mysql circle_test < db.sql
- echo "memory_limit = 512M" > ~/.phpenv/versions/$(phpenv global)/etc/conf.d/memory.ini
post:
- composer install --prefer-source --no-interaction
- php artisan migrate

## Cấu hình test
test:
override:
- ./vendor/bin/phpcs --standard=phpcs.xml app/ -n
- ./vendor/bin/phpmd app/ text phpmd.xml
- ./vendor/bin/phpunit

Mình sẽ giải tích 1 chút về file cấu hình này, đây là file cấu hình mình đang sử dụng cho project hiện tại của mình, xây dựng trên nền tảng Laravel 5.1:

+ Cấu hình phiên bản php:

Trong ví dụ này mình sử dụng Laravel 5.1 nên cần cấu hình sử dụng php 5.6.5 (bạn có thể cấu hình phiên bản php từ 5.5.9 trở lên), nếu bạn sử dụng Laravel 4.2 thì có thể chọn php 5.4 cho đoạn cấu hình này.

+ Cấu hình các biến môi trường:

Phần này cũng không có gì đặc biệt cả, nó cũng giống như khi bạn cấu hình biến môi trường trong Laravel thôi. Ở đây, mọi thiết lập cho ứng dụng sẽ được lưu trữ trong file .env mà chúng ta sẽ ghi lên máy ảo test của CircleCI

+ Tạo database mẫu (nếu cần):


dependencies:
pre:

# Thay đường dẫn lại thành đường dẫn lưu trữ db của bạn

- wget https://sangplus.com/db.sql.gz
- gunzip db.sql.gz
- mysql circle_test < db.sql
- echo "memory_limit = 512M" > ~/.phpenv/versions/$(phpenv global)/etc/conf.d/memory.ini

Ở trong đoạn này, chúng ta sẽ tải database mẫu về, giải nén và import vào database circle_test và cấu hình memory_limit lên cao một chút (như mình thì cấu hình 512M).

Lưu ý: Nếu bạn đang sử dụng Laravel 4.2, bạn cần cài thêm thư viện “vlucas/phpdotenv” và sửa config để có thể đọc được các thiết lập từ file .env

+ Cài đặt các thư viện cần thiết và chạy migrate database:


post:
- composer install --prefer-source --no-interaction
- php artisan migrate

+ Override test mặc định của CircleCI


## Cấu hình test
test:
override:
- ./vendor/bin/phpcs --standard=phpcs.xml app/ -n
- ./vendor/bin/phpmd app/ text phpmd.xml
- ./vendor/bin/phpunit

Ở đây mình cấu hình test toàn bộ các file và thư mục trong thư mục app của ưng dụng, nếu bạn không muốn test hết toàn bộ thì có thể thay đường dẫn “app/” thành đường dẫn tới thư mục bạn muốn test.

Kích hoạt test cho ứng dụng.

Để CircleCI chạy test ứng dụng của bạn, bạn cần push lên github để kích hoạt CircleCI chạy, về sau mỗi lần bạn push source lên Github thì source của bạn sẽ được CircleCI test.

Truy cập vào circleci.com và chạy build đầu tiên

Bạn vào circleci.com và chọn “Add project” bên menu trái, chọn tài khoản và project muốn build và nhấn “Build project”.

2015-11-24_145910

quay lại trang chủ bạn sẽ thấy danh sách bản build của bạn.

2015-11-24_150126

Kết luận:

Như các bạn thấy, việc tích hợp CircleCI vào ứng dụng quả là đơn giản phải không nào, nhưng ở thời điểm hiện tại CircleCI vẫn còn có nhược điểm là chưa hỗ trợ Bitbucket. Tuy nhiên đối với mình nó rất tốt và đáng để sử dụng. Nếu công ty/nhóm của bạn chỉ sử dụng Bitbucket thì có thể xem xét sử dụng CodeShip, đây cũng là một dịch vụ rất mạnh mẽ cho việc Continuous Integration và Deployment giống như CircleCI.

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

Mình là 1 developer mới vào nghề, chưa có nhiều kinh nghiệm với lập trình web nhưng luôn muốn chia sẻ những hiểu biết của mình với các lập trình viên khác.

  • Địa chỉ: Hồ Chí Minh