Build, Test, and Deploy ứng dụng Laravel của bạn với GitHub Actions Chuyên mục PHP và Laravel 2023-05-20 72 Lượt xem 28 Lượt thích 0 Bình luận

Hello xin chào mọi người hôm nay mình sẽ hướng dẫn các bạn làm thế nào có thể Build, Test, and Deploy 1 ứng dụng laravel của các bạn một cách tự động bằng Github Action, nó cũng được coi là 1 loại CI/CD để phục vụ cho workflow của một ứng dụng thay vì phải sử dụng jenkins hay một số ứng dụng hỗ trợ khác , để thực hiện được bài này các bạn cần chuẩn bị một số yêu cầu sau đây nhé.
- GitHub account
- Knowledge of Laravel
- Knowledge of GitHub
- A live server
Bước 1: Chuẩn bị project laravel
Trước khi tạo dự án Laravel đầu tiên của bạn, bạn nên đảm bảo rằng local của bạn đã cài đặt PHP và Composer, sau khi bạn đã cài đặt PHP và Composer, bạn có thể tạo một dự án Laravel mới thông qua lệnh tạo dự án của Composer:
composer create-project laravel/laravel example-app
Sau khi khi tạo xong thì nhớ đẩy lên github nhé ! , còn nếu dự án của bạn đang là laravel rồi thì không cần cài nữa nhé !
Bước 2: Thiết lập GitHub Action
Bây giờ, hãy thiết lập GitHub Actions cho repository của bạn. Nhấp vào tab Action trên menu repository của bạn.
sau bước này thì các bạn click vào New workflow bạn sẽ nhìn thấy một danh sách mà được github gợi ý, các bạn hãy tìm đến là laravel và chọn configure nhé !
GitHub đủ thông minh để biết rằng kho lưu trữ chứa mã PHP (Laravel), vì vậy chúng ta sẽ trình bày các quy trình công việc liên quan đến laravel thôi nhé.
Github sẽ tạo cho bạn 1 file laravel.yml trong repository - tạo trong thư mục: .github/workflows/laravel.yml tùy các bạn có thể thay đổi name file sao cho phù hợp với dự án của mình, mình thì hay đặt là main.yml, sau bước này các bạn click Commit changes.. , các bạn click vào Action một lần nữa và nhìn thấy hình bên dưới là xong rồi nè .
Bước 3: Hiểu workflow của GitHub Actions
Chúng ta đã tạo quy trình công việc GitHub Action đầu tiên của mình, hãy dành một chút thời gian để hiểu workflow là gì. GitHub Actions bao gồm các quy trình công việc, được xác định bên trong thư mục .github/workflows trong kho lưu trữ và được commit như một phần của kho lưu trữ.Trong cái file .yml này sẽ chứa các cấu hình như là : chạy job, cài đặt các cấu hình , package , run command, connect đến aws , chạy test ...vv
Về cơ bản, khi một sự kiện như là (commit, push, pull, v.v.) xảy ra trên kho lưu trữ, GitHub Actions sẽ tự động phát hiện và phân tích cú pháp quy trình công việc, sau đó bắt đầu xử lý các công việc được xác định trong đó.
Hãy xem tệp laravel.yml được tạo, quy trình công việc sẽ chạy bất cứ khi nào có yêu cầu push hoặc pull được thực hiện cho nhánh chính master
Bước 5: Test
Để kiểm tra kiểm tra tính đúng đẵn trong các xử lý của từng đơn vị mã nguồn , chúng ta cần viết các test case. Với mục đích của hướng dẫn này, chúng ta sẽ sử dụng các test case mặc định đi kèm với một ứng dụng Laravel mới.
Thật may mắn cho chúng ta, file laravel.yml được tạo đã chứa một job để kiểm tra ứng dụng của chúng ta như được thấy ở đây:
// .github/workflows/laravel.yml
laravel-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Create Database
run: |
mkdir -p database
touch database/database.sqlite
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:
DB_CONNECTION: sqlite
DB_DATABASE: database/database.sqlite
run: vendor/bin/phpunit
Để mình mô tả một chút cho các bạn hiểu nhé !
Một job có tên laravel-tests được bắt đầu, job này sẽ tạo ra một máy chủ mới chạy trên Ubuntu (máy chủ này do GitHub cung cấp).
Mỗi bước trong job sẽ bắt bắt đầu chạy như sau:
Bước đầu tiên là kiểm tra nhánh được chỉ định (`main` trong trường hợp này), sau đó nó chuyển sang các tác vụ cụ thể của Laravel như sao chép tệp .env, cài đặt các dependencies PHP, tạo key ứng dụng, cấp quyền cho các thư mục cần thiết, và tạo cơ sở dữ liệu (SQLite).
Cuối cùng, nó sẽ chạy tests (cả Unit test và Feature test) bằng cách sử dụng PHPUnit. Để đảm bảo các tests đang sử dụng là chính xác.
Job sẽ chạy thành công và khớp với ảnh chụp màn hình bên dưới:
Bước 6: Building
Hãy chuyển sang building the assets trong ứng dụng của chúng ta. Để làm được điều đó, chúng ta sẽ tạo một job mới, mà chúng ta sẽ gọi là build.
Thêm đoạn code sau vào bên trong .github/workflows/laravel.yml --- sau bước cuối cùng trong jobs `laravel-tests` nhé !
// .github/workflows/laravel.yml
.....
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2-beta
with:
node-version: '12'
check-latest: true
- name: Install NPM dependencies
run: npm install
- name: Compile assets for production
run: npm run production
NOTE: Chú ý là các bạn nên viết theo đúng định dạng YAML file nhá.
Tương tự như jobs tests laravel, chúng ta tách ra một máy chủ Ubuntu mới và kiểm tra nhánh chính. Sau đó, chúng ta thiết lập Node.js và cài đặt các phụ thuộc npm cần thiết. Cuối cùng, chúng ta biên dịch production.
Deploying
Cuối cùng, hãy thêm một job để deploy ứng dụng của chúng ta. Vì chúng ta sẽ triển khai tới một máy chủ thực, nên chúng ta cần những thứ sau:
- SSH_PRIVATE_KEY. Nếu bạn không có cái này, bạn có thể chạy cmd sau ssh-keygen -t rsa trong terminal máy chủ của mình để tạo khóa mới, sau đó chạy lệnh cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys để cho phép kết nối với private key.
- SSH_HOST. Đây là địa chỉ IP của máy chủ.
- SSH_USERNAME. Đây là tên người dùng máy chủ, trong trường hợp của mình là root . Nếu bạn không biết tên người dùng của mình, bạn có thể sử dụng lệnh whoami trên máy chủ của mình để kiểm tra.
Để thêm những thứ này, bạn hãy truy cập kho lưu trữ GitHub của bạn và nhấp vào Settings .Sau đó đến click vào Secrets and variables và thêm những biến môi trường sau :
- SSH_HOST : Địa chỉ IP của máy chủ
- SSH_PRIVATE_KEY : Hãy copy text trong file thư mục .ssh/id_rsa (private key)
- SSH_USERNAME: Tên user máy chủ của bạn sử dụng để deploy
Hãy thêm một job mới gọi là deploy. Thêm mã code sau vào tệp .github/workflows/laravel.yml sau bước cuối cùng trong job đã xây dựng (vẫn đang trong job đấy nhé sau bước build ấy):
// .github/workflows/laravel.yml
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Deployment
uses: appleboy/ssh-action@main
with:
host: ${{ secrets.SSH_HOST }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
username: ${{ secrets.SSH_USERNAME }}
script: |
cd /var/www/html/
git checkout -f
git pull
Trước khi deploy thì bạn phải chắc chắn rằng trong máy chủ của bạn đã có git repo của dự án của bạn rồi nhé !
Để thực thi các lệnh SSH từ xa, chúng ta sử dụng appleboy/ssh-action, sau đó chỉ định chi tiết máy chủ, được đọc từ secrets kho lưu trữ mà chúng ta đã thêm ở trên. Sau khi kết nối với máy chủ, hãy thêm một số tập lệnh để chạy. Đầu tiên, cd vào thư mục /var/www/html nơi ứng dụng được cung cấp. Sau đó chạy checkout và git pull.
Jobs của bạn thành công nếu bạn thấy một hình ảnh tương tự như bên dưới:
Ok vậy là xong rồi đó , chúc các bạn thành công

Bình luận (0)