CI & CD
CI & CD 都是軟體開發中 流程自動化 的概念,
CI/CD 可以 加速軟體開發 與 部署流程,
提高程式碼品質,
降低維護成本,
許多工具與平台如 GitHub、GitLab 等…
都提供了完整的 CI/CD 功能支援
CI(Continuous Integration)
CI 是指在開發過程中,
將程式碼的 修改 & 整合 自動化,
讓開發者能夠頻繁地將 改變 與其他開發者所做的改變整合在一起,
以避免後續整合時發生問題
可以執行如:
程式碼自動編譯
測試
部署到測試環境中
這樣可以確保程式碼的品質
CD(Continuous Delivery/Deployment)
CD 則是指程式的 交付自動化,
讓開發者能夠快速地將程式碼部署到正式環境中,
CD 可以分成兩種形式:
Continuous Delivery
- 在程式碼確定能夠被部署到正式環境前, 將其部署到與正式環境相同的環境中, 並進行手動測試
Continuous Deployment
- 將程式碼直接 自動部署 到正式環境中, 並不需要進行手動測試
GitHub Action
GitHub Actions 是 GitHub 提供的功能,
可以建立自動化 Workflows,
Workflows 存放在 Repository 中,
可以自訂排成工作,
當 Repository 中發生特定事件時,
執行自動化的工作流程
這些事件可以是 push 、 Release 、 pull request 等…
Workflows
可以多多套用別人寫的 actions,
就像寫程式 import 套件一樣,
至於每個 actions 更詳細的調控,
可以參考他們的官方文件
Deploy GitHub Page
這邊是我的 Actions:
name: Deploy GitHub Page # 這個 Action 的名稱
on: # 只有推到 main 才自動化
push:
branches:
- main
workflow_dispatch:
schedule:
- cron: "0 16 * * *" # every day at midnight at UTC+8
jobs:
deploy:
name: Publish Content To Public Site
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true # 原本的 repo 是沒有 submodule 的內容, 要記得加
token: ${{ secrets.GIT_SUBMODULE_DEPLOY_TOKEN }} # Personal access token
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2 # 使用別人做好的 Hugo Actions
with:
hugo-version: "0.110.0"
extended: true
- name: Git Submodule Update
run: |
git submodule init
git submodule update --remote
- name: Build
run: hugo --minify # 使用 Hugo 的指令
- name: Deploy
uses: peaceiris/actions-gh-pages@v3 # 將檔案 commit 到網站 repo
with:
external_repository: jess88tw/jess88tw.github.io
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY}} # ssh Key
publish_dir: ./public
publish_branch: main
cname: www.jesseedgerunner.com
user_name: "github-actions[bot]" # 自訂 user_name
user_email: "github-actions[bot]@users.noreply.github.com"
Action Secrets
在上面的 action 裡,
需要在 Action Secrets 新增 ssh private key & Personal access token:
並且在 GitHub Pages Repository 的 Deploy keys 加入 public key:
大功告成
以後只要 push
到 HUGO 的 Repository,
就會自動執行 GitHub Action 完成自動部屬,
直接省去每次都要在本地生成靜態網站,
然後再 push 到靜態網站的手續,
GitHub Action 會自動幫忙完成 🥂