背景
有時候針對特殊項目配置,必須使用windows作為服務器使用;對於經常使用jenkins進行項目自動化的構建,所以想到的第一個念頭就是如何使用jenkins進行windows項目的構建呢?
對於linux系統,需要使用ssh進行文件的傳輸,通過資料篩選和實踐,發現windows也是同一原理。
環境配置
jenkins服務器:windows系統(windows10)
web服務器:windows系統(PC2,可以是windows10或者2012)
windows服務器powershell Server端口號設置
使用windows服務器,同樣也必須支持SSH連接,這里使用的是powershell Server作為中間件,進行傳輸配置
powershell Server可以訪問官網下載或者如下地址鏈接:https://pan.baidu.com/s/1iJJis5KGqR0uhXa0OZumDw 提取碼:jfwx
安裝完成之后使用管理員身份運行程序:打開配置,如下默認22端口如果被占用,需要修改其他端口號;這里修改端口號為1122;
jenkins-服務器putty配置&證書
客戶端(jenkins服務器)連接powershell Server可以使用用戶名密碼連接或者通過證書連接;證書連接需要通過puttygen生成證書並上傳到windows服務器上,如下打開puttygen
密鑰生成后,可以為密鑰設置密碼,點擊save private key, 保存客戶端私鑰,保存為自定義后綴名為“.ppk”的文件:
之后不要點擊save public key,手動復制public key的內容到.txt文件保存(其他任何文件類型皆可),並上傳到web服務器端:
如圖
powershell Server 證書配置
web服務器上PowerShell server 配置如下,修改配置后要重啟服務:
putty連接powershell server配置:
打開putty,設置IP和端口,connection-SSH-Auth 設置如下
然后點擊"open"連接powershell server,連接如下:提示輸入"rsa-key-20200929",需要輸入連接服務器的私鑰,
輸入私鑰之后,提示"SSH-Enable powerShell Acess for Windows"表示連接成功,如上圖。
jenkins構建配置
這樣jenkins服務器就可以和web服務器通信了,接下來就是通過jenkins上傳war完成項目自動化構建,在jenkins系統配置中設置windows服務器的連接配置,如圖
配置中需要注意連接的Username、Remote Directory、Passphrase / Password以及Port。配置好之后可以點擊[Test Configuration]測試是否配置完成。
項目自動化構建
新建一個自由風格的項目,基本配置這里忽略,特別說明構建后的操作如下
killJar腳本如下
@echo off
D:
cd D:\project\tomcat-stj\tomcat-rcm-stj\bin
::關閉tomcat
call shutdown.bat
:: 休眠10秒
ping 127.0.0.1 -n 1 >nul
jenkins-auto-start腳本如下
@echo off
:: 源文件設置
:: set SourceFile=C:\"Program Files"\nsoftware\"PowerShell Server 2020"\sftproot\rcm*.war
:: 刪除發布文件
D:
rd /s/q D:\project\tomcat-stj\tomcat-rcm-stj\webapps\rcm_stj\
echo test2
:: 新建文件夾rcm_stj
md "D:\project\tomcat-stj\tomcat-rcm-stj\webapps\rcm_stj"
:: XCOPY FILES
xcopy C:\"Program Files"\nsoftware\"PowerShell Server 2020"\sftproot\rcm*.war D:\project\tomcat-stj\tomcat-rcm-stj\webapps\rcm_stj /E /Y
echo test3
:: 重命名war包
ren D:\project\tomcat-stj\tomcat-rcm-stj\webapps\rcm_stj\rcm*.war rcm_stj.war
:: 復制war包會/E會產生空的rcm_stj文件夾,需要刪除
rd /s/q D:\project\tomcat-stj\tomcat-rcm-stj\webapps\rcm_stj\rcm_stj\
:: 解壓war包
d:
cd D:\project\tomcat-stj\tomcat-rcm-stj\webapps\rcm_stj
jar -xvf rcm_stj.war
:: 休眠10秒
:: ping 127.0.0.1 -n 10 >nul
echo test4
::替換配置文件
copy /Y D:\project\bak\rcm_stj\jdbc.properties D:\project\tomcat-stj\tomcat-rcm-stj\webapps\rcm_stj\WEB-INF\classes\
copy /Y D:\project\bak\rcm_stj\license.lic D:\project\tomcat-stj\tomcat-rcm-stj\webapps\rcm_stj\WEB-INF\classes\
:: call startup.bat
:: 休眠10秒
ping 127.0.0.1 -n 10 >nul
:: 刪除發布文件夾中的war包
del D:\project\tomcat-stj\tomcat-rcm-stj\webapps\rcm_stj\*.war
:: 刪除xftp中的所有war文件
del C:\"Program Files"\nsoftware\"PowerShell Server 2020"\sftproot\*.war
:: call startup.bat
:: 休眠10秒
:: ping 127.0.0.1 -n 10 >nul
::啟動tomcat
D:
cd D:\project\tomcat-stj\tomcat-rcm-stj\bin
::關閉tomcat
call startup.bat
:: 休眠10秒
ping 127.0.0.1 -n 10 >nul
腳本執行思路說明流程圖如下:
其他補充
war上傳位置說明
通過putty連接powershell server上傳的war的默認位置是在powershell server的安裝路徑sftproot目錄下
windows腳本命令
del是刪除文件夾的命令
rd或rmdir是刪除文件夾包括文件
copy是復制單一的文件信息,而xcopy是復制包括文件夾
錯誤處理
在構建時會出現提示如圖"ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 960,001 ms]"
這個問題經查證是:連接超時,而Jenkins無法從腳本中正確退出。可以參考https://stackoverflow.com/questions/11290540/jenkins-text-finder-unable-to-success-my-build
解決方法:
第一步:在構建后操作鍾,設置"Exec timeout(ms)"設置為項目構建時間,為毫秒為單位;這里根據項目情況設置為960000;且勾選"Exec in pyt"如圖
第二步:在Exec command中添加"exit 0"作為結束,如圖
參考
https://blog.csdn.net/achenyuan/article/details/81166526