持續整合

menu icon

持續整合

透過本指南進一步瞭解持續整合,這是一種軟體開發與 DevOps 作法,其中每個開發人員每天會將其新程式碼整合到程式碼的主要分支中至少一次。

何謂持續整合?

持續整合是一種軟體開發流程,其中開發人員會整合他們在整個開發週期中更頻繁撰寫的新程式碼,並每天將其新增至程式碼庫至少一次。 在每次反覆運算建置時自動執行測試,以在還很容易修正整合問題時提早識別,這還可以協助避免在合併最終版次時發生問題。 整體來說,持續整合有助於簡化建置流程,進而產生品質更高的軟體與更能夠預測的交付排程。

連續整合 (CI)、持續遞送 (CD) 與持續部署

每個開發人員可以透過透過持續整合,每天將他們的工作與原始碼的主要分支相整合至少一次(可以的話,最好每天很多次)。 持續交付的另一個 DevOps 作法則是著重於將任何已驗證的變更,例如更新、錯誤修正程式甚至新功能交付給程式碼庫,再以儘可能快速安全的方式提供給使用者。 持續部署可進一步簡化流程,使用自動化測試來驗證程式碼庫變更,從而產生更立即的更新。

持續交付從持續整合結束的地方接手,自動將應用程式交付給特定的基礎架構環境。 其可確保將程式碼變更自動推送給不同環境,例如開發、測試及正式作業。

優勢

以下是持續整合所提供的幾個最值得注意的好處:

  • 持續展示意見回饋的改善進度
  • 及早改善錯誤偵測和度量,以便您盡早解決錯誤,有時在移入的幾分鐘內
  • 加強團隊協同作業;團隊中的每個人都可以變更程式碼、整合系統,並快速判斷與軟體其他部分的衝突
  • 加強系統整合以減少在軟體開發生命週期結束時發生驚嚇
  • 減少合併與測試的平行變更
  • 減少系統測試期間的錯誤數目
  • 不斷更新的系統以進行測試

CI、敏捷及 DevOps

敏捷性

「敏捷」是一種軟體開發作法,其可改良軟體開發團隊本身的組織方式、適應需求變更與發行軟體。 因為持續整合(IBM 外部鏈結)和敏捷開發 (PDF, 153 KB) 分享許多相同功能(例如測試自動化),因此同時討論持續整合和敏捷是有用的。 「敏捷」將開發組織成小型的工作或密集短期工作群組。 在 DevOps 中應用時,這些組合作法有助於確保軟體品質和專案彈性。

持續整合需要您經常整合工作,通常是每天很多次。 您可以透過自動化建置來驗證整合,以儘早偵測到整合錯誤。 建置應該在驗證中包含執行測試。 在自動化測試環境中,將快速測試延伸到執行時期測試中,這會自然導向持續交付。

「敏捷」(IBM 外部鏈結) 還會反覆適應變更,以便每隔一段時間就調整與發展解決方案。 在持續整合的背景下,敏捷軟體開發是關於根據您在持續整合時所設定的功能價值優先順序來交付軟體疊代。

DevOps

DevOps 架構中,持續整合位於軟體開發流程的開端,在此您每天要檢查程式碼至少一次,以免您的本端副本從程式碼建置的主要分支漂移太遠。 這有助您避免災難性的合併衝突,這些衝突可能會「岔斷」建置,並使用團隊得花數小時或數天來解決。

持續整合是持續交付的測試、部署及發行等階段的必要條件。 整個開發團隊將在移入的幾分鐘內知道您是否建立了不良程式碼,因為持續整合服務會自動建置並測試您的程式碼變更是否有任何錯誤。

開放原始碼持續整合工具

以下是一些最受熱門的持續整合工具:

  • Jenkins: 獲得廣泛使用的開放原始碼持續整合工具 Jenkins,其可讓開發人員在確定程式碼可以進入原始碼儲存庫時立即自動建置、整合與測試程式碼,以便開發人員可以更容易及早捕捉錯誤並加速部署軟體。 此 Docker 外掛程式可在 Jenkins 上使用。
  • Buildbot: Buildbot 可將軟體開發週期的所有層面自動化。 身為工作排程系統,它會排入佇列並執行工作,然後報告結果。
  • Go: 讓 Go 脫穎而出的是管線概念,它可以將複雜的建置工作流程建模變簡單。
  • IBM UrbanCode Build
  • Travis CI: 最久遠也最受信任的代管解決方案,它也可以在企業的內部部署版本中使用。
  • GitLab CI: GitLab CI 是開放原始碼 Rails 專案中不可或缺的一部分,它是免費代管服務,提供詳細的 Git 儲存庫管理,具有存取控制、問題追蹤、程式碼複查及其他功能。

與開放原始碼工具進行持續整合提供許多好處,包括:

  • 數以百計可以支援您專案的外掛程式
  • 支援廣泛的開放原始碼語言,例如 Python、Java 及 JavaScript
  • 完全免費,為預算不多的學生、新創公司和兼職開發人員提供強大工具
  • 可自訂功能,讓開發人員能夠獲得 CI 工具的基礎,並在其上進行建置以滿足需要
  • 能夠修改與重新配送工具

軟體開發工作流程可考慮使用的開放原始碼持續整合工具包括 Jenkins、Go、Buildbot 及 Travis CI,您可以在下一節閱讀相關資訊。

使用案例

以下的假設使用案例說明兩位軟體開發人員如何利用持續整合來改良其 DevOps 流程。

兩位開發人員必須彼此溝通哪些功能可以發揮作用,以及如何進行。 這個小團隊需要定期更新,而且必須能夠整合並測試其整體程式碼。 幫程式碼移入和測試排程會佔用大量開發時間。 因此,需要自動的持續整合系統。

在這些組合和測試發生時進行交涉將會耗掉開發人員的大量時間。

若要完成任務,他們必須就下列問題達成一致看法:

  1. 何時開始測試程式碼整合
  2. 如何測試整合已順利完成
  3. 如何將結果傳達給團隊

持續整合平台對於這些問題都有預設答案,而且大部分都容許進行配置和設定。

一般來說,像 Jenkins 之類的 CI 平台會在移入時開始整合測試。 移入新程式碼時,CI 系統將會執行一組測試,其中可包括單元測試和迴歸測試,然後判斷程式碼是否已順利整合。

或者,如果您使用已編譯的語言,則在程式碼編譯成功時,將會進行預設測試。 如果編譯失敗,則新程式碼會岔斷建置。 對於 Python 或 JavaScript 之類的語言,您必須建立自己的整合測試。

無論哪種方式,大部分的 CI 系統都會記載整合嘗試、成功率及其他度量。

伺服器

持續整合伺服器是一種軟體工具,其可集中您的所有持續整合作業,並提供可靠穩定的平台以便您建置專案。 您可以配置與調整 CI 伺服器,以針對不同平台建置各種專案。 持續整合伺服器輕鬆為複雜的工作流程進行建模與視覺化(啟用持續交付),並提供直覺式介面以便建置持續交付管線。 持續整合伺服器提供下列執行能力:

  • 在單一位置執行自動建置、測試及發行
  • 隨時部署任何版本
  • 保持有序配置
  • 支援外掛程式以加強功能
  • 監視專案的儲存庫
  • 取回變更並執行您針對成功確定所定義的作業
  • 傳送意見回饋給相關的專案成員並附上建置的詳細資料

測試的重要性

持續測試始於您產生持續整合建置和套件(也稱為可安裝實體或套裝實體)之時。 它止於套裝實體進入正式作業之時。 從端到端的每個步驟都包含一個測試套組。

當您只有一個測試階段時,至少 30% 的持續整合會涉及測試。 在現實中,持續整合活動包含 50% 至 70% 的測試。 以前,您必須手動完成測試。 現在,您可以使用自動化測試,這是順利持續整合的關鍵。

做為持續整合之自動化測試的一部分,測試驅動的開發會反覆建置程式碼,並且一次測試一個使用案例,以確保測試涵蓋面、提高程式碼品質,並為持續交付奠定基礎。 自動化測試會告知您,新程式碼是否未通過針對應用程式所有功能領域所開發的一或多個測試。 最佳作法需要開發人員在其本端環境中執行全部測試或其子集,以確保開發人員僅在新程式碼變更通過其測試之後才確定原始碼可以進入版本控制。 經驗顯示,有效的迴歸測試有助於避免日後發生驚嚇。

持續整合管線

持續整合管線會在最少的人為介入下,透過可重複的方式自動執行專案管線的所有階段,例如建置、測試及部署。 自動化的持續整合管線對於藉由啟用控制項、檢查點及速度來簡化開發、測試與部署應用程式而言很重要。

最佳作法

持續整合流程是 DevOps 的重要元件,其可協助您將開發和維運團隊整合到共用儲存庫中,以利編碼、測試、部署與支援軟體。 以下是有助您成功的一些 CI 最佳作法:

  • 維護單一原始碼儲存庫:使用原始碼控制管理來追蹤與控制專案建置的所有檔案。 此合併的程式碼庫可簡化配送和可見性。
  • 自動化建置:這涉及編譯、鏈結,以及產生建置構件的其他流程。 自我測試也應該自動化。
  • 使用每日主線確定:強制開發人員每天確定主要開發串流變更至少一次。 每一個開發人員必須驗證其工作副本與主要開發串流保持一致。
  • 在正式作業環境的複本中進行測試:使測試環境儘可能類似於您最終的正式作業環境。
  • 自動化部署: 實作多個環境,例如開發、整合、正式作業,以執行建置和測試。

持續整合與 IBM Cloud®

IBM 的方法是使用範本來定義與自動執行專案並配置安全性。 當程式庫發生變更時,相依應用程式會重新建置並回頭連接、鏈結或繫結。 瞭解應用程式相依關係有助您將應用程式現代化

當組織加速這類數位轉型,在商業和 IT 維運方面的自動化需求將會擴大。 邁向更高度的自動化應該從可測量成功的小型專案開始,然後針對其他流程序和組織的其他部分進行擴充與最佳化。

您可以與 IBM 合作,藉此取得 AI 型自動化功能,包括預先建置的工作流程,以藉由讓每個流程變得更有智慧來協助加速創新。

進行下一步:

- 在 IBM® UrbanCode® Build 的協助下,開始管理您的軟體建置,包括調整大小和配置。

閱讀此 HFS Research 報告中成功實現自動化的五個「不可或缺」(IBM 外部鏈結)。

立即開始使用 IBM Cloud 帳戶