開始研究 Jenkins,計劃用它取代 TFS Build Service 解決工作專案的建置部署需求。

TFS Build Service 跟 Visual Studio 整合度極佳,但有幾個缺點:

  1. 每個 TFS Build Controller/Build Server 只能處理一個 TFS Project Collection,一個 Project Collection 得配一台機器,太耗資源 參考
  2. TFS 2015 改成 Build Agent - Project Collection 參考,每台機器只能處理一個 Collection 的問題總算獲得解決,但 TFS Build Service 綁定 TFS Server 版本,並非想升級就能升級,這又是另一項缺點
  3. TFS Build Service 缺乏 Web 化管理介面,非開發者如營運部署人員如需使用得安裝 Visual Studio

基於以上考量,決定試試近年在 DevOps 界很紅的 Jenkins。

慢半拍學習 Jenkins 的好處是參考資訊多,參考網路學長們的文章,針對公司環境做了調整,順利改用 Jenkins 建置 ASP.NET WebForm 及 ASP.NET MVC 專案。 依照慣例,筆記備忘是必要的,近期將陸續整理分享,第一篇先從安裝設定講起:

  1. 關於 Jenkins on Windows 基本安裝與 TFS 設定,網路上已有不少文章可資參考,在此列舉一二,細節不再贅述。
  2. 手動停止與啟動 Jenkins
    安裝設定期間有不少東西要調,UI 有「從磁碟重新載入設定」(Reload Configuration from Disk)按鈕,但手動重啟 Jenkins 比較乾脆。控制程式在 C:\Program Files (x86)\Jenkins\jenkins.exe,執行 jenkins stopjenkins start 可停止或啟動 Jenkins 伺服器。
  3. Jenkins 靠 Plugin 提供各式各樣的整合功能,故安裝過程及管理介面會列舉 Plugin 清單供你選擇下載。我在工作機試裝時遇上第一個麻煩,安裝階段出現「This Jenkins instance appears to be offline」,只有 Configure Proxy、Skip Plugin Installation 兩項選擇。研究發現又是公司網路環境 SSL 憑證被置換的老問題,IE/Chrome 已匯入置換憑證的 CA 根憑證,但 Jenkins 用的是 Java 不認得。解決方法有二:
    1. 找到 C:\Program Files (x86)\Jenkins\hudson.model.UpdateCenter.xml,將 <url>https://updates.jenkins.io/update-center.json</url> 的 https: 改成 http: 參考
    2. keytool 安裝 CA 根憑證或加 -Dcom.sun.net.ssl.checkRevocation=false 停用檢查,但這部分因 Java 版本而異且步驟較多,第一種做法較簡單。
  4. Jenkins 是否可合法商業使用?這是在企業應用的必考題,答案是 Jenkins 採 MIT 授權,是眾多開源授權中最寬鬆的,企業可安心服用。
  5. 講到軟體授權,Jenkins 跑在 Java 上... 不想被 Oracle 追討 Java 授權費的話,最好確認一下。
    很不幸,C:\Program Files (x86)\Jenkins\jre 自帶的是 java.exe 版本來自 Orcale,二話不說,依先前 Windows Open JDK 替代方案研究心得,下載 ojdkbuild,停止服務,修改 C:\Program Files (x86)\Jenkins\jenkins.xml
    <executable>C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.191-1\bin\java</executable>
    
    再重啟服務,嗯,安心多了...

    不料,改用 OpenJDK 後網站就連不上了! (登楞) 查了一陣子發現是防火牆問題,安裝時自動設定的防火牆綁定 C:\Program Files( (x86)\Jenkins\jre\bin\java.exe,需一併修改(可改開放 8080 Port):
  6. 在工作機測試成功,要搬到正式運行 Jenkins 主機時,會遇到封閉環境無法連上 Internet 問題。
    Jenkins 文件 Offline Jenkins Installation 有專章說明,做法是先在連網主機安裝好,打包整個 Jenkins 目錄複製到目的主機;另一種做法是另外下載 Plugin 打包送到離線 Jenkins 主機上安裝。後者程序較多且需第三方工具,詳情可參考官方文件。
    我實測較簡單的做法是從 https://updates.jenkins-ci.org/download/plugins/ 下載 hpi 檔案,再用 Plugin Manager / Advanced 上傳:
  7. 修改工作區(Workspace)目錄
    Jenkins 的預設工作區目錄在 C:\Program Files (x86)\Jenkins\workspace,實務上傾向另設專用資料夾。
    每個建置專案可以個別指定工作區,修改預設工作區比較省事。參考:Jenkins: Change Workspaces and Build Directory Locations,文章所說可以改路徑的 Advanced 按鈕已經被移除,我找到 C:\Program Files (x86)\Jenkins\config.xml 的 workspcaeDir、buildsDir 設定。
     <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir>
     <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
    
    可改成
     <workspaceDir>X:/Workspace/${ITEM_FULL_NAME}</workspaceDir>
     <buildsDir>X:/Jobs/${ITEM_FULL_NAME}/builds</buildsDir>
    

Notes about setup and config Jenkins in enterprise environment, especially when the Internet connection is restricted.


Comments

# by Kmxinfo

建置工作建議不要用GUI,使用Pipeline比較好喔~~ https://ithelp.ithome.com.tw/articles/10201429

# by MattChung

執行序大大你好,不知道你有沒有遇過jenkins裝Plugin 失敗的問題?我猜測應該是我們公司網路設定有關係,我跟你遇到的問題類似都有遇到第三點問題。想詢問大大有沒有好的處理方法?

# by Jeffrey

to MattChung,若是卡在網路環境限制,得由錯誤訊息找原因再對症下藥。

Post a comment