Tự động deploy code với Github Actions

Bạn muốn mỗi lần push code lên Github thì đoạn code đó cũng sẽ được tự động cập nhật lên VPS, quá trình trên là một trong những hành động trong CI/CD.

Trong bài viết này, mình sẽ chia sẻ cách mình tạo một Github Actions cơ bản cho việc deploy code của 2 project trên Github của mình: tvqhub & tvqhub-laravel

Bước 1:

Các bạn vào phần Actions trong repository của Github, ở đây sẽ có bảng thông tin để các bạn theo dõi (tracking) các workflows đã thiết lập.

Bước 2:

Tạo một Workflow mới, chọn set up a workflow yourself

Bước 3:

Copy paste đoạn code sau đây và commit vào repo, file config này sẽ được lưu tại folder .github/workflows/main.yml

name: CI

on: [push]

jobs:
  deploy:
    if: github.ref == 'refs/heads/master'
    runs-on: [ubuntu-latest]
    steps:
      - uses: actions/[email protected]
      - name: Push to server
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SERVER_USERNAME }}
          key: ${{ secrets.KEY_SSH }}
          script: cd <project_path>
            && php artisan down
            && git pull origin master
            && php artisan optimize:clear
            && composer install
            && npm install
            && php artisan optimize
            && php artisan up

NOTE: đoạn code trên là mình dùng cho Workflow mẫu của project Laravel, mình sử dụng Actions của repo https://github.com/appleboy/ssh-action

  • refs/heads/master: ở đây mình muốn khi push code lên branch master thì sẽ trigger action này.
  • host, username, key: những thông số này mình sẽ khai báo ở bước 4 trong Setting của repo.
  • script: đây là phần để thực hiện các lệnh update code, thay vì thực hiện bằng tay thì bây giờ chỉ cần viết các lệnh đó ở đây.

Bước 4:

Để khai báo các biến trong bước 3, các bạn vào phần Setting > chọn Secrets. Có 3 biến cần thiết lập là:

  • SERVER_IP: chính là IP của VPS (ex: 10.20.30.40)
  • SERVER_USERNAME: tên user đăng nhập vào VPS (ex: ec2-user)
  • KEY_SSH: là nội dung trong file .pem (private key) để ssh vào VPS (ex: -----BEGIN RSA PRIVATE KEY----- xxx -----END RSA PRIVATE KEY-----)
    • !!!Warning: best practice là dùng password thay vì key để bảo mật hơn nhé, vì mình lườiiii nên dùng key luôn cho nhanh.

Okayyy, vậy là đã hoàn tất việc thiết lập một Workflow trong Github Actions, để kiểm tra thì hãy push code lên branch master và vào phần Actions ở bước 1, tất cả các step OK thì sẽ có tick xanh như vậy nè.

Chúc các bạn thành công. Nếu bạn có đóng góp hay thắc mắc, hãy comment phía bên dưới cho mình nhé, mình sẽ cố gắng support và hoàn thiện hơn.