使用持續整合的建議

適用于此 Azure Well-Architected Framework 營運卓越檢查清單建議:

OE:04 遵循經過業界證明的開發和測試做法,將軟體發展和品質保證程式優化。 如需清楚的角色指定,請將工具、原始檔控制、應用程式設計模式、檔和樣式指南等元件之間的做法標準化。

相關指南改善建置 | 速度標準化工具和程式

隨著程式碼的開發、更新或甚至移除,具有直覺且安全的方法,將這些變更整合到主要程式碼分支中,可讓開發人員提供價值。

身為開發人員,您可以進行小型程式碼變更、將這些變更推送至程式碼存放庫,並取得品質、測試涵蓋範圍和導入 Bug 的幾乎即時意見反應。 此程式可讓您更快速且更有信心且風險較低。

持續整合 (CI) 是整合原始檔控制系統和軟體部署管線的做法,為軟體開發團隊提供自動化的組建、測試和意見反應機制。

主要設計策略

持續整合是開發人員用來定期將軟體更新整合到原始檔控制系統的軟體發展實務。

當工程師建立 GitHub 提取要求以向 CI 系統發出訊號,表示程式碼變更已準備好整合時,就會開始持續整合程式。 在理想情況下,整合程式會針對數個基準和測試驗證程式代碼。 然後,它會針對這些測試的狀態,向要求工程師提供意見反應。

如果基準檢查和測試順利進行,整合程式會產生並階段將部署已更新軟體的資產。 這些資產包括已編譯的程式碼和容器映射。

持續整合可協助您執行下列動作,更快速地提供高品質的軟體:

  • 針對程式碼執行自動化測試,以提供重大變更的早期偵測。
  • 執行程式碼分析,以確保程式碼的標準、品質和設定。
  • 執行合規性和安全性檢查,以確保軟體沒有已知的弱點。
  • 執行接受或功能測試,以確保軟體如預期般運作。
  • 提供偵測到問題的快速意見反應。
  • 在適用的情況下,會產生可部署的資產或包含已更新程式碼在內的套件。

持續整合管線

若要達成持續整合,請使用軟體解決方案來管理、整合和自動化流程。 常見的作法是使用持續整合管線。

持續整合管線牽涉到一段軟體 (通常裝載于雲端) ,可提供:

  • 用於執行自動化測試的平臺。
  • 合規性掃描。
  • 報告。
  • 構成持續整合程式的其他所有元件。

在大部分情況下,管線軟體會附加至原始檔控制,如此一來,當建立提取要求或軟體合併至特定分支時,就會執行持續整合管線。 原始檔控制整合也可讓您直接在提取要求上提供 CI 意見反應。

許多解決方案,例如 Azure Pipelines 或GitHub Actions,都提供持續整合管線的功能。

原始檔控制整合

持續整合管線與原始檔控制系統整合是啟用快速、自助式程式碼貢獻的關鍵。

CI 管線會在新建立的提取要求上執行。 管線包含所有測試、安全性評定和其他檢查。 CI 測試結果會直接出現在提取要求中,以允許對品質提供幾乎即時的意見反應。

另一個熱門做法是建置小型報表或徽章,可在原始檔控制中呈現,讓目前的組建狀態可見。

下圖顯示 GitHub 與 Azure DevOps 管線間的整合。 在此範例中,建立提取要求會觸發 Azure DevOps 管線。 管線狀態會出現在提取要求中。

GitHub 存放庫中 Azure DevOps 狀態徽章的螢幕擷取畫面。

測試整合

持續整合的重要元素是持續建置和測試程式碼,因為開發人員會參與程式碼。 建立提取要求時測試提取要求會提供快速的意見反應,指出認可並未引進重大變更。 優點是持續整合管線中的測試可以是在測試驅動開發期間執行的相同測試。

下列程式碼片段顯示 Azure DevOps 管線的測試步驟。 此步驟有兩項工作:

  • 第一項工作會使用熱門的 Python 測試架構來執行 CI 測試。 這些測試與 Python 程式碼位於原始檔控制中。 測試結果會移至名為 test-results.xml的檔案。
  • 第二項工作會取用測試結果,並將其發佈至 Azure DevOps 管線作為整合式報告。
- script: |
    pip3 install pytest
    pytest azure-vote/azure-vote/tests/ --junitxml=junit/test-results.xml
    continueOnError: true

- task: PublishTestResults@2
    displayName: 'Publish Test Results'
    inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '**/test-results.xml'
    failTaskOnFailedTests: true
    testRunTitle: 'Python $(python.version)'

下圖顯示顯示在 Azure DevOps 入口網站中的測試結果。

Azure DevOps 入口網站中 Azure DevOps 管線測試的螢幕擷取畫面。

失敗的測試

失敗的測試應該暫時封鎖部署,並進一步分析發生的情況。 失敗的測試也應該讓測試精簡,或改善導致測試失敗的變更。

CI 結果徽章

許多開發人員都會在存放庫中顯示狀態徽章,以顯示其程式碼品質很高。 下圖顯示 GitHub 中開放原始碼專案的讀我檔案上顯示的 Azure Pipelines 徽章。

GitHub 中讀我檔案上 Azure Pipelines 徽章的螢幕擷取畫面。

Azure 指導

Azure DevOps 是一組服務,可協助您建置共同作業、有效率且一致的開發實務。

Azure Pipelines 提供組建和發行服務,以支援應用程式的持續整合和持續傳遞 (CI/CD) 。

適用于 Azure 的 GitHub for Actions 可自動化 CI/CD 程式。 它會直接與 Azure 整合,以簡化部署。 您可以建立工作流程,以建置及測試存放庫中的每個提取要求,或將合併的提取要求部署至生產環境。

瞭解如何使用 GitHub 或 Azure DevOps 建立持續整合管線:

瞭解如何在存放庫中顯示徽章:

營運卓越檢查清單