如何使用GitHub Actions自動化部署我們的項目
前面我們已經完成了項目的部署,但是每次部署都需要手動操作,過程繁瑣又浪費時間。因此,我們需要使用自動化工具來實現自動化部署。本篇文章將為大家介紹如何使用 GitHub Actions
來實現我們的代碼在服務器上自動部署。
GitHub Actions
GitHub Actions
是 GitHub
提供的一個自動化工具,可以幫助我們實現自動化部署。它可以在我們的代碼倉庫中設置一些規則,當我們的代碼發生變化時,GitHub Actions
會自動執行這些規則,從而實現自動化部署。
根據我們的項目,我們需要在 GitHub Actions
做的操作很簡單:
- 連接服務器
- 拉取最新代碼
- 執行 docker 相關命令完成部署(根據你項目本身部署方式來決定)
我們在根目錄新建一個 .github/workflows/deploy.yml
文件,在其中設置我們的規則。
name: Deploy Remote Server
on:
push:
branches:
- master # 觸發條件的分支,可以根據需要修改
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: xxx
uses: xxx # 檢出代碼
... # 寫一些規則步驟
通過 SSH 連接阿里云服務器
首先我們要做的是讓github Actions
可以通過SSH
連接到我們的服務器,這樣才能在我們服務器是執行相關部署命令。
所以我們需要在服務器上生成一個公鑰和一個私鑰,然后將公鑰添加到服務器的authorized_keys
文件中。這樣,github Actions
就可以通過私鑰連接到服務器了。那么,我們如何在阿里云服務器生成公鑰和私鑰呢?
登錄阿里云,進入控制臺。
在控制臺中找到密鑰對
,點擊創建密鑰對
輸入名稱之后點擊確定
會自動下載一個私鑰文件name.pem
,記得保存好這個私鑰文件。
創建完成之后復制公鑰文件的內容。
然后遠程連接到我們的服務器實例執行nano ~/.ssh/authorized_keys
或者命令,將公鑰文件的內容粘貼到authorized_keys
文件中(記得是追加到已有文件后面)。此時我們就可以通過私鑰連接到服務器了。
然后我們開始配置Github Actions
相關參數。進入我們需要部署的 git 倉庫,然后配置相關參數SERVER_IP:服務器ip
,SSH_USER:服務器用戶名
,SSH_PRIVATE_KEY:連接服務器私鑰(就是我們前面下載的私鑰文件的內容)
配置完成之后,我們就可以在deploy.yml
通過${{ secrets.SSH_USER }}
等等來獲取配置的參數了。我們首先測試是否能連接到服務器。
name: TEST SSH
on:
push:
branches:
- master # 觸發條件,可以根據需要修改
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2 # 檢出代碼,包括 deploy.sh 文件
- name: Deploy to Remote Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
echo "ssh 連接成功"
然后提交一下代碼,去看一下 actions 中的情況。
發現已經連接成功了。點進去也可以看到相關日志信息。
部署代碼
接下來我們需要編寫部署代碼的相關規則了。上面已經提到過只需要三步即可:
- 連接服務器
- 拉取最新代碼
git pull
- 執行 docker 相關命令完成部署
sudo docker compose...
我們在deploy.yml
中添加如下代碼:
name: Deploy to Remote Server
on:
push:
branches:
- master # 觸發條件,可以根據需要修改
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy to Remote Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
set -e # 如果任何命令失敗,立即退出
cd ~/web_server/fs-admin/admin_nest # 進入項目目錄
git pull # 拉取最新代碼
sudo docker compose down --rmi all # 停止并刪除所有容器
sudo docker compose --env-file .env.prod up -d # 構建并啟動容器
注意執行docker compose xxx up
的時候需要加上-d
讓 docker 后臺運行,不然會導致github actions
會處于一直執行的狀態。
我們提交代碼,看下日志是否能正常部署。
ima
可以看到已經成功部署了,同時后端接口也可以訪問通了。后續我們代碼有更新的話直接提交到 master 分支即可完成自動部署了,是不是非常方便!
參考資料
[1] https://github.com/qddidi/fs-admin: https://github.com/qddidi/fs-admin