分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
GitHub Flow 是由 GitHub 的聯合創始人 Scott Chacon 在 2011 年提出的。他當時撰寫了一篇簡單的指南,概述了一種輕量化、適合敏捷開發的分支管理策略,這就是我們今天所熟知的 GitHub Flow。上發表的分支策略
優點如下:
優點 | 說明 |
---|---|
1. 簡單分支 | 分支結構簡單,僅需管理主分支(main)和功能分支(feature branches)。 |
2. 適合敏捷開發 | 支持快速迭代,開發人員可以輕鬆創建短期功能分支,進行並行開發,避免對主分支的直接影響。 |
3. 減少合併衝突 | 短期分支設計降低了長期分支可能引發的代碼衝突,簡化合併工作。 |
4. GitHub 工具無縫集成 | 自然適配 GitHub 平台,特別是 Pull Request 流程和內建的 CI/CD 工作流功能(GitHub Actions)。 |
缺點如下:
缺點 | 說明 |
---|---|
1. 不適合穩定、大型產品 | 缺乏明確的測試分支(如 Dev、QA、Stage 分支),版本控制不夠細緻。分支模型較為單一。 |
2. 頻繁部署成本高 | 合併到主分支都可能觸發部署,對於高頻次的提交可能導致資源浪費和雲端成本增加。 |
3. 缺少多環境支持 | 預設不支持分開的測試和生產環境,需要額外的標籤或配置來區分環境部署。 |
GitHub Flow 的 GitGraph 流程圖
所有的開發、修復,都是基於 main 分支
若要開發新工作時,要建立分支,並且在 feature 分支上進行開發
切出 feautre/Work1,並且 Switch 到此分支進行開發
我們在 feature/Work1 上調整代碼:
並且 Push:
在 GitHub Flow 中,應進行審核的工作 => Pull Request
由審核人員(管理者、主管、相關開發同事等等),統一 Check 後才會合併到 main 中
可以觀察,除了主分支外,剩下的都是功能分支
在開發完成後,應刪除其開發分支( feature/Work1 ),最終仍只保留主分支
發起 Pull Reqeust 審核機制,觸發時間點 :
當有開發人員回報自己的代碼已簽入某個 Feature 分支時,並且希望合併到 main 上(做後續的部署、QA 測試)
回到 Github 此 Repository 上,選擇 New pull request
選擇正確的合併分支
左邊 : 目標
右邊 : 來源
並且將發起的標題、內容輸入
相關人員就會收到發起:
這時,審核人員,可以打開 Files Changed -> 選擇 Review Changes
開始審核所有分支的異動
若審核通過,在執行 Submit review
並且已審核會有 已完成數量/總數 的顯示:
在此 Repository 的 Pull Request 可以看到此分支的審核打勾,表示都完成了
最後一步驟,就是將 feature/Work1 分支合併到 main 分支上
可選擇 Merge pull request
並且執行 Confirm merge
至此 Github Flow 流程中的審核與合併分支已完成
在 Pull Request 完成合併後,正常流程會要部署到 Qat/Stage/Production 上
在 Github Flow 中會採用建立 Tag 的方式,然後進行部署,這邊會採用 Github Action 的方式實現自動化 CICD 流程
在 main 主分支上,建立 Github Action 用的流程檔案 (路徑 : .github/workflows/build.yml):
當 Pull Reqeust(PR) 完成後,需要建置一次專案,測試,確保整個專案是正常的。
name: .NET Core Build and Test
# 觸發條件
on:
pull_request:
branches: [ "main"] # 當對這些分支發起 PR 時觸發
# 設定工作權限
permissions:
contents: read
issues: read
checks: write
pull-requests: write
jobs:
build:
runs-on: ubuntu-latest # 使用 Ubuntu 最新版本
steps:
# 1. CheckOut 程式碼
- uses: actions/checkout@v4
# 2. 顯示目錄結構(用於偵錯)
- name: Show directory structure
run: |
pwd
ls -la
# 3. 設定 .NET Core SDK (才可以建置)
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0.x # 指定 .NET 8.0 版本
# 4. 還原 NuGet 套件
- name: Restore dependencies
working-directory: ./GitHubFlowBranch
run: dotnet restore
# 5. 建置專案
- name: Build
working-directory: ./GitHubFlowBranch
run: dotnet build --no-restore --configuration Release
# 6. 執行測試(通常需要在代碼撰寫完成,目前範例未實現,這裡示意)
- name: Test
working-directory: ./GitHubFlowBranch
run: dotnet test --no-build --verbosity normal --configuration Release
main 主分支上,建立 Github Action 部署用的 qat, stage, production 流程檔案
路徑 : .github/workflows/deploy-to-qat.yml
路徑 : .github/workflows/deploy-to-stage.yml
路徑 : .github/workflows/deploy-to-production.yml
最高管理者打上 Tag 時,會自動觸發部署流程,以下 deploy-to-qat.yml 的內容(以 tag 確定環境):
# 檔案路徑: .github/workflows/deploy-to-qat.yml
name: .NET Core CICD Qat
# 觸發條件
on:
push:
tags:# 當簽入 qat-1.0.0 標籤時進行部署
- 'qat-*'
# 設定工作權限
permissions:
contents: read
issues: read
checks: write
pull-requests: write
jobs:
build:
runs-on: ubuntu-latest # 使用 Ubuntu 最新版本
steps:
# 1. CheckOut 程式碼
- uses: actions/checkout@v4
# 2. 顯示目錄結構(用於偵錯)
- name: Show directory structure
run: |
pwd
ls -la
# 3. 設定 .NET Core SDK (才可以建置)
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0.x # 指定 .NET 8.0 版本
# 4. 還原 NuGet 套件
- name: Restore dependencies
working-directory: ./GitHubFlowBranch
run: dotnet restore
# 5. 建置專案
- name: Build
working-directory: ./GitHubFlowBranch
run: dotnet build --no-restore --configuration Release
# 6. 執行測試(通常需要在代碼撰寫完成,目前範例未實現,這裡示意)
- name: Test
working-directory: ./GitHubFlowBranch
run: dotnet test --no-build --verbosity normal --configuration Release
# 7.發布專案 - 這裡要再改寫成 QAT 環境位置,部署過去
- name: Publish
working-directory: ./GitHubFlowBranch
run: dotnet publish --no-restore --configuration Release --output ./publish
最終,會有以下 4 個檔案
再次進行 Pull Request ,並且成功合併 (第三部分 Step 8.) ,會觸發建置
接著測試 Qat 是否可以正確部署, Create Tag -> 輸入 qat-1.0.0
※依照 .yml 腳本的規則,我們觸發 Qat 部署條件是 qat-*
接著 Push -> 包含 Tag
Push 成功:
回到 Github Action 觀察,我們的程式提交 Tag 時,就會自動化部署到 Qat 環境上。