文章

第29天:持續整合與交付 (CI/CD)

課程簡介

持續整合 (CI) 與持續交付 (CD) 是現代軟體開發流程中不可或缺的一部分,這些技術能夠自動化軟體的構建、測試、部署過程,確保代碼在開發過程中能夠快速且穩定地被交付到生產環境。透過 CI/CD 管道,開發團隊能夠持續驗證代碼,減少手動操作並提升部署的效率和可靠性。


學習目標

  • 了解持續整合 (CI) 與持續交付 (CD) 的核心概念
  • 學會配置 CI/CD 管道
  • 探索如何使用 GitHub Actions 或 Azure DevOps 實現自動化構建與部署
  • 實作完整的 CI/CD 工作流

課程內容

1. 持續整合 (CI) 的概念與重要性

持續整合 (CI)

持續整合指的是開發者頻繁地將代碼提交到版本控制系統 (如 Git),並透過自動化的測試與構建流程,確保每一次提交都不會破壞系統。

CI 的核心思想是:

  • 頻繁地提交代碼,避免長時間分支造成的整合問題
  • 每次提交都會觸發自動測試與構建,快速發現錯誤
  • 及早發現並解決問題,以減少後期修復成本

CI 的流程

典型的 CI 流程包括:

  1. 代碼提交:開發者提交代碼到版本控制系統(如 GitHub、GitLab)。
  2. 自動構建:系統自動構建應用程式,編譯代碼並生成可執行檔案。
  3. 自動測試:運行單元測試、集成測試,確保系統在每次提交後的穩定性。
  4. 報告:CI 系統將測試結果報告給開發者,並標註是否有錯誤。

常見的 CI 工具包括:

  • GitHub Actions
  • Jenkins
  • Azure Pipelines
  • Travis CI

2. 持續交付 (CD) 的概念與應用

持續交付 (CD)

持續交付指的是代碼在持續整合後,通過自動化的流程將軟體部署到測試、預生產或生產環境中,並且確保每個版本都能隨時發布。

CD 的目標是:

  • 讓軟體隨時處於可交付的狀態
  • 減少部署過程中的人工干預,降低錯誤風險
  • 提高部署頻率與速度,從而更快地向用戶交付新功能與修復

CD 的流程

典型的 CD 流程包括:

  1. 自動化部署:CI 測試通過後,系統會自動將應用部署到指定環境(如測試環境、預生產環境)。
  2. 自動化驗證:部署後運行功能測試、自動化 UI 測試來驗證部署是否成功。
  3. 手動批准(可選):在部署到生產環境之前,可能需要手動批准。
  4. 自動發布:一旦所有驗證通過,應用將被自動發布到生產環境。

3. 使用 GitHub Actions 進行 CI/CD 自動化

GitHub Actions 的簡介

GitHub Actions 是 GitHub 提供的 CI/CD 工具,它能夠在每次提交或拉取請求 (Pull Request) 時自動執行定義好的工作流,從而實現自動化構建、測試與部署。

建立 CI/CD 工作流

  1. 建立 .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>
  1. 工作流解說
    • build 工作負責構建與測試應用程式。
    • deploy 工作在測試成功後,將應用部署到 Azure Web App。

4. 使用 Azure DevOps 進行 CI/CD 自動化

Azure DevOps 的簡介

Azure DevOps 是 Microsoft 提供的 DevOps 平台,支援持續整合、持續交付、版本控制、工作管理等功能。它提供完整的 CI/CD 工作流自動化工具。

建立 Azure Pipelines

  1. 建立 pipeline:進入 Azure DevOps 專案,選擇 Pipelines,然後點擊 New Pipeline

  2. 選擇來源控制:選擇使用 GitHub 或 Azure Repos 的代碼儲存庫。

  3. 選擇模板:選擇 .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'
  1. 運行 pipeline:保存並運行管道,系統會自動執行構建、測試,並將應用部署到 Azure。

5. 實作練習

  1. 配置 GitHub Actions
    • 在 GitHub 儲存庫中創建 CI/CD 工作流,實現自動構建、測試與部署。
  2. 使用 Azure DevOps 建立 CI/CD 管道
    • 創建一個 Azure Pipelines,並將應用程式自動部署到 Azure Web App。
  3. 實作綠藍部署(Blue-Green Deployment)
    • 在持續交付過程中實現綠藍部署,確保無中斷更新應用程式。

教學重點

  • 理解 CI/CD 的核心概念及其在軟體開發中的重要性。
  • 學會使用 GitHub Actions 或 Azure DevOps 配置持續整合與交付的自動化工作流。
  • 掌握自動化部署與測試的技巧,並實現應用的快速發布。

CI/CD 的實作將幫助開發團隊提升代碼交付的速度與質量,確保應用程式能夠穩定且快速地推送到生產環境,實現更高效的開發流程。

本文章以 CC BY 4.0 授權