Tomcat + Gitlab CI 配置持續整合環境

自從公司 gitlab 架起來之後,一直想要來試試看有沒有辦法實現自動部署 j2ee 的 web application 到客戶家的 tomcat server 上。
經過一整個下午的奮鬥,於是有了這篇簡單的紀錄。
環境
- GitLab Community Edition 9.3.4
- jre 1.6
- tomcat 6.0.35
第一部分:從 CMD 編譯 WAR 檔
一直以來這個專案都是用 Eclipse 開發,所以要生成 war 檔也是直接從 Eclipse 中對專案按右鍵執行匯出的方式處理,因此想要整進 CI 第一個要搞定的就是這個。
1.編譯純 Java 檔的部分
專案除了 jsp 的檔案之外,還有一些 .java 檔需要先編譯好,再一起包進去。此部分就是很單純的 Java 編譯,指令如下:
1 | cd ./src |
大致上的意思就是切進 ./src 的資料夾底下,然後把所有副檔名是 .java 的檔案整理成一份清單,最後照這份清單依序編譯。
-encoding用來指定編碼,我用的是 UTF-8-cp用來指定所有有用到的.jar檔所在的位置-d用來指定編好的.class檔要放在哪個資料夾
2.將整個專案封裝成 WAR 檔
上網估狗了各種資料,最後整理出來的 command line 指令如下:
1 | cd ./WebContent |
也就是先進到專案根目錄的下一層/WebContent內,其他的 Eclipse 相關的東西通通不編譯進去,然後才下包裝的指令。參數的部分稍微解釋一下
-v是用來將細節 print 出來,可下可不下,-c跟-f則是一定要的東西- 第二個是 war 檔的檔名,自己決定吧
*意味著整個目錄 (./WebContent/*) 內的東西通通都要進去WEB-INF則是自己指定自己的 manifest 檔案所在目錄 (./WebContent/WEB-INF) ,這部分由於 Eclipse 幫我建好了,所以我如果沒有指定的話,部署上去之後會無法啟動
執行完後應該可以在目錄看到你的 war 檔了,可以拿去部署看看能否成功 :D
第二部分:Tomcat 環境準備
tomcat 需要準備的部分只有開放透過 http request 就可以完成 undeploy & deploy 的功能即可。
- 編輯使用者權限:透過 vim 開啟設定檔
TOMCAT_ROOT\conf\tomcat-user.xml改成如下面所示
1 |
|
就是新增一個 rolename 叫做 manager-script ,然後指定給你的 user
- 存檔,然後重啟 tomcat
完成設定後即可以使用此兩個網址進行 undeploy & deploy 的動作:
http://{USER}:{PW}@{SERVER_URL}:{PORT}/manager/undeploy?path=/{WAR_PATH}
http://{USER}:{PW}@{SERVER_URL}:{PORT}/manager/deploy?path=/{WAR_PATH}&update=true
第三部分:gitlab-ci
其實同事已經幫我做掉這一塊最麻煩的事情,也就是準備一個 Runner 。
因此這個部分我也沒辦法紀錄些什麼,只知道東西似乎是用 Docker 架起來的 XD
在 Runner 已經準備好的情況,唯一需要做的事情就是在專案根目錄新增.gitlab-ci.yml檔即可,我寫出來的檔案如下
1 | image: java:6 |
一樣稍微解釋一下我覺得需要說明的部分
image的部分指定了要用 java 1.6 進行編譯tags我上了linux字樣,此部分要跟 Runner 配合。因為我們公司備了兩台 Runner ,一台是 Windows 一台是 Linux ,所以我需要指定強制用帶有linux這個 tag 的那台 Runner 編譯only master應該還算好懂,只有 master 有動作時會觸發- 剩下的
script指令就理解成會在 cmd 執行的東西就可以了
以上,寫完之後 git push master 然後就可以去 gitlab 網站上看執行的結果了。
後記
- 其實我猜 Runner 才是最難搞的部分,結果我剛好可以撿同事現成的東西來用,省下了不少工啊 XD
- 改天再來把 slack 的 webhook 掛上去,未來可以直接從 slack 上面看到部署結果