- Published on
Hướng dẫn setup Github action cho Laravel
Mục lục
- Github Action là gì?
- Cài đặt Github Action để tự động chạy phpunit
- Tạo script workflow
- Cấu hình biến môi trường
- Xem kết quả chạy workflow
- Cấu hình Github Action sử dụng PostgreSQL
- Cấu hình Github Action sử dụng SQLite
Github Action là gì?
GitHub Actions là một tính năng của Github cho phép bạn chạy những dòng lệnh được đặt trước vào một thời điểm nào đó (ví dụ push hay PR), mục đích thường là để chạy unit test, kiểm tra code style hay thậm chí deploy sản phẩm tự động.
Trong bài viết này mình sẽ hướng dẫn cách đơn giản để setup một workflow (cái mình vừa nói ở trên) khi có ai đó push lên code lên repo nhé.
Trong bài viết này mình sẽ dùng các docker container của từ repo https://github.com/kirschbaum-development/laravel-test-runner-container
Cài đặt Github Action để tự động chạy phpunit
Tạo script workflow
Đầu tiên bạn cần tạo ra một file cấu hình trong thư mục dự án, hãy tạo file .github/workflows/ci.yml
với nội dung như sau:
on: push
name: CI
jobs:
phpunit:
runs-on: ubuntu-latest
container:
image: kirschbaumdevelopment/laravel-test-runner:7.3
services:
mysql:
image: mysql:5.7
env:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: test
ports:
- 33306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v1
with:
fetch-depth: 1
- name: Install composer dependencies
run: |
composer install --no-scripts
- name: Prepare Laravel Application
run: |
cp .env.ci .env
php artisan key:generate
php artisan migrate:fresh --seed
- name: Run Testsuite
run: vendor/bin/phpunit tests/
Tuỳ theo phiên bản PHP của bạn, hãy chọn container image phù hợp:
- PHP 8.0:
kirschbaumdevelopment/laravel-test-runner:8.0
- PHP 7.4:
kirschbaumdevelopment/laravel-test-runner:7.4
- PHP 7.3:
kirschbaumdevelopment/laravel-test-runner:7.3
- PHP 7.2:
kirschbaumdevelopment/laravel-test-runner:7.2
Cấu hình biến môi trường
Tiếp theo bạn cần tạo một file cấu hình biến môi trường, hãy copy file .env.example
ra một file mới và đặt tên là .env.ci
. Trong file này bạn chỉ cần chú ý đến chỗ cài đặt các biến CSDL, đối với các bạn chạy MySQL thì hãy đổi lại như sau:
# database
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=password
Rồi bây giờ hãy commit lại và push lên Github xem nào. Nếu bạn workflow của bạn hoạt động, bạn sẽ thấy một dấu chấm tròn bên cạnh thời gian commit cuối cùng.
Xem kết quả chạy workflow
Màu vàng 🟡 là đang chạy, mày xanh 🟢 là thành công toàn bộ. Và tất nhiên, màu đỏ 🔴 thì có gì đó đã failed hãy kiểm tra lại.
Cấu hình Github Action sử dụng PostgreSQL
Nếu dự án của bạn đang chạy PostgreSQL thay vì MySQL như ở trên, bạn hãy thay service trong file ci.yml
lại như sau:
services:
postgres:
image: postgres:10.8
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: test
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
Còn đây là nội dung cấu hình biến môi trường trong file .env.ci
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=test
DB_USERNAME=postgres
DB_PASSWORD=postgres
Cấu hình Github Action sử dụng SQLite
SQLite cấu hình rất đơn giản, bạn hãy xoá luôn services
bên trong file cấu hình workflow, và sửa nội dung .env.ci
như sau:
DB_CONNECTION=sqlite
DB_DATABASE=:memory:
Nếu bạn thích những bài viết như thế này, hãy đăng ký nhận email hàng tuần, mình sẽ tổng hợp các bài viết hay trong tuần và gửi email thông báo đến các bạn:
Tham khảo: Laravel Github Actions