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