1.编写sh脚本,便于服务器上管理工程:
#!/bin/bash source /etc/profile PROG_NAME=$0 ACTION=$1 usage() { echo "Usage: $PROG_NAME {start|stop|restart|status|tailf}" exit 1; } # colors red=‘\e[0;31m‘ green=‘\e[0;32m‘ yellow=‘\e[0;33m‘ reset=‘\e[0m‘ echoRed() { echo -e "${red}$1${reset}"; } echoGreen() { echo -e "${green}$1${reset}"; } echoYellow() { echo -e "${yellow}$1${reset}"; } APP_HOME=$(cd $(dirname $0)/..; pwd) app=${project.build.finalName}.${project.packaging} cd $APP_HOME mkdir -p logs pidfile=logs/app.pid logfile=logs/start.`date +%F`.log JAVA_OPTS="${java_opts}" bakdir=/data/ops/packages/app_bak/${project.build.finalName} bakfile=$bakdir/${project.build.finalName}`date +%F`.${project.packaging} function check_pid() { if [ -f $pidfile ];then pid=`cat $pidfile` if [ -n $pid ]; then running=`ps -p $pid|grep -v "PID TTY" |wc -l` return $running fi fi return 0 } function start() { check_pid running=$? if [ $running -gt 0 ];then echoGreen "$app now is running already, pid=`cat $pidfile`" return 1 fi nohup java -jar $JAVA_OPTS $app >> ${logfile} 2>&1 & pid=$! echoGreen "$app starting " for e in $(seq 10); do echo -n " $e" sleep 1 done echo $pid > $pidfile check_pid running=$? if [ $running -gt 0 ];then echoGreen " ,pid=`cat $pidfile`" return 1 else echoRed ",started fail!!!" fi } function stop() { pid=`cat $pidfile` kill -9 $pid echoRed "$app stoped..." } function restart() { stop sleep 1 start } function backup(){ if [ ! -x $bakdir ];then mkdir -p $bakdir fi if [ ! -f $bakfile ];then cp $app $bakfile echo $bakfile backup finish else echo $bakfile is already backup fi } function rollback(){ if [ ! -f $bakfile ];then echo $bakfile backup not found else rm -f $app cp $bakfile $app echo $app rollback finish fi } function tailf() { tail -f $APP_HOME/$logfile } function status() { check_pid running=$? if [ $running -gt 0 ];then echoGreen "$app now is running, pid=`cat $pidfile`" else echoYellow "$app is stoped" fi } function main { RETVAL=0 case "$1" in start) start ;; stop) stop ;; restart) restart ;; tailf) tailf ;; status) status ;; backup) backup ;; rollback) rollback ;; *) usage ;; esac exit $RETVAL } main $1
文件中包含多个站位符,可以借助spring filter打包时进行填充,如将sh起名为app.sh放置于maven格式项目的src/main/bin目录下则在pom文件中可添加如下配置,如:
<profiles> <!--开发默认环境--> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <profileActive>dev</profileActive> <java_opts>-server -Xms512m -Xmx512m -XX:NewSize=128m -XX:MaxNewSize=128m -Xss256k</java_opts> <bakcupdir>/data/ops/packages/app_bak</bakcupdir> </properties> </profile> <!--生产环境--> <profile> <id>product</id> <properties> <profileActive>product</profileActive> <java_opts>-server -Xms2048m -Xmx2048m -XX:NewSize=256m -XX:MaxNewSize=256m -Xss256k</java_opts> <bakcupdir>/data/ops/packages/app_bak</bakcupdir> </properties> </profile> </profiles> <build> <finalName>liam-service</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources/keys/*</directory> <includes> <include>webank_keystore.jks</include> <include>webank_truststore.jks</include> </includes> <filtering>false</filtering> </resource> <!--也就是此处配置上maven打包需要进行配置的文件--> <resource> <directory>src/main/bin</directory> <targetPath>${project.build.directory}/bin</targetPath> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.6.RELEASE</version> <configuration> <!--fork: 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart--> <fork>true</fork> </configuration> <executions> <execution> <goals> <!-- 用于打包jar --> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>${jdk.version}</source> <target>${jdk.version}</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>utf-8</encoding> <useDefaultDelimiters>true</useDefaultDelimiters> <nonFilteredFileExtensions> <!--防止maven该表证书内的内容--> <nonFilteredFileExtension>p12</nonFilteredFileExtension> <nonFilteredFileExtension>jks</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin> </plugins> </pluginManagement> </build>
如此将包打好后扔于服务器上,就很方便了:
ssh "chmod +x /data/ops/app/liam-service/bin/app.sh" ssh "/data/ops/app/liam-service/bin/app.sh backup" ssh "/data/ops/app/liam-service/bin/app.sh stop" ssh "/data/ops/app/liam-service/bin/app.sh start"
当然借助jenkens的话会很方便~