java项目构建部署启动脚本

mvn打包pom配置

pom.xml
	<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.8.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                </plugin>
                <plugin>
                    <groupId>com.mysema.maven</groupId>
                    <artifactId>apt-maven-plugin</artifactId>
                    <version>1.1.3</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>woff</nonFilteredFileExtension>
                        <nonFilteredFileExtension>woff2</nonFilteredFileExtension>
                        <nonFilteredFileExtension>eot</nonFilteredFileExtension>
                        <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
                        <nonFilteredFileExtension>svg</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <type>jar</type>
                            <includeTypes>jar</includeTypes>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <finalName>util</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <descriptor>assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        </plugins>
    </build>
assembly.xml
<assembly xmlns="http://maven.apache.org/ASSEMBLY/3.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/3.1.0 http://maven.apache.org/xsd/assembly-3.1.0.xsd">
    <id>release</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/lib</directory>
            <outputDirectory>lib</outputDirectory>
            <!-- linux文件权限 -->
            <fileMode>0644</fileMode>
        </fileSet>
    </fileSets>
    <files>
        <file>
            <source>${project.build.directory}/util-1.0-SNAPSHOT.jar</source>
            <destName>util-1.0-SNAPSHOT.jar</destName>
        </file>
    </files>
</assembly>

构建部署脚本
# 初始构建目录
NOW_HOME=$PWD
mvn clean install -Dmaven.test.skip=true;
mvn package -Dmaven.test.skip=true;

# 当前时间格式化
NOW_DATA=`date "+%Y-%m-%d+%H:%M:%S"`
# 项目名称
PROJECT_NAME=
# 项目压缩包名称
TARGET_TAR_NAME=`$PROJECT_NAME-$NOW_DATA.tar.gz`
# 部署的目标服务器登陆账号和密码;需要对当前项目构建服务器免密登陆
TARGET_SERVER=root@127.0.0.1
# assembly打包的项目压缩包路径
COMPLIE_TAR_PATH=$NOW_HOME/编译后的assembly打包好的压缩包路径
# 部署服务器上历史部署工程备份文件夹
TARGET_BACKUP_DIR=/app/bak
# 解压缩根目录名称
DECP_DIR_NAME=$PROJECT_NAME
# 部署服务器上项目压缩包的解压目录路径
DECP_DIR_PATH=$TARGET_BACKUP_DIR$DECP_DIR_NAME
# 部署服务器上项目最终运行目录
RUN_PROJECT_DIR=/app/$PROJECT_NAME

# 在目标端创建出历史编译工程备份文件夹
ssh $TARGET_SERVER "mkdir -p $TARGET_BACKUP_DIR";
# 把编译好的压缩包发送到目标端
scp -r $COMPLIE_TAR_PATH $TARGET_SERVER:$TARGET_BACKUP_DIR/$TARGET_TAR_NAME
# 在目标端把编译包解压到备份文件夹
ssh $TARGET_SERVER "tar -zxvf $TARGET_BACKUP_DIR/$TARGET_TAR_NAME -C $TARGET_BACKUP_DIR";
# 先把停止项目脚本复制到运行目录
ssh $TARGET_SERVER "cp -rf $DECP_DIR_PATH/stop.sh $RUN_PROJECT_DIR/";
# 执行停止脚本;停掉之前正在运行的工程
ssh $TARGET_SERVER "cd $RUN_PROJECT_DIR; sh stop.sh";
# 然后重命名旧的的工程目录
ssh $TARGET_SERVER "mv $RUN_PROJECT_DIR $RUN_PROJECT_DIR-OLD";
# 把新工程目录移动重命名为运行工程目录
ssh $TARGET_SERVER "mv $DECP_DIR_PATH $RUN_PROJECT_DIR";
# 启动新工程
ssh $TARGET_SERVER "cd $RUN_PROJECT_DIR; sh start.sh";
# 删除旧工程目录
ssh $TARGET_SERVER "rm -rf $RUN_PROJECT_DIR-OLD";
启动脚本 start.sh
#!/bin/bash
sleep 1
function start() {
    cd "$1"
	DIR_BASE="$1"
	BootStrap="$1/$2"
	JVM_SIZE=''
	YOUNG_SIZE=''
	NEW_SIZE=''
	DIR_LIB=$DIR_BASE/lib
	JAVA_OPTS='-Dfile.encoding=UTF-8 -Dsun.rmi.dgc.client.gcInterval=600000  -Dsun.rmi.dgc.server.gcInterval=600000 -Dnet.sf.ehcache.enableShutdownHook=true'

    #if test -e $DIR_LIB;then
    #    JAVA_OPTS="$JAVA_OPTS -cp $DIR_LIB"
    #fi

	if [ "$JVM_SIZE" = '' ];then
	  JVM_SIZE=$(free -m | awk '$2 > 0 && NR==2 {print (($2/128) - ($2/128%1)) * 64 }') > /dev/null
	fi
	if [ $JVM_SIZE -gt 4096 ];then
	  JVM_SIZE=4096
	fi

	YOUNG_SIZE=$(($JVM_SIZE / 4))
	NEW_SIZE=$(($YOUNG_SIZE / 2))

	JVM_OPTS=" \
-server \
-Xms${JVM_SIZE}M \
-Xmx${JVM_SIZE}M \
-Xmn${YOUNG_SIZE}M \
-XX:NewSize=${NEW_SIZE}M \
-Xss1M \
-XX:+PrintHeapAtGC \
-XX:SurvivorRatio=8 \
-XX:+PrintGCDetails \
-XX:+PrintFlagsFinal \
-XX:MetaspaceSize=64m \
-XX:+PrintGCTimeStamps \
-XX:+PrintGCDateStamps \
-XX:+DisableExplicitGC \
-XX:+UseConcMarkSweepGC \
-XX:PrintFLSStatistics=1 \
-XX:MaxMetaspaceSize=512m \
-XX:+PrintCommandLineFlags \
-XX:+UnlockDiagnosticVMOptions \
-XX:+PrintTenuringDistribution \
-XX:-HeapDumpOnOutOfMemoryError \
-XX:+PrintGCApplicationStoppedTime \
-XX:+PrintGCApplicationConcurrentTime"

	touch nohup.out && sudo chmod 755 *
	REMOTE_DEBBUG_CMD='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=14567'
	echo "nohup java $REMOTE_DEBBUG_CMD $JVM_OPTS $JAVA_OPTS -jar $BootStrap > $DIR_BASE/nohup.out 2>&1 &"
	nohup java $REMOTE_DEBBUG_CMD $JVM_OPTS $JAVA_OPTS -jar $BootStrap > $DIR_BASE/nohup.out 2>&1 &
}

CUR_DIR=$(dirname $0)
cd $CUR_DIR

JAR_NUM=$(ls *jar | awk -F " " '{print $1}' | wc -l)
if [ $JAR_NUM != 1 ]; then
    echo "check jar file name failed, there is more or less than one jar file."
    exit 1
fi

BOOT_STRAP=$(ls *jar | awk -F " " '{print $1}')
RUN_PID=$(ps -wef | grep java | grep -i $BOOT_STRAP | grep -v grep | awk -F " " '{printf $2" "}')

if test -z "$RUN_PID";then
    start "$CUR_DIR" "$BOOT_STRAP"
else
    echo "The Service already starting."
    echo "$RUN_PID"
fi
停止脚本 stop.sh
#!/bin/bash
CUR_DIR=$(dirname $0)
cd $CUR_DIR

JAR_NUM=$(ls *jar | awk -F " " '{print $1}' | wc -l)
if [ $JAR_NUM != 1 ]; then
    echo "check jar file name failed, there is more or less than one jar file."
    exit 1
fi

BOOT_STRAP=$(ls *jar | awk -F " " '{print $1}')
RUN_PID=$(ps -wef | grep java | grep -i $BOOT_STRAP | grep -v grep | awk -F " " '{printf $2" "}')

if test -z "$RUN_PID"
then
    echo "The Service already stopped."
else
    echo "$RUN_PID"
    for pid in $RUN_PID
    do
        if ! test -z $pid
        then
            kill -9 "$pid"
        fi
    done
    echo "Stopped Service Success."
fi
exit 0
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值