非maven專案利用jenkin實現自動部署
所在的公司,現在想要利用jenkins實現自動化的部署,目標是,在eclipse上修改,將程式碼提交到團隊的github中央倉庫上,之後,利用jenkins連線github,在jenkins上裡面將專案打包成一個ear包(實際上裡面包含兩個war用於前後端的釋出)之後上傳到nexus,成功後,利用部署工具G3來完成部署。
首先面對的困難是,因為專案都是老掉牙的java專案,不是maven專案,不過也可以選擇用freestyle pipeline來完成,但是如果這樣子的話,由於種種許可權不及像小公司那樣用tomcat那麼簡單,所以如果用freestyle pipeline 的話,怎麼實現利用部署工具是個問題。
最終選擇了,公司自定義的標準pipeline,但是該pipeline只針對maven,因此,我接下來要解決的問題有如下:
(1)不熟悉maven畢竟我是菜鳥戰鬥機
(2)怎麼利用maven來實現打包和上傳,這裡由於我們上傳到私服和部署都只是利用ear包,因此,我的思路是這樣,不要改變以前的工程,新建一個maven工程,來包含ear裡面需要的兩個war包,並且通過這個mvn 命令打包這個專案成ear,這樣處理的話,相對畢竟簡單而且無風險,失敗了就用回以前手動部署就行。
關於問題(2),
首先專案工程結構類似如下:因為公司電腦不能連外網所以這個是我模仿大概建立的。
在部署的時候,會將CBRCentralEAR export出來,直接扔上去,因為CBRCentralEAR 關聯了CBRapp和 CBRBEapp,而這兩個jave ee工程,因此最終exprot的CBRCentralEAR 裡面包含兩個包CBRapp.war和CBRBEapp.war.
好,到此的話,那麼我就新建一個maven工程,名字叫GenerateEAR,作用是模仿CBRCentralEAR 這個工程的作用,生成ear包,那麼問題就解決了。
然而不懂maven的我蠢蠢的針紮了好久,過程就忽略了,主要在這裡我遇到了一個問題:
我要將兩個war打包在我的maven工程裡,這個maven只要用dependency就可以實現了,但是但是!
這兩個包是我自己的,不是真的需要依賴,不需要下載的。。
因此查了各種資料,最終我整合成一個四不像辦法,僅供參考。
適合那些想要利用maven打包本地檔案的人:
首先將你要的東西,直接放到你的本地倉庫,這樣就可以實現了,這種辦法適合在本地機玩玩,
比如我直接將我的CBRBEapp.war放到C:\Users\Administrator.m2\repository\CBRBEapp\1.0\CBRBEapp.war
這樣dependency就會直接在本地倉庫找到,接著用cmd mvn clean install 即可
但是我利用jenkins就是要部署到遠端機器上啊,所以此路不通,因此我又新建了一個maven工程,叫InstallWARS 作用是將我要的war包安裝到遠端機器上的本地倉庫,
其實很簡單,pom檔案如下:這樣我就能把我本地的war安裝到遠端的本地倉庫
接下來,GenerateEAR 的pom如下,實現打包ear並且上傳到nexus。因為上面的InstallWARS工程已經把war安裝到本地倉庫了,所以這裡的pom檔案的dependcy就不會報錯了。
雖然這樣處理了,但是到現在還沒有完成這個task因為,這個過程不容易啊,而且要等,不過我的這種做法還是不夠簡單,以後有機會在提高。