在今天開始前,我們先回顧一下 GitHub Action:
當事件發生,GitHub 幫你自動啟動一台雲端電腦,
在那台電腦上執行你定義的步驟。
也就是說:
你不用開自己電腦,GitHub 幫你開「虛擬機」,
並依照你設定的流程跑一段程式。
這台虛擬機是短暫存在的(跑完就消失),
你定義的每一步都會重新下載你的專案並執行。
以往在更新 HTML / CSS 後,每次要手動進入 GitHub → 點 Pages → 等待更新。
如果不想每次都這麼麻煩,
可以透過 GitHub Actions,自動幫你完成「更新 → 編譯 → 部署」的流程。
不僅可以省下時間,也不會忘記更新,還能確保每次 push 都保證是最新版本的網站,
根本超方便!!!
所以我們今天就要來寫一套workflow,達到自動部署這件事情。
一個.yml檔案可以拆成 5 個層次:
當我想要將我前幾天做的靜態網站
就可以寫出下面這個 workflow ,達成自動部署:
name: Deploy Website to GitHub Pages
表示這個在Actions上顯示的workflow名稱。(第一層)
on:
push:
branches: [ main ]
workflow_dispatch: # 可以手動觸發
當我觸發「推送main分支」這個條件時,執行以下指令。
permissions:
contents: read
pages: write
id-token: write
因為手動寫workflow需要部署權限,
所以要允許讀取專案內容、部署 GitHub Pages,
允許 workflow 進行身分驗證(避免錯誤訊息)。
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: 取得專案
uses: actions/checkout@v4
- name: 檢查 HTML 是否存在
run: |
if [ ! -f index.html ]; then
echo "找不到 index.html!"
exit 1
fi
echo "檢查完成,HTML 檔案存在!"
在第一階段:測試網站是否有缺檔,用 Linux 指令檢查檔案是否存在。
若錯誤則中斷流程(不進行部署)。
deploy:
needs: test
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: 再次下載專案
uses: actions/checkout@v4
- name: 設定 GitHub Pages
uses: actions/configure-pages@v5
- name: 上傳網站檔案
uses: actions/upload-pages-artifact@v3
with:
path: ./
- name: 發布到 GitHub Pages
uses: actions/deploy-pages@v4
第二階段:「deploy」只有 test 成功後才會跑。
幫你把 repo 檔案下載到 runner,
指定部署環境名稱(GitHub Pages 必須是 github-pages),
自動抓取部署成功後的網址,
接著上傳網站資料供 GitHub Pages 使用,最後實際把網站部署上去。
關於如何在GitHub上新增 .yml 檔案,可以參考我的上一篇文章!
我們將上述新增為一個 deploy.yml。
接下來,我們需要測試這個 workflow 是否會成功運行。
我們在 Action > 左側有 Deploy Website to GitHub Pages > 在右側點擊 run workflow,
如果成功運行,就會出現綠色勾勾!
Secrets 是用來保護敏感資料的地方,例如:
我們可以在:
Settings → Secrets and variables → Actions → New repository secret
加入一個名稱,比如:DEPLOY_TOKEN。
然後在 workflow 中安全使用:
run: echo "Deploying with token ${{ secrets.DEPLOY_TOKEN }}"
這樣即使別人看到你的 repo,也看不到真正的密碼。
這是團隊專案中最基本的安全原則。
以上為今天的學習!
今天學習明顯比其他天明顯感到困難,
在實務的部分也是調整許久,
希望這篇文章可以幫助到大家!