一般Web工程通過Jenkins遠程部署到Tomcat,可以採用Maven的tomcat-maven-plugin插件進行部署。最近接觸到Spring Boot工程的部署,由於Spring Boot應用可以使用內部集成的服務容器(如Tomcat),此時無需按原來的方法進行部署。以工程asset_we ...
一般Web工程通過Jenkins遠程部署到Tomcat,可以採用Maven的tomcat-maven-plugin插件進行部署。最近接觸到Spring Boot工程的部署,由於Spring Boot應用可以使用內部集成的服務容器(如Tomcat),此時無需按原來的方法進行部署。以工程asset_web為例,從120伺服器上的Jenkins部署到121上。
大致步驟:
- Jenkins從git上獲取最新代碼,編譯打包;
- 將打包好的jar包部署到121伺服器上;
- 121伺服器關閉原來應用,然後啟動新版本。
關鍵點在於最後一點,可以通過腳本進行操作。
構建部署運行
1. Jenkins配置
系統設置:
添加SSH伺服器,Remote Directory指定待部署遠程伺服器的目標路徑;勾選Use password***,輸入遠程伺服器密碼:
工程配置:
- Build中配置maven命令 clean install deploy:
- 在“構建後操作”中選中 Send build artifacts over SSH,配置之前添加的遠程伺服器:
- 選中121伺服器,Source files指定構建後可運行的jar包,其值為相對路徑:asset_web/target/asset.jar(實際路徑/root/.jenkins/workspace/asset/asset_web/target);Remote Directory只需填“/”,其會引用系統配置的路徑;Exec command 可指定運行腳本,此處運行restart.sh腳本,會重啟spring boot 應用,啟用新版本。
2. 重啟腳本
首先關閉工程對應的進程,然後啟動新版本的應用。
#restart.sh #!/bin/bash echo "Restarting SpringBoot Application" pid=`ps -ef | grep asset.jar | grep -v grep | awk '{print $2}'` if [ -n "$pid" ] then kill -9 $pid echo "關閉進程:"$pid fi echo "授予當前用戶許可權" chmod 777 /usr/src/springboot-app/asset.jar echo "執行....." java -jar /usr/src/springboot-app/asset.jar
碰到的問題
1. SpringBoot打包成jar後運行提示沒有主清單屬性
原因:maven工程沒有繼承spring-boot-starter-parent,其中包含maven插件spring-boot-maven-plugin(將工程打包成可執行文件,即指定MANIFEST.MF文件中Main-Class,即運行jar時的main入口)。
解決:需要在pom文件的build中添加該插件,即:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
2. 運行jar時,內嵌Tomcat預設8080埠被占用,需要修改埠
有三種方式修改埠( Spring Boot修改內置Tomcat埠號),其中在配置文件application.properties中添加server.port=8180比較方便。
3. SpringBoot日誌管理
參考SpringBoot的日誌管理和boot-features-logging(後續深入研究下)
參考:
- https://www.cnblogs.com/niceboat/p/6230448.html
- https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-maven-without-a-parent
- Spring Boot修改內置Tomcat埠號
- SpringBoot的日誌管理
- boot-features-logging