整合Jenkins 和Docker | jenkins docker教學
這篇將會記述一些我自己整合JenkinsCI和Docker的思路、想法、要點以及備忘。不會有stepbystep的教學,若有此類需求請參考最後附錄。WhyDocker?Jenkins跑的好好的,為什麼要摻Docker呢?原本我們RailsRspec跑的其實也不錯,但受限於database以及elasticsearch,redis等services,無法同時跑多個worker,再加上未來若有平行化測試以及多個專案/不同db版本等等的需求,引入docker可以完美解決這些問題。Concept使用Docker的好處就是原本的shellscript幾乎都不用改即可繼續使用,引入的門檻降到極低。基本概念是建立一個可以跑Railsapp起來...
這篇將會記述一些我自己整合 Jenkins CI 和 Docker 的思路、想法、要點以及備忘。不會有 step by step 的教學,若有此類需求請參考最後附錄。
Why Docker?Jenkins 跑的好好的,為什麼要摻 Docker 呢?原本我們 Rails Rspec 跑的其實也不錯,但受限於 database 以及 elasticsearch, redis 等 services,無法同時跑多個 worker, 再加上未來若有平行化測試以及多個專案 / 不同 db 版本等等的需求,引入 docker 可以完美解決這些問題。
Concept使用 Docker 的好處就是原本的 shell script 幾乎都不用改即可繼續使用,引入的門檻降到極低。
基本概念是建立一個可以跑 Rails app 起來的環境,然後把整個 CI 的 workspace 丟進去跑測試,其他的步驟都一模一樣。
在建立環境這邊基本上有兩個選擇,一種是全部包成一個 image, 就用這個 container 來跑測試。另一種是每個需要的 service 都是一個各自的 container, 彼此之間透過 Docker Container Linking[1] 來通訊,例如 postgresql 自己一個、elasticsearch 自己一個、rails 自己一個這樣。
不過由於跑測試都是用過即丟,這次我直接採用最簡單的包一大包的策略來進行,減少複雜度。
我會選擇自己 Build docker 來跑測試主要是還想運用在其他地方,包括 trigger 不同的瀏覽器跑 feature tests 而不需重新 Build docker image 等等,如果沒有特殊需求的話也可以參考看看 Jenkins 的 Docker Plugin[2] 基本概念是直接把 Jenkins slave 用 docker 跑起來。可以評估看看自己是否合用。
Base Image我的設計是先建立一個 base image 例如給他 tag 叫 project/base 裡面先預裝好了所有環境包括 pg, elasticsearch, redis, rvm, ruby 等等。