我們部門 Jenkins 只有一台,因為我們有 Job 把 UWP 專案 build 成 .Net Native,但是編譯一次要很久,而且占掉了所有的資源,造成別的 Job 無法處理,於是試試看用 Jenkins Slave 來解決這個問題
先說一下大概的情況,原本有一台弱弱的 Jenkins,2 代 i5 系列的電腦,有點年紀了,跑的也很慢,每次都快等到睡著,只要跑的 .Net Native,就會卡住整台機器 15 分鐘以上
部門中有 1 台閒置的機器,配備比原本的 Jenkins 好,CPU 是 i7-4790K,想拿來當作 Jenkins ,以便同時處裡多個 Job
不直接整台換到 i7 機器上的原因有這幾點:
- 我們的 Jenkins 網頁是有 Reverse Proxy 代理的,如果直接換了機器,要請 IT 幫忙重新設定對應到的 IP,會麻煩到別的部門的人,且如果換過去有遇到問題,再換回來又要麻煩別人一次..
- Build History 要保留。如果換機器的話,要複製很久,因為每個 Job 都有好幾百個以前的 build,另外 i7 那台機器的硬碟比原本的小,空間不是很夠
- Jenkins 有一些客製化的 Plugin,直接換過去因為會裝到最新版本的 Jenkins,有些老 plugin 裝不上去,我們的 jenkins 版本是 1.656
正文開始,這裡下面以 Master 跟 Slave 來稱呼兩台 Jenkins 機器
- 先到 Master 的 "管理 Jenkins" > "設定全域安全性" 中將 "啟用安全性" 打開,"JNLP Slave 代理程式 TCP 埠" 選擇固定或是隨機
- 接著到 "管理 Jenkins" > "管理節點" 中按下 "新增節點",輸入想要的節點名稱,選擇 "陽春 Slave" 後按確定
- "遠端檔案系統根目錄" 填入在 Salve 上放置 workspace 的目錄位置
- "啟動模式" 選 "透過 Java Web Start 啟動 Slave 代理程式"
- 如果你的 Jenkins 有 Http Proxy 反向代理,簡單的說,你連線到 Jenkins 網址的 Domain 或 IP 不是直接指向 Jenkins 的話,請按進階,然後再 "Tunnel 連線位置" 填入 Master 機器本身的 IP:Port,像是 "192.168.1.10:8080"
- 按下"儲存"後,會看到左邊的已經多出一台 Slave 節點了
- Slave 不用安裝 Jenkins。只要幫 Slave 安裝好 JRE,我的 JRE 版本是 Version 8 Update 161,千萬不要裝 Version 9,會不能用
- 用 Slave進去 Jenkins 頁面,點左邊的 Slave 節點的名字後,按下 Launch 黃色按鈕並執行
- 看到 Connected 字樣,就代表連上了
- 那個小視窗上面的功能表,可以將 Slave 設定為服務,就會在每次重啟電腦後,自動連上 Master,設定為服務的時候會需要先用管理員權限開瀏覽器,再去點 Launch,不然會因為權限不夠而失敗
到這裡就差不多完成了,另外~原本 Job 要用的環境,像是 Visual Studio、Git、Windows SDK等原本就有用到的工具都要在 Slave 上有安裝才行,原本加在 Path 中的執行檔也要 Call 的到才行