Quay lại

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    71 Lượt xem    28 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Build, Test, and Deploy ứng dụng Laravel của bạn với GitHub Actions

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é. 

  1. GitHub account
  2. Knowledge of Laravel
  3. Knowledge of GitHub
  4. 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:

  1. 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.
  2. SSH_HOST. Đây là địa chỉ IP của máy chủ.
  3. 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 checkoutgit 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)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday