好不容易把公司的後端 Jenkins 升到天上……不,我是說升到雲上,雖然有點意外這麼多年後還是 Jenkins;說曾經歷過它的改名就有點透露了什麼。這次從 Jenkins 1.656 升到 Jenkins 2,並改用 Jenkins Pipeline 以及它的 Blue Ocean 介面。Wny?
Jenkins 2 的特點、優點,以及效益
- 直接吃 GitHub Organization 或 Bitbucket Enterprise,不用每加一個 repo 就過來按按按填填填,直接吃 Jenkinsfile,類似
.travis.yml
的玩意兒;從某個可怕的角度來看它更強大,允許你直接在裡面用 groovy 寫它的 Job DSL。 - 承上強者的推薦,打開執行所有 repo 裡的 branches 的能力!不用擔心立刻幾百萬的失敗的 branch 湧入,因為只有指定位置有 Jenkinsfile 的才會被處理,所以可以一步一步來。這麼一來沒事 push 一下就有人幫忙服務 CI,不用 pull-request 才能用真好。
- 每次各種 build 失敗不用看一拖拉庫 Console Log 看到眼花。Blue Ocean 介面不錯(太)乾淨,分段的 stage log 讓你快速看好看滿。
- 快速上手的 docker 支援,偉哉前端中午說要換下午就換好是???(危險動作請不要在公司模仿)用 Node.js of alpine 給它跑起來 build,看起來威。
- 終於能放心地升、升、升級各種套件與主程式了,現在什麼 Security Notification 都好升級並處理了。
- 另外在清理時也重建了舊的 docker image,效能看來確實有提升,沒人不愛快的 CI,以及清理了不必要 shell command 與 environment,特別是舊 CI job
source .bash_profile
後在 console log 噴的那一串 + ++ +++ 真是惡夢。(當然這跟 Jenkins 2 不 2 無關 XD,只是真想這樣做,在新 CI 的分段 stage 頁面也會乾淨許多) - 上雲後不用再東連一個 VPN 西連一個 VPN 或 ssh tunnel 來做事,用 IP round-robin 同時設了內網外網連起來感覺小煩就是。
升到 Jenkins 2 Pipeline 與 到的困難以及一些缺點
這次升級遇到的困難或麻煩
- 要把過去滿是魔改的任務,換到 Jenkins 2 上,有時會想在目前的情境下有 GitHub Organization、Jenkinsfile,以及 Pipeline,過去的那幾套是不是可以不用裝了?這個要試一下,目前心得是 GitHub Pull Request Builder、Build Pipeline 是可能可以不裝的,只是用其它方式跑起的感覺可能不太一樣,特別是真的想另建 GitHub repo project 拉 pull request 的時候。
- 要讓多個 project 更共享一些 practice 如 Global Slack Notification 的設定,即使在一些都是 Python 的 project。現在覺得每個 project,特別是不同語言時,需求與設定可能相當不同。
- 為了配合 CI 改了 repo 裡某些構造的話,還要確定新的構造也能用新的 CI 做 deploy,其實也就是原本舊 CI deploy 的 job 也要移植到新 CI 上,而舊的 deploy 方式與設定可能如困難 1. 需要調測一下。
- 其它主要在測一些過去也遇到的問題,如微調 AWS fleet 上的 Docker performance 時可能會讓 Jenkins 跑 docker 失敗,同一 host 在
docker-compose down -v --remove-orphans --rmi local
關到正在用同名 image 的 build 之類的細項。真是魔鬼。 - 要花點心力學 Jenkins Pipeline 的 DSL,而且還分兩套……一是 script 風格,一是 declarative 風;總之我猜,跟你想的不一樣。
依然推薦的 Jenkins Plugin
先挑三個跟大家分享:
- Job Configuration History
- Rebuilder(沒事多 rebuild,多 rebuild 沒事?)
- Simple Theme Plugin
升上 Jenkins 2 學到的東西
應該是在解 Jenkins pipeline、docker-compose 與 AWS EC2 spot fleet 的三角關係,把相關操作與佈署的設定都更熟了一番,感覺能處理一些之前沒能解開的 CI 之謎。東西沒壞,就不要修?最近公司的讀書會是這本《Working Effectively with Legacy Code, First Edition》,裡面的例子有點經典有點老舊又有點熟悉,大家反而都能說上幾句,例如 TDD;裡面也直指了事情除了不修之外,還可能做得更好。也推薦給大家。
Murmur
雖然有點意外這麼多年後還是 Jenkins CI,然而手邊的工具跑起來的樣子也大不相同了,即使是 jjkk 的 Vim 也是換了幾次皮切了幾次肉。一如以往,Jenkins CI Plugin 有做好的,就很方便;沒做的,嗯,寫 Java 或著摸摸鼻子?或著繞道用無盡的 script 做掉。
最後,關於 QE、後端、前端,以及 iOS 工程師,你知道的 iCHEF - 優質新創人才招募中。有所堅持,並不容易。