什麼是 CI/CD? - reddit

banq發表於2022-03-03

作為一名想要成為 DevOps 工程師的人,肯定想了解什麼是 CI/CD 以及我們為什麼需要它們?

CI/CD 是語言/執行時(例如 Java/OpenJDK、JS/Node、Ruby、Docker 容器中的某些東西)之間的粘合程式碼,包括交付(取決於您的工件型別,例如 Docker 容器、Maven 儲存庫、符合 npm登錄檔)和您想要執行的環境的部署機制(例如 Docker、帶有 docker-compose 的 Docker、Ansible、Kubernetes、帶有 Helm 的 Kubernetes、帶有 kustomize 的 Kubernetes 等)

 

CI/CD 是獲取原始碼儲存庫和新推送的更改、構建它並執行測試和/或在收到更改後實時部署更改的軟體。

這樣開發人員就可以推送更改,這些更改將自動持續整合和持續部署。

每當修復錯誤或建立新功能時,都會建立一個測試或一組測試,這些測試可以自動執行以確保該功能沒有損壞或錯誤沒有退化。

  

CI是指持續整合

持續意味著定期/一直在做。整合意味著有不同的人/不同的公司編寫的程式碼,你需要在同一個程式碼庫中新增這些程式碼,並確保沒有什麼被破壞。編譯和執行自動化測試是其中的一個重要部分。

編寫軟體是一項團隊運動。僅僅因為一個錯字就很容易破壞軟體,如果你沒有自動測試,你就會破壞過去工作的東西,在你的客戶發現之前不會發現。

持續整合是定期將程式碼與組織的其他部分整合(合併)的做法。過去,個人或團隊經常將他們的程式碼在分支中隔離數月,並且很少合併。

 

CD可以指持續交付或持續部署

有時人們在一個管道中建立這個,有時是兩個不同的管道。交付和部署是否是同義詞並不是100%清楚,這在很大程度上取決於你構建什麼樣的應用程式。

對於一個最先進的網路應用,你可能會在交付管道中構建Docker映象,並在交付管道中將其部署到Kubernetes。由於你需要在不同的環境中進行測試,你可能有步驟或單獨的管道來部署到某種測試環境和生產環境。

你需要這樣做,因為你想經常部署小的增量變化。你不希望建立了6個月,然後有一個星期的軟體安裝停機時間,並且不知道它在生產中是否有效。

如果你發現你的小改動引入了一個錯誤,那就很容易回滾和修復。如果你的6個月的大改動引入了問題,你怎麼知道你在哪裡和什麼時候做了破壞性的改動?

持續交付是始終保持應用程式處於可部署狀態的一種理念和一套實踐。為了實現這一點,我們構建了一個部署管道,用於驗證更改的正確性,並通過一系列測試環境交付這些更改,最終進行生產部署。

 

CI/CD 一起是在開發人員工作時頻繁合併更改並讓這些更改通過一系列自動化測試的做法。完成後,這些更改將捆綁到一個釋出候選中,然後可以自動部署到生產中。練習 CI/CD 的團隊通常會在一天內產生許多候選版本。

 

相關文章