鐵人賽 持續集成與持續交付 - Jian-Min-Huang/tech-note GitHub Wiki

前言

CI (Continuous Integration) 和 CD (Continuous Delivery),差別在 CD 比 CI 多最後一步發布,所以 CI 算是比較像基底的的概念。而短短的四個英文單字,可以說在 DevOps 一連串步驟中扮演十分重要的角色,今天要來從概念上以及使用工具上來做探討。

Idea

邊開發邊建置在靜態語言中可以檢查語法上的錯誤,動態語言則需加上測試 (這也是為什麼 TDD 在 JS 較紅)。但即使本地不跑建置,最少也該掛在 VCS 的 pre-commit hook 跑一遍 (什麼你說你家沒有 VCS!? Umm,施主快逃阿),畢竟你推一個連建置都會失敗的版本上去,基本上是不被允許的。

另外如果你家有寫 Unit Test,如果你家有跑靜態程式碼分析,如果你家有跑自動化測試,如果你家有跑報表,如果 ... 你家什麼都沒跑,好啦不要難過,多的是人家裡一個都沒做的,呵呵。回歸正題,這些動作如果可以抽離出來由一個額外的 worker 來做,有推就 build,想 build 就 build,定時來 build (簡直慣老闆,毆飛),應該是會一件很開心的事。所以當你把這個概念用一個軟體實作出來,就是 CI 工具了。

CI 就只到建出來,CD 包含要部屬到環境上給 QA 做手動測試或是跑自動化測試。

Tool

第一個 CI 工具已經不可考,不過我今天是來聊聊現在火紅的幾個 (介紹的順序純粹小弟開心,不代表什麼,哈哈)。功能上發展到今天我覺得大家大同小異,不過在激烈的競爭之下,各家也是慢慢走出一些特色來,所以市場區隔我覺得是很明顯的。

  • Travis CI
GitHub 愛好者都應該知道這個,加上 .travis.yml 就搞定。輕巧開箱即用、公開的 repository 免費和支援豐富,如果是中小型 project 而且用GitHub 做 VCS 這個其實算蠻好用的
  • Jenkins
說他最有名應該不會有太多人反對,CI 界的老管家,幫你處理大大小小的事。用 Java 寫的,所以基本上是上天下地包山包海無所不能 (又浮誇了)。我當年最喜歡做的事情就是想辦法把老管家弄到森氣氣 (喔氣氣氣氣氣)。那跟上面 Travis CI 比他有哪些好處呢?首先是自建方便,當年 GitLab CI 那套還沒整個玩起來,然後還有很多餘孽用 SVN (你這樣用 CVS 的要抗議囉),有介面外掛又豐富,簡直完美情人。而當你專案跟任務大到一個程度單體肯定是不夠的,這個也提供了多 Agent 的作法,至今市佔率還是算蠻高的。

  • TeamCity
這個聽過的人應該不多,要像我這種死忠 Jetbrains 粉,每年都有繳保護費的可能才有聽過 XDD。1 Server 3 Agent 免費,超過要算錢,跟 J 家的其他產品一樣,主流的該做的都會幫你做好,高級車的概念。不過如果想要客製的,特殊功能的,抱歉我們沒有,去找樓上。
  • GitLab CI
GitLab 本身其實也是一個 VCS,他家新聞很多,大家應該都略有耳聞。這幾年他的發展我覺得是最讓人驚嘆的,幾乎是用一種 DevOps 全棧式角度去生成他的服務。今年鐵人賽也有不少關於他的介紹,真的蠻厲害,值得一看,重點是他的狐狸標誌我很喜歡。

小結語

上面的 Tool 我都只點到 CI 的層面,原因是我覺得 CD 混著環境一起講比較合理,明天我們會講一篇跟 Docker 一起的,要準時收看喔。


About Me

Jian-Min Huang

wide range skill set backend engineer

Research, Architecture, Coding, DB, Ops, Infra.

mainly write Java but also ❤️ Scala, Kotlin and Go

http://github.jianminhuang.cc

http://linkedin.jianminhuang.cc

http://note.jianminhuang.cc

[email protected]