Practice - iOS 項目持續集成實踐(一)

For more, please visit my GitHub repo: github.com/kingcos/Per…前端

CI in Practice

Preface

一個軟件工程項目從編寫、到測試、再最終交付到用戶一般有不少重複且固定的步驟。雖然做爲開發者,咱們的核心任務是編寫代碼,而這些其餘的步驟卻也不能忽視,持續集成(Continuous Integration)則能夠幫助開發者完成這些瑣碎的事務,提高團隊的開發效率與質量。git

本文將主要介紹持續集成是什麼,以及其中的好處。固然,您可能也注意到了標題後面「(一)」,沒錯,持續集成並不是一篇文章能夠歸納,筆者但願儘量將目前團隊中使用到的和持續集成相關的內容進行總結,目的是爲了讓你們一塊兒思考如何讓持續集成更好地服務咱們開發。固然,限於筆者能力,文中難免出現遺漏,也望讀者可以批評和指出。github

What

持續集成,譯自 Continuous Integration,簡稱 CI(在下文中,將統一使用該英文簡稱)。在 Wikipedia 中,也有針對 CI 特別詳細且專業的介紹。簡而言之,當開發者經過版本控制系統(例如 Git)提交了代碼,CI 系統將爲其自動執行構建、分析、測試等服務,當前面的服務一致經過,其也能直接將產品部署到生產環境,然後進入下一個循環。其中每一步都將自動觸發、執行,結果也將會自動反饋回開發者。正以下圖所示,CI 的重點在於 C——持續。編程

CI

Why & Why not

那麼爲何須要 CI 呢?相比於傳統的先開發,再測試,後上線的模式有哪些好處呢?在團隊使用 CI 這段時間中,得出瞭如下主要兩個好處:swift

  1. 及時發現錯誤。CI 並不能消除錯誤,但 CI 將發現錯誤的時機儘量地提早,因此也更加節省時間來改正錯誤。當開發者提交代碼至代碼倉庫時,其對於代碼的熟悉程度是最高的。若是這個時候儘量的糾正一些錯誤或不當,開發者將能很快注意到並將錯誤改正,避免了因爲時間或者團隊中其餘人對於代碼的修改所致使的問題,提高了開發效率。
  2. 自動化。市面上的 CI 平臺都給了開發者比較高的自由度,可以執行腳本或命令。所以不少自動化的操做均可以制定好,來自動化地執行,節省開發者的時間。

若是這兩個顯而易見的好處還不足以說服,能夠參考文末 Reference 中 EKATERINA NOVOSELTSEVA 的文章。那麼 CI 會不會也存在什麼難處呢?後端

  1. 跨技術棧。CI 並不特定於前端或者後端,CI 一般根據不一樣的平臺而有不少不一樣,包括配置的方法、使用的語言、自由度等等。CI 又和 Docker 的發展有必定的關係,所以跨技術棧可能讓一些團隊望而卻步。不過好的是,DevOps(Development & Operations)也在國內漸漸興起,愈來愈被重視。
  2. 跨平臺。這裏所指的平臺是指代碼託管平臺、CI 平臺、以及部署平臺。在公司開始時,可能並不能輕易考慮到後續的發展,所以在原有平臺加入 CI 可能須要跨平臺的協做。對於一些「黑盒」的平臺,有時便難以很好的集成。不過,如今 Git 的兩大平臺 GitHub 和 GitLab 都很重視且支持 CI 平臺,也便於開發者使用。

若是後面兩個問題並無阻撓你,那麼就開始嘗試 CI 吧~api

How

CI 並不依賴於某種特定的技術棧,其屬於一種編程範式。可是,具體談及如何實踐,這就須要結合不一樣的工具和業務,進行定製。服務器

Jenkins

Jenkins

Jenkins 是一款使用 Java 開發且開源的持續集成工具,不少 iOS 團隊內部都會使用 Jenkins & Fastlane 來自動化打包。由於 Jenkins 是開源的,能夠方便地部署在本身的服務器中,並且也有不少插件來輔助不一樣的技術棧和功能需求。Swift 官方也使用了 Jenkins 做爲本身的 CI。工具

ci.swift.org

GitHub with Travis CI

Travis CI

GitHub,人盡皆知,是全球最大的代碼託管平臺,但 GitHub 自己並無集成 CI。但有不少 CI 平臺爲 GitHub 定製 CI 環境,其中使用較多的即是 Travis CI。在 GitHub 倉庫中看到有 .travis.yml 文件便意味着該倉庫集成了 Travis CI。對於開源的項目,能夠選擇它就不用開發者再單獨配置服務器來運做 CI,固然速度可能會慢些。以前在寫我的的一個命令行工具時,便嘗試使用了 Travis CI,並且能夠很是容易的將 CI 狀態和代碼覆蓋率的 Budge 標示在項目文檔中。gitlab

kingcos/WWDCHelper

GitLab with CI

GitLab

相比於上述的幾個平臺,GitLab 真正把代碼託管和 CI 結合了起來,並在最新 Release 版中加入了 Auto DevOps,彷佛是更加先進的 CI。團隊內部目前使用的即是 GitLab EE,後續就將以 GitLab 爲主,講講其中配合 GitLab Runner 來規範化開發流程。

Reference

相關文章
相關標籤/搜索