Keith
Yang (self)

重返 Jenkins CI 榮耀 ||

好不容易把公司的後端 Jenkins 升到天上……不,我是說升到雲上,雖然有點意外這麼多年後還是 Jenkins;說曾經歷過它的改名就有點透露了什麼。這次從 Jenkins 1.656 升到 Jenkins 2,並改用 Jenkins Pipeline 以及它的 Blue Ocean 介面。Wny?

Jenkins 2 的特點、優點,以及效益

  1. 直接吃 GitHub Organization 或 Bitbucket Enterprise,不用每加一個 repo 就過來按按按填填填,直接吃 Jenkinsfile,類似 .travis.yml 的玩意兒;從某個可怕的角度來看它更強大,允許你直接在裡面用 groovy 寫它的 Job DSL。
  2. 承上強者的推薦,打開執行所有 repo 裡的 branches 的能力!不用擔心立刻幾百萬的失敗的 branch 湧入,因為只有指定位置有 Jenkinsfile 的才會被處理,所以可以一步一步來。這麼一來沒事 push 一下就有人幫忙服務 CI,不用 pull-request 才能用真好。
  3. 每次各種 build 失敗不用看一拖拉庫 Console Log 看到眼花。Blue Ocean 介面不錯(太)乾淨,分段的 stage log 讓你快速看好看滿。
  4. 快速上手的 docker 支援,偉哉前端中午說要換下午就換好是???(危險動作請不要在公司模仿)用 Node.js of alpine 給它跑起來 build,看起來威。
  5. 終於能放心地升、升、升級各種套件與主程式了,現在什麼 Security Notification 都好升級並處理了。
  6. 另外在清理時也重建了舊的 docker image,效能看來確實有提升,沒人不愛快的 CI,以及清理了不必要 shell command 與 environment,特別是舊 CI job source .bash_profile 後在 console log 噴的那一串 + ++ +++ 真是惡夢。(當然這跟 Jenkins 2 不 2 無關 XD,只是真想這樣做,在新 CI 的分段 stage 頁面也會乾淨許多)
  7. 上雲後不用再東連一個 VPN 西連一個 VPN 或 ssh tunnel 來做事,用 IP round-robin 同時設了內網外網連起來感覺小煩就是。

升到 Jenkins 2 Pipeline 與 到的困難以及一些缺點

這次升級遇到的困難或麻煩

  1. 要把過去滿是魔改的任務,換到 Jenkins 2 上,有時會想在目前的情境下有 GitHub Organization、Jenkinsfile,以及 Pipeline,過去的那幾套是不是可以不用裝了?這個要試一下,目前心得是 GitHub Pull Request Builder、Build Pipeline 是可能可以不裝的,只是用其它方式跑起的感覺可能不太一樣,特別是真的想另建 GitHub repo project 拉 pull request 的時候。
  2. 要讓多個 project 更共享一些 practice 如 Global Slack Notification 的設定,即使在一些都是 Python 的 project。現在覺得每個 project,特別是不同語言時,需求與設定可能相當不同。
  3. 為了配合 CI 改了 repo 裡某些構造的話,還要確定新的構造也能用新的 CI 做 deploy,其實也就是原本舊 CI deploy 的 job 也要移植到新 CI 上,而舊的 deploy 方式與設定可能如困難 1. 需要調測一下。
  4. 其它主要在測一些過去也遇到的問題,如微調 AWS fleet 上的 Docker performance 時可能會讓 Jenkins 跑 docker 失敗,同一 host 在 docker-compose down -v --remove-orphans --rmi local 關到正在用同名 image 的 build 之類的細項。真是魔鬼。
  5. 要花點心力學 Jenkins Pipeline 的 DSL,而且還分兩套……一是 script 風格,一是 declarative 風;總之我猜,跟你想的不一樣。

依然推薦的 Jenkins Plugin

先挑三個跟大家分享:

  1. Job Configuration History
  2. Rebuilder(沒事多 rebuild,多 rebuild 沒事?)
  3. 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 - 優質新創人才招募中。有所堅持,並不容易。