iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0
自我挑戰組

Git 與 GitHub 入門日誌系列 第 25

Day 25:GitHub Actions 進階之自動化與安全部署實務

  • 分享至 

  • xImage
  •  

在今天開始前,我們先回顧一下 GitHub Action:
當事件發生,GitHub 幫你自動啟動一台雲端電腦,
在那台電腦上執行你定義的步驟。

也就是說:
你不用開自己電腦,GitHub 幫你開「虛擬機」,
並依照你設定的流程跑一段程式。

這台虛擬機是短暫存在的(跑完就消失),
你定義的每一步都會重新下載你的專案並執行。


什麼是自動部署(Auto Deployment)?

以往在更新 HTML / CSS 後,每次要手動進入 GitHub → 點 Pages → 等待更新。
如果不想每次都這麼麻煩,
可以透過 GitHub Actions,自動幫你完成「更新 → 編譯 → 部署」的流程。

不僅可以省下時間,也不會忘記更新,還能確保每次 push 都保證是最新版本的網站,
根本超方便!!!
所以我們今天就要來寫一套workflow,達到自動部署這件事情。


Workflow 的結構解剖

一個.yml檔案可以拆成 5 個層次:

  • name : Workflow的名稱,會顯示在 GitHub Actions 介面上。
  • on : 觸發條件,可定義何時自動執行(push、pull_request、手動等)。
  • jobs : 任務集合,例如 test、build、deploy。
  • runs-on : 運行環境,可指定要用哪種虛擬機(ubuntu、windows、mac)。
  • steps : 任務步驟,可寫要執行的指令或 action 模組。

設計自動部署流程

當我想要將我前幾天做的靜態網站

  • push 到 main 後自動檢查檔案是否完整
  • 通過後自動上傳到 GitHub Pages

就可以寫出下面這個 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。
https://ithelp.ithome.com.tw/upload/images/20251007/201691950YWR7aYOrn.png

接下來,我們需要測試這個 workflow 是否會成功運行。
我們在 Action > 左側有 Deploy Website to GitHub Pages > 在右側點擊 run workflow,
如果成功運行,就會出現綠色勾勾!
https://ithelp.ithome.com.tw/upload/images/20251007/20169195cpeLMj5cIs.png


Secrets 的重要性

Secrets 是用來保護敏感資料的地方,例如:

  • 部署用的 token
  • API 金鑰
  • 伺服器密碼

我們可以在:
Settings → Secrets and variables → Actions → New repository secret
加入一個名稱,比如:DEPLOY_TOKEN。

然後在 workflow 中安全使用:
run: echo "Deploying with token ${{ secrets.DEPLOY_TOKEN }}"

這樣即使別人看到你的 repo,也看不到真正的密碼。
這是團隊專案中最基本的安全原則。


以上為今天的學習!
今天學習明顯比其他天明顯感到困難,
在實務的部分也是調整許久,
希望這篇文章可以幫助到大家!


上一篇
Day 24:GitHub Actions 入門
下一篇
Day 26:GitHub Actions 進階之延伸實作
系列文
Git 與 GitHub 入門日誌30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言