第29天:持續整合與交付 (CI/CD)
課程簡介
持續整合 (CI) 與持續交付 (CD) 是現代軟體開發流程中不可或缺的一部分,這些技術能夠自動化軟體的構建、測試、部署過程,確保代碼在開發過程中能夠快速且穩定地被交付到生產環境。透過 CI/CD 管道,開發團隊能夠持續驗證代碼,減少手動操作並提升部署的效率和可靠性。
學習目標
- 了解持續整合 (CI) 與持續交付 (CD) 的核心概念
- 學會配置 CI/CD 管道
- 探索如何使用 GitHub Actions 或 Azure DevOps 實現自動化構建與部署
- 實作完整的 CI/CD 工作流
課程內容
1. 持續整合 (CI) 的概念與重要性
持續整合 (CI)
持續整合指的是開發者頻繁地將代碼提交到版本控制系統 (如 Git),並透過自動化的測試與構建流程,確保每一次提交都不會破壞系統。
CI 的核心思想是:
- 頻繁地提交代碼,避免長時間分支造成的整合問題
- 每次提交都會觸發自動測試與構建,快速發現錯誤
- 及早發現並解決問題,以減少後期修復成本
CI 的流程
典型的 CI 流程包括:
- 代碼提交:開發者提交代碼到版本控制系統(如 GitHub、GitLab)。
- 自動構建:系統自動構建應用程式,編譯代碼並生成可執行檔案。
- 自動測試:運行單元測試、集成測試,確保系統在每次提交後的穩定性。
- 報告:CI 系統將測試結果報告給開發者,並標註是否有錯誤。
常見的 CI 工具包括:
- GitHub Actions
- Jenkins
- Azure Pipelines
- Travis CI
2. 持續交付 (CD) 的概念與應用
持續交付 (CD)
持續交付指的是代碼在持續整合後,通過自動化的流程將軟體部署到測試、預生產或生產環境中,並且確保每個版本都能隨時發布。
CD 的目標是:
- 讓軟體隨時處於可交付的狀態
- 減少部署過程中的人工干預,降低錯誤風險
- 提高部署頻率與速度,從而更快地向用戶交付新功能與修復
CD 的流程
典型的 CD 流程包括:
- 自動化部署:CI 測試通過後,系統會自動將應用部署到指定環境(如測試環境、預生產環境)。
- 自動化驗證:部署後運行功能測試、自動化 UI 測試來驗證部署是否成功。
- 手動批准(可選):在部署到生產環境之前,可能需要手動批准。
- 自動發布:一旦所有驗證通過,應用將被自動發布到生產環境。
3. 使用 GitHub Actions 進行 CI/CD 自動化
GitHub Actions 的簡介
GitHub Actions 是 GitHub 提供的 CI/CD 工具,它能夠在每次提交或拉取請求 (Pull Request) 時自動執行定義好的工作流,從而實現自動化構建、測試與部署。
建立 CI/CD 工作流
- 建立
.github/workflows/ci.yml
文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
name: .NET CI/CD
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.x'
- name: Restore dependencies
run: dotnet restore
- name: Build project
run: dotnet build --configuration Release --no-restore
- name: Run tests
run: dotnet test --no-build --verbosity normal
deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.x'
- name: Deploy to Azure Web App
run: |
az webapp deploy --name <YOUR_WEB_APP_NAME> --resource-group <YOUR_RESOURCE_GROUP>
- 工作流解說:
- build 工作負責構建與測試應用程式。
- deploy 工作在測試成功後,將應用部署到 Azure Web App。
4. 使用 Azure DevOps 進行 CI/CD 自動化
Azure DevOps 的簡介
Azure DevOps 是 Microsoft 提供的 DevOps 平台,支援持續整合、持續交付、版本控制、工作管理等功能。它提供完整的 CI/CD 工作流自動化工具。
建立 Azure Pipelines
建立 pipeline:進入 Azure DevOps 專案,選擇 Pipelines,然後點擊 New Pipeline。
選擇來源控制:選擇使用 GitHub 或 Azure Repos 的代碼儲存庫。
選擇模板:選擇
.NET Core
模板,並進行配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.x'
- script: |
dotnet build --configuration Release
dotnet test
displayName: 'Build and Test'
- task: AzureWebApp@1
inputs:
azureSubscription: '<Azure_Subscription>'
appName: '<App_Service_Name>'
package: '$(System.DefaultWorkingDirectory)/**/*.zip'
- 運行 pipeline:保存並運行管道,系統會自動執行構建、測試,並將應用部署到 Azure。
5. 實作練習
- 配置 GitHub Actions:
- 在 GitHub 儲存庫中創建 CI/CD 工作流,實現自動構建、測試與部署。
- 使用 Azure DevOps 建立 CI/CD 管道:
- 創建一個 Azure Pipelines,並將應用程式自動部署到 Azure Web App。
- 實作綠藍部署(Blue-Green Deployment):
- 在持續交付過程中實現綠藍部署,確保無中斷更新應用程式。
教學重點
- 理解 CI/CD 的核心概念及其在軟體開發中的重要性。
- 學會使用 GitHub Actions 或 Azure DevOps 配置持續整合與交付的自動化工作流。
- 掌握自動化部署與測試的技巧,並實現應用的快速發布。
CI/CD 的實作將幫助開發團隊提升代碼交付的速度與質量,確保應用程式能夠穩定且快速地推送到生產環境,實現更高效的開發流程。
本文章以 CC BY 4.0 授權