GitHub Actions 部署專案到伺服器上
前言 今天嘗試用了 GitHub Actions 把我的部署過程自動化,由於這個專案 pay 太少了只是單次活動使用的靜態網頁,不需要測試,所以這次會專注在部署上。 步驟 建立 access token 建立 workflow 建立 secret 保管機敏資料 優化探討 建立 access token 為了方便你建立 token,我直接把連結幫你點好放在下面了,不用謝 😊 https://github.com/settings/tokens?type=beta 點進去右上角的 Generate new token,然後填妥 Token name, 過期時間,並且選擇要可以操作哪些 repository,為了安全性請盡量不要使用 All repositories 的選項,再到下面的 Repository permissions 中找到 Contents,將 No access 改成 Read and write,這樣就可以透過 token 直接 clone private repository 而不需登入。 建立完成之後會回到前一頁,我們就可以看到 token 是什麼了,直接複製起來留著後面使用。 建立 Secret 管理機敏資料 請直接參考下面的 code,在專案根目錄建立 .github/workflows/deploy.yaml # work flow 的名字 name: deploy to dev server # 表示在 master 這個分支被推送 commit 的時候 # 會執行這個 workflow on: push: branches: - master jobs: # 定義我們的 job # job 會包含好幾個 step deploy: # 定義這個 job 要跑在使用 ubuntu 的 runner 上 runs-on: ubuntu-latest # 開始寫這個 job 的操作步驟 steps: # 這個 step 用到了 appleboy 大大寫的 ssh-action@v1.0.3 # 用來連上我們自己的開發伺服器進行操作 - name: Deploy uses: appleboy/ssh-action@v1.0.3 with: # 寫入資訊告訴 ssh-action 要連線的參數 # ${{ secrets.XXX }} 會帶入等等在 github 上設定的那些機敏資訊 host: ${{ secrets.SSH_HOST }} port: ${{ secrets.SSH_PORT }} username: ${{ secrets.SSH_USER }} password: ${{ secrets.SSH_PASSWORD }} # 接下來就是正常我們會在 server 上進行的那些操作了 # | for multiline script script: | cd /home/dev # 檢查 repo 資料夾是否存在,不在的話使用 clone # 已經 clone 過就使用 pull 更新伺服器上的檔案 if [ ! -d "<repo-name>" ]; then git clone https://${{ secrets.GIT_ACCESS_TOKEN }}@github.com/<username>/<repo-name>.git cd <repo-name> else cd <repo-name> git pull fi cd /home/dev # 檢查是否成功,成功才繼續下一步處理相依性套件/函式庫下載 if [ ! -d "<repo-name>" ]; then exit 1 fi # 進到對應的資料夾,用 curl 下載套件/函式庫 cd ./<repo-name>/lib/ if [ ! -d "bootstrap-5.3.3-dist" ]; then mkdir bootstrap-5.3.3-dist curl -o bs.zip -sL https://github.com/twbs/bootstrap/releases/download/v5.3.3/bootstrap-5.3.3-dist.zip unzip -q bs.zip rm -f bs.zip fi 都寫完貼上之後直接 commit 並推上 GitHub 就可以了,到 repo 裡你應該會直接看到 actions 出錯的訊息,接下來我們就把 workflow 中用到的 secret 填到 repo 中。 ...