

# 什麼是持續整合和持續交付/部署？
<a name="what-is-continuous-integration-and-continuous-deliverydeployment"></a>

 本節探討持續整合和持續交付的實務做法，並說明持續交付和持續部署之間的區別。 

## 持續整合
<a name="continuous-integration"></a>

 持續整合 (CI) 是一種軟體開發實務，開發人員會定期將其程式碼變更合併到一個中央儲存庫中，然後執行自動化建置和測試。CI 最常指的是軟體發行程序的建置或整合階段，並且同時需要自動化元件 (例如 CI 或建置服務) 和文化元件 (例如經常學習整合)。CI 的關鍵目標是更快發現和解決錯誤、改善軟體品質，以及減少驗證和發行新軟體更新所需的時間。 

 持續整合側重於整合較少量的遞交和較少量的程式碼變更。開發人員需定期遞交程式碼，至少每天一次。開發人員會從程式碼儲存庫中提取程式碼，確保在推送到組建伺服器之前先合併本地主機上的程式碼。在這個階段，組建伺服器會執行各種測試，並接受或拒絕程式碼遞交。 

 實作 CI 的基本挑戰，包括更頻繁地遞交至通用程式碼基底、維護單一原始檔儲存庫、自動化建置和自動化測試。其他挑戰包括在與生產相似的環境中進行測試，讓團隊能看到程序，並讓開發人員可輕鬆取得任何版本的應用程式。 

## 持續交付和部署
<a name="continuous-delivery-and-deployment"></a>

 持續交付 (CD) 是一項軟體開發實務，在此實務中會自動建置、測試和準備程式碼變更，以進行生產發行。持續交付會在建置階段完成之後，將所有程式碼變更部署到測試環境、生產環境或同時部署到兩者，藉此擴張持續整合。持續交付可以透過工作流程程序完全自動化，也可以在關鍵點透過手動步驟實現部分自動化。在適當地實作持續交付時，開發人員一律都會有已通過標準化測試程序，且準備好部署的建置成品。 

 透過持續部署，修訂版本會自動部署到生產環境，而不需要開發人員的明確核准，如此可能讓整個軟體的發行程序自動化。這反過來又可以在產品生命週期的早期提供持續的客戶回饋迴圈。 

## 持續交付不是持續部署
<a name="continuous-delivery-is-not-continuous-deployment"></a>

 關於持續交付的其中一個誤解是，這表示所遞交的每一項變更，都會在通過自動化測試後立即套用到生產環境中。但是，持續交付的重點不是立即將每一項變更都套用到生產，而是確保每一項更改都已準備好可進入生產環境。 

 在將變更部署到生產環境之前，可以實作一個決策程序，確保已授權該生產部署，且會經過稽核。這項決定可以由一個人決定，然後由工具執行。 

 使用持續交付，上線的決策會成為一項業務決策，而非技術決策。每次遞交都會進行技術驗證。 

 將變更推出到生產環境不是一項干擾性事件。部署不需要技術團隊停止進行下一組變更，且不需要專案計劃、交接文件，或是維護時段。部署會成為一項可重複執行的程序，在測試環境中多次執行及進行驗證。