之前一直在linux中使用jenkins部署程序,正好現在的項目包括了winfrom程序,所以需要部署到windows系統中
jenkins官網:https://jenkins.io/
下載之后運行jenkins.msi即可傻瓜化安裝,這里不再重復演示安裝過程,如果遇到安裝問題請自行百度。
首先,先介紹一下我的項目結構和發布流程:
項目由java與c#混合開發,使用微服務架構,一共2個子服務,一個win程序,還有eureka服務、網關服務
由於我使用的是springboot構建的項目,為了能夠實現自動化發布,我選擇適合winsw將我的jar包打包成windows服務 https://github.com/kohsuke/winsw
其中exe是使用.net 4.6開發的,為了能夠讓jenkins自動構建,我選擇使用MSBuild來編譯.net項目
1、創建一個新的認證
2、新建一個自由風格的項目
3、配置項目
這里我使用的GitHub來作為代碼倉庫,關於SVN在網上也有教程,可根據自己實際情況配置
要使用GitHub你需要先安裝Github Plugin插件,不過新版本的jenkins默認已經給安裝好了,只需配置一下本地的git.exe路徑,注意要cmd文件夾下的git.exe
下面的GitHub hook trigger for GITScm polling是新版本jenkins的選項,以前jenkins是叫另外一個名字,反正帶有GitHub關鍵詞你選中就行
因為我是在windows系統中部署,所以使用的是批處理腳本,下面被遮擋是我項目的具體路徑,因不想公布所以遮擋住
在批處理中我首先做了這么幾件事:
1、jenkins從github上拉取項目源代碼
2、判斷本地工作空間是否存在publish文件夾(用於存放編譯好的程序以及腳本)
如果存在,首先調用stop腳本強制停止所有占用端口的程序,然后依次關閉對應的windows服務,最后把publish文件夾里的內容全部清空
ps:先強制關閉是有原因的,因為程序被占用,你后面的清空操作不會成功的
如果不存在,新建publish文件夾,將所有mvn clean package打包的jar文件從target目錄拷貝到publish文件夾
3、調用MSBuild命令編譯.sln解決方案
/t:Rebuild
/property:Configuration=Release
/property:TargetFrameworkVersion=v4.6
第一行是指的重新構建解決方案
第二行是指的此次編譯時Release方式而不是Debug方式
第三行是指的使用Framework 4.6來編譯項目
當MSBuild編譯好項目之后, 把bin/Release文件夾中的所有文件全部拷貝到publish\app\Release文件夾中
4、發布到遠程服務器
要使用這一步操作,你需要安裝Publish over FTP插件並且配置他
到此整個自動發布過程就好了,但是自動部署還沒完成,由於是windows操作系統,我沒有辦法使用Publish over SSH插件來遠程執行shell命令,所以,我的解決方案是:
我將所有的操作都封裝成了批處理腳本,這個腳本在自動發布的時候就已經帶到了遠程服務器中,我只需運行一下run.bat或者stop.bat即可完成所有服務和程序的安裝卸載與運行停止
但我不想每次都連接服務器去發布,因為是測試環境,每次都連服務器發布很麻煩,所以我寫了一個socket程序監聽命令,收到指令后自動調用bat腳本
到此,全部結束!