For more, please visit my GitHub repo: github.com/kingcos/Per…前端
一個軟件工程項目從編寫、到測試、再最終交付到用戶一般有不少重複且固定的步驟。雖然做爲開發者,咱們的核心任務是編寫代碼,而這些其餘的步驟卻也不能忽視,持續集成(Continuous Integration)則能夠幫助開發者完成這些瑣碎的事務,提高團隊的開發效率與質量。git
本文將主要介紹持續集成是什麼,以及其中的好處。固然,您可能也注意到了標題後面「(一)」,沒錯,持續集成並不是一篇文章能夠歸納,筆者但願儘量將目前團隊中使用到的和持續集成相關的內容進行總結,目的是爲了讓你們一塊兒思考如何讓持續集成更好地服務咱們開發。固然,限於筆者能力,文中難免出現遺漏,也望讀者可以批評和指出。github
持續集成,譯自 Continuous Integration,簡稱 CI(在下文中,將統一使用該英文簡稱)。在 Wikipedia 中,也有針對 CI 特別詳細且專業的介紹。簡而言之,當開發者經過版本控制系統(例如 Git)提交了代碼,CI 系統將爲其自動執行構建、分析、測試等服務,當前面的服務一致經過,其也能直接將產品部署到生產環境,然後進入下一個循環。其中每一步都將自動觸發、執行,結果也將會自動反饋回開發者。正以下圖所示,CI 的重點在於 C——持續。編程
那麼爲何須要 CI 呢?相比於傳統的先開發,再測試,後上線的模式有哪些好處呢?在團隊使用 CI 這段時間中,得出瞭如下主要兩個好處:swift
若是這兩個顯而易見的好處還不足以說服,能夠參考文末 Reference 中 EKATERINA NOVOSELTSEVA 的文章。那麼 CI 會不會也存在什麼難處呢?後端
若是後面兩個問題並無阻撓你,那麼就開始嘗試 CI 吧~api
CI 並不依賴於某種特定的技術棧,其屬於一種編程範式。可是,具體談及如何實踐,這就須要結合不一樣的工具和業務,進行定製。服務器
Jenkins 是一款使用 Java 開發且開源的持續集成工具,不少 iOS 團隊內部都會使用 Jenkins & Fastlane 來自動化打包。由於 Jenkins 是開源的,能夠方便地部署在本身的服務器中,並且也有不少插件來輔助不一樣的技術棧和功能需求。Swift 官方也使用了 Jenkins 做爲本身的 CI。工具
GitHub,人盡皆知,是全球最大的代碼託管平臺,但 GitHub 自己並無集成 CI。但有不少 CI 平臺爲 GitHub 定製 CI 環境,其中使用較多的即是 Travis CI。在 GitHub 倉庫中看到有 .travis.yml
文件便意味着該倉庫集成了 Travis CI。對於開源的項目,能夠選擇它就不用開發者再單獨配置服務器來運做 CI,固然速度可能會慢些。以前在寫我的的一個命令行工具時,便嘗試使用了 Travis CI,並且能夠很是容易的將 CI 狀態和代碼覆蓋率的 Budge 標示在項目文檔中。gitlab
相比於上述的幾個平臺,GitLab 真正把代碼託管和 CI 結合了起來,並在最新 Release 版中加入了 Auto DevOps,彷佛是更加先進的 CI。團隊內部目前使用的即是 GitLab EE,後續就將以 GitLab 爲主,講講其中配合 GitLab Runner 來規範化開發流程。