iT邦幫忙

2024 iThome 鐵人賽

DAY 6
1

在今天的文章中,我將簡單介紹持續交付的核心原則、佈署策略,及如何在 Azure DevOps 中實現它。
持續交付(Continuous Delivery, CD)是 DevOps 中的重要一環,它的目標是讓應用程式能夠隨時佈署到生產環境(正式環境)。通過自動化構建、測試和佈署流程,能夠大幅度減少軟體交付的風險和時間成本,並提高團隊的敏捷性!
https://ithelp.ithome.com.tw/upload/images/20240920/20169492TOZrYFD7jZ.jpg
圖片來源


持續交付 (CD) 是什麼?

核心原則

  1. 自動化佈署流程

    持續交付的第一步是確保佈署流程完全自動化。這意味著每個應用程式更新都可以通過單一指令或事件觸發,自動完成構建、測試及佈署,無需手動干預。

  2. 持續測試與驗證

    在每次程式碼變更後,自動化測試應該自動運行,並在佈署之前確保應用程式的穩定性與正確性。持續測試包括單元測試、集成測試以及端到端測試,這些測試過程可確保應用程式在更新後能夠正確運行。

  3. 隨時可佈署的狀態

    一個持續交付的系統,應用程式無論何時都應該處於「可佈署」狀態。這樣不僅能讓團隊快速響應市場需求,還能確保當需要修補漏洞或解決生產問題時能立即發布更新(Release)。

  4. 小而頻繁的變更

    持續交付強調頻繁的小變更,而不是大規模的更新。這樣能夠降低每次變更的風險,並更容易發現與修復問題。

  5. 版本控制與環境一致性

    使用版本控制來管理程式碼和配置文件,並確保開發、測試和正式環境的配置一致性,這樣能夠減少在不同環境之間移動程式碼時發生的錯誤。

佈署策略

在 CD Pipeline 中,可以根據需求配置不同的佈署策略,例如:

  • 滾動佈署 (Rolling Deployment): 將應用程式逐步佈署到不同的實例上,避免停機時間。
  • 藍綠佈署 (Blue-Green Deployment): 同時維護兩個版本的應用程式(藍與綠),測試新版本的應用程式後再將流量切換到新版本。
  • 金絲雀佈署 (Canary Deployment): 只將新版本的部分流量導向小比例用戶,用來測試新版本的穩定性。

佈署驗證

持續交付還應包括佈署驗證的步驟,例如:

  • 健康檢查: 確保應用程式在佈署後能正常運行。
  • 自動回復: 如果新版本在正式環境中出現重大問題,可以自動回復(Rollback)到上一個穩定版本。

持續交付 (CD) 的優點

  1. 縮短交付週期

    持續交付使得應用程式能更快、更頻繁地推送至正式環境,減少了產品上市時間。

  2. 減少風險

    因為持續交付強調小而頻繁的變更,這樣更容易檢測問題並快速修復,降低了每次佈署的風險。

  3. 提高團隊效率

    團隊不再需要手動進行測試與佈署,這減少了人力成本並提升了整體效率。

  4. 增強市場競爭力

    持續交付讓團隊能夠快速迭代產品,應對市場變化和用戶需求,增強了競爭力。


如何在 Azure DevOps Pipeline 中實現持續交付

在 Azure DevOps 中設置持續交付 (CD) 能夠幫助我們將應用程式自動佈署至正式環境。

1. 建立 Azure DevOps Pipeline

  1. 登入 Azure DevOps
    • 登入 Azure DevOps 並選擇要進行 CD 設置的專案。
  2. 建立新的 Pipeline
    • 在專案頁面左側選擇 Pipelines,接著點擊 New Pipeline 來開始設定。
    • 選擇版本控制系統,例如 Azure Repos GitGitHub,並選擇 repository。
  3. 選擇 YAML 文件或 Classic UI
    • Azure DevOps 提供兩種方式來設置 CI/CD Pipeline:通過 YAML 文件Classic UI。在這裡我們將使用 YAML 文件進行 CD 設置,因為它更靈活且便於版本控制。

2. 編寫 YAML 文件來實現持續交付

以下是一個簡單的 YAML 文件範例,展示如何通過 Azure Pipelines 佈署一個 Python Web 應用程式到 Azure App Service。

# 這是用來實現持續整合與持續交付的 YAML 文件

trigger:
  - main  # 當 main 分支有任何變更時觸發 Pipeline

pool:
  vmImage: 'ubuntu-latest'  # 使用的虛擬機映像

steps:
# 設定 Python 版本
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.x'
  displayName: '選擇 Python 版本'

# 安裝 Python 依賴項
- script: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt
  displayName: '安裝依賴項'

# 執行單元測試
- script: |
    pytest
  displayName: '執行單元測試'

# 構建專案並準備佈署
- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/app.zip'
  displayName: '壓縮應用程式檔案'

# 發佈構建產物
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/app.zip'
    ArtifactName: 'drop'
  displayName: '發佈構建產物'

# 佈署至 Azure App Service
- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Your-Azure-Subscription>'  # 替換成你的 Azure 訂閱
    appName: '<Your-App-Service-Name>'  # 替換成你的應用程式服務名稱
    appType: webApp
    package: '$(Build.ArtifactStagingDirectory)/drop/app.zip'
  displayName: '佈署到 Azure App Service'

3. 佈署到 Azure Web App

這個 YAML 文件中的關鍵步驟是將應用程式佈署到 Azure Web App,以下是步驟的詳細解釋:

  1. 選擇 Python 版本

    UsePythonVersion@0 這個步驟中,選擇要使用的 Python 版本。

  2. 安裝依賴項

    透過 pip install 指令來安裝 requirements.txt 中定義的所有依賴項。

  3. 執行測試

    使用 pytest 來執行單元測試,確保應用程式的正確性。

  4. 壓縮應用程式

    使用 ArchiveFiles@2 來將應用程式的所有檔案壓縮成 .zip 檔案,準備進行佈署。

  5. 發佈構建產物

    使用 PublishBuildArtifacts@1 來發佈壓縮後的應用程式檔案。

  6. 佈署到 Azure Web App

    使用 AzureWebApp@1 來將壓縮後的應用程式檔案佈署到 Azure Web App 中。記得替換 azureSubscriptionappName 參數為你的 Azure 訂閱和應用程式名稱。

4. 確認並執行 CD Pipeline

  1. 檢查 Pipeline
    • 在 Azure DevOps 上完成 YAML 文件編輯後,點擊 Save 來儲存配置。
    • Azure DevOps 會自動檢查 YAML 文件的語法錯誤,並顯示檢查結果。
  2. 手動觸發 Pipeline
    • 儲存 YAML 文件後,可以手動觸發 Pipeline,或者等待當有變更推送到 main 分支時自動觸發。
    • 在 Pipeline 中會顯示每個步驟的執行情況,包括測試結果、構建產物發佈及佈署狀態。
  3. 確認應用程式是否成功佈署
    • 佈署完成後,確認應用程式是否已成功上線並能正常運行。

結語&預告

持續交付(CD) 是 DevOps 的核心實踐之一,通過自動化構建、測試和佈署流程,開發團隊能夠更高效地將應用程式交付給使用者。無論是縮短交付週期、提高交付質量,還是降低風險,CD 都為企業帶來了巨大的競爭優勢。在 Azure DevOps 的支持下,我們可以簡單地實現持續交付,並利用容器化技術、Kubernetes 及 GitOps 等工具,進一步提升應用程式的可擴展性和可靠性!💪

明天的文章將聚焦於 YAML 文件的深入探討,並展示如何使用 YAML 文件來定義 CI/CD 工作流程。


上一篇
Day05 - 使用 Azure DevOps Pipelines 持續集成 (CI)
下一篇
Day07 - 使用 YAML 定義 Pipeline: 條件邏輯與變數的應用
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言