建立我的第一個Blog - part 4: Github Action CI/CD 自動Deploy CMS (self hosted runner)
引言
GitHub Actions 是 GitHub 提供的一種持續整合(CI)和持續交付(CD)平台,旨在自動化軟體開發流程。它允許開發者在代碼庫中定義工作流程,以響應各種事件,例如代碼提交、拉取請求或問題創建等。
在這個Blog中,我們使用了Docker來運行我們的strapi、postgreSQL database,當我們每次改完程式的時候,push到github的時候,我們都要去到server去pull code並再次運行docker compose up。而Github action就可以幫我們自動化這些事情。
建立self-hosted runner
- 打開github > 打開你的repository
- 點開repository的Settings頁面
- 在左邊選Actions > Runners
- 點左上角New self-hosted runner
- 按照他的指示,在你要運行docker的server上執行他給你的指令。
建立 Workflows
Workflows是一系列自動化的步驟,當特定事件發生時會被觸發。工作流程通常以 YAML 格式定義,並存放在 .github/workflows 目錄下。
所以我們第一步是建立 .github/workflows/deploy.yaml
name: Deploy strapi Backend (PROD)
on:
push:
branches:
- main
paths:
- "cms/**"
jobs:
build-and-test:
runs-on: self-hosted
defaults:
run:
working-directory: ./cms
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: compose up
run:
docker compose --env-file .env.prod -f compose.yml -f compose.prod.yml
up -d --build
這邊有幾個地方需要講解一下:
第一段on:
這段主要用來設定這個workflow 在什麼時機會trigger,我們設定了在push的時候,push的時候的branches包括 main,以及有改變的檔案的paths包括cms開頭的
第二段jobs
workflow裡面可以有多個job。
build是我給這個job的名字
runs-on指定他在什麼runner上運行,這邊是運行在self hosted 的runner上
working-directory指定這個job在哪個directory運行
steps job裡面可以有多個steps
第一個step: checkout
用於checkout我們的repository,相當於git clone到runner上並checkout到main branch。actions/checkout@v4是github提供的plugin
第二個step: 運行compose up
run用來執行命令
這邊我們執行docker compose up
建議在depoy的時候,執行的命令應該跟我們在開發時的命令一致,以減少deploy時及開發時有不一樣,避免錯誤。這邊就是使用了我們之前在package.json script 裡的compose:up
