赞
踩
一. 项目结构:
说明: 其中1为启动脚本,2为maven构建配置 3 为将项目构建成公司统一管理风格 4 为pom依赖
app_control.bash:
- #!/bin/bash
- set -o pipefail
- set -u
- EXTERNAL_LOADER_PATH="../conf"
- SERVER_PORT=8080
- SHUTDOWN_HOST=127.0.0.1
- EXEC_STD_OUT=/dev/null
- LOG_ROOT_PATH="./logs"
- LOG_FILE_NAME="em.log"
- #source env.bash
- #evironment set
- WEB_BIN=`pwd`
- CONF_DIR="${WEB_BIN}/../conf"
- CONFIG_LOCATION=/data1/www/rz_entrance/config/java_config/rz_em_etl/application.properties
- JAVA_OPTS=" -server -Xmx1g -Xms1g -Xmn256m -XX:MetaspaceSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70"
- JAVA_OPTS="${JAVA_OPTS} -Dserver.port=${SERVER_PORT}"
- #JAVA_OPTS="${JAVA_OPTS} -Dloader.path=${WEB_BIN}/../conf,${EXTERNAL_LOADER_PATH}"
- #JAVA_OPTS="${JAVA_OPTS} -Dlogging.path=${LOG_ROOT_PATH} -Dendpoints.logfile.external-file=${LOG_ROOT_PATH}/${LOG_FILE_NAME}"
- START_UP_EXEC="java -Dfile.encoding=utf-8 -Dspring.config.location=${CONFIG_LOCATION} ${JAVA_OPTS} -jar $WEB_BIN/../lib/rz-em-etl.jar"
- #Time Config
- START_WAIT=5
- SHUT_WAIT=10
- KILL_INTERVAL=5
- KILL_TIMES=5
- #RETURN CODES
- RET_SUCCESS=0
- RET_INSTANCE_DEAD=1
- RET_ERROR_SHUT=2
- RET_ERROR_START=3
- RET_STATUS_ALIVE=0
- RET_STATUS_NOT_ALIVE=1
- INSTANCE_PID=rz-em-etl.pid
-
- function get_Pid(){
- if [ ! -z ${INSTANCE_PID} ];then
- if [ -f ${INSTANCE_PID} ];then
- cat "${INSTANCE_PID}"
- fi
- else
- ps -ef | grep -vE "grep $WEB_BIN|$0" | grep ${WEB_BIN} | awk '{print $2}'
- fi
- }
- #get pid
- PID=`get_Pid`
- function usage(){
- cat <<EOM
- Purpose : This script encapsulates the spring boot jar and just acts like a controller.
- Usage : bash ${0} start|shutdown|kill|force|restart|status
- Date : 2017.03
- EOM
- }
- #test instance alived or not
- function is_Instance_Alive(){
- #kill -0 : test process alived or not
- if `kill -0 ${PID} 2>/dev/null` ; then
- #0 stands for success in shell
- return ${RET_SUCCESS}
- else
- return ${RET_INSTANCE_DEAD}
- fi
- }
- ## remove pid file
- function remove_Pid(){
- if [ ! -z ${INSTANCE_PID} ];then
- if [ -f ${INSTANCE_PID} ];then
- rm -f ${INSTANCE_PID}
- fi
- fi
- }
- ## shutdown Instance
- function shutdown_Instance(){
- if ! is_Instance_Alive ;then
- echo "no need to stop, not found PID"
- return ${RET_SUCCESS}
- else
- echo -n "shutdown instance"
- for((i=0;i<=$KILL_TIMES;i++ ));do #kill instance for KILL_TIMES, each with KILL_INTERVAL secs
- curl -d "" "http://${SHUTDOWN_HOST}:${SERVER_PORT}/shutdown"
- sleep_Wait ${KILL_INTERVAL}
- #check if kill of this round success
- if is_Instance_Alive ; then
- kill_Instance
- return ${RET_SUCCESS}
- fi
- if ! is_Instance_Alive ; then
- remove_Pid
- echo shutdown successfully
- return ${RET_SUCCESS}
- fi
- done
- return ${RET_ERROR_SHUT}
- fi
- }
- #normal kill
- function kill_Instance(){
- if ! is_Instance_Alive ;then
- echo "no need to stop, not found PID"
- return ${RET_SUCCESS}
- else
- echo -n "killing $PID "
- for((i=0;i<=$KILL_TIMES;i++ ));do #kill instance for KILL_TIMES, each with KILL_INTERVAL secs
- kill -15 ${PID}
- sleep_Wait ${KILL_INTERVAL}
- #check if kill of this round success
- if ! is_Instance_Alive ; then
- remove_Pid
- echo kill successfully
- return ${RET_SUCCESS}
- fi
- done
- return ${RET_ERROR_SHUT}
- fi
- }
- #-9 kill
- function force_Instance(){
- if ! is_Instance_Alive ;then
- echo "no need to force kill, not found PID"
- return ${RET_SUCCESS}
- else
- echo -n "force killing $PID "
- for((i=0;i<=$KILL_TIMES;i++ ));do
- #kill instance for KILL_TIMES, each with KILL_INTERVAL secs
- kill -9 ${PID}
- sleep_Wait ${KILL_INTERVAL}
- if ! is_Instance_Alive ; then
- remove_Pid
- echo force kill successfully #check if force kill of this round success
- return ${RET_SUCCESS}
- fi
- done
- echo shutdown failed, please manually check
- return ${RET_ERROR_SHUT}
- fi
- }
- #wait
- function sleep_Wait(){
- local sec=$1
- for((i=1;i<=$sec;i++ ));do
- sleep 1
- echo -n "."
- done
- echo
- }
- #start up
- function startup_Instance(){
- ##This function startup the instance
- if is_Instance_Alive; then
- echo no need to start, instance pid : ${PID}, exit
- else
- echo exec ${START_UP_EXEC}
- echo -n "starting "
- nohup ${START_UP_EXEC} > ${EXEC_STD_OUT} 2>&1 &
- if [ ! -z ${INSTANCE_PID} ];then
- echo $! > "${INSTANCE_PID}"
- fi
- sleep_Wait ${START_WAIT}
- if ! is_Instance_Alive ; then
- echo start successfully : `get_Pid`
- return ${RET_SUCCESS}
- else
- echo start failed
- return ${RET_ERROR_START}
- fi
- fi
- }
- #start up
- function startup_Instance_Without_Nohup(){
- ##This function startup the instance
- if is_Instance_Alive; then
- echo no need to start, instance pid : ${PID}, exit
- else
- echo exec ${START_UP_EXEC}
- echo -n "starting "
- ${START_UP_EXEC}
- if [ ! -z ${INSTANCE_PID} ];then
- echo $! > "${INSTANCE_PID}"
- fi
- sleep_Wait ${START_WAIT}
- if ! is_Instance_Alive ; then
- echo start successfully : `get_Pid`
- return ${RET_SUCCESS}
- else
- echo start failed
- return ${RET_ERROR_START}
- fi
- fi
- }
- #check instance status
- function status_Instance(){
- if is_Instance_Alive;then
- echo "Instance is Alived, pid:${PID}"
- return ${RET_STATUS_ALIVE}
- else
- echo "Instance is not Alived"
- return ${RET_STATUS_NOT_ALIVE}
- fi
- }
- #dispatcher
- function dispatcher(){
- if [ $# -lt 1 ] ;then
- usage
- exit -1
- fi
- # if [ -z ${PROFILES} ];then
- # echo "Please specific profiles before excute this script, example: export PROFILES=dev"
- # exit -1
- # fi
- local args=$1
- case "$args" in
- kill)
- kill_Instance
- ;;
- force)
- force_Instance
- ;;
- start)
- startup_Instance
- ;;
- fstart)
- startup_Instance_Without_Nohup
- ;;
- shutdown)
- shutdown_Instance
- ;;
- restart)
- shutdown_Instance && startup_Instance
- ;;
- status)
- status_Instance
- ;;
- *)
- usage
- ;;
- esac
- }
- dispatcher "$@"
- #END
assembly.xml:
- <assembly>
- <id>release</id>
- <formats>
- <format>tar.gz</format>
- </formats>
- <fileSets>
- <fileSet>
- <directory>${project.build.directory}</directory>
- <outputDirectory>lib</outputDirectory>
- <directoryMode>0755</directoryMode>
- <fileMode>0755</fileMode>
- <includes>
- <include>*.jar</include>
- </includes>
- </fileSet>
- <fileSet>
- <directory>src/main/resources/conf</directory>
- <outputDirectory>conf</outputDirectory>
- <directoryMode>0755</directoryMode>
- <fileMode>0644</fileMode>
- </fileSet>
- <fileSet>
- <directory>src/main/resources/bin</directory>
- <outputDirectory>bin</outputDirectory>
- <directoryMode>0755</directoryMode>
- <fileMode>0755</fileMode>
- </fileSet>
- </fileSets>
-
- </assembly>
build.sh:
- #!/bin/bash
- HOME_DIR=`cd $(dirname $0);pwd`
- echo $HOME_DIR
- BUILD_DIR=$HOME_DIR/output_scm
-
- # rz-em-etl.tar.gz
- RZ_EM_ETL_FILE_NAME=rz-em-etl.tar.gz
- RZ_EM_ETL=$HOME_DIR/target/$RZ_EM_ETL_FILE_NAME
-
- if [[ -z $2 ]]; then
- MODULE=all
- else
- MODULE=$2
- fi
- echo "Begin building..."
- # re-create BUILD_DIR
- rm -rf $BUILD_DIR
- mkdir -p $BUILD_DIR
- # building
- mvn clean package -DskipTests -P ${1}
- # checking mvn buile status
- if [ $? -ne 0 ]
- then
- echo "Project build faild. Mvn build faild."
- exit 1
- fi
- if [[ ${MODULE} == 'all' ]] || [[ ${MODULE} == 'rz-em-etl' ]]; then
- if [ -f $RZ_EM_ETL ];then
- cp -f $RZ_EM_ETL .
- # tar czf rz-em-etl.tar.gz rz-em-etl.jar
- cp -f rz-em-etl.tar.gz $BUILD_DIR
- md5sum rz-em-etl.tar.gz|cut -f 1 -d " " > $BUILD_DIR/rz-em-etl.tar.gz.md5
- else
- echo "No $RZ_EM_ETL found."
- exit 1
- fi
- fi
-
- echo "Project has built..."
pom.xml(部分):
- <profiles>
- <profile>
- <id>dev</id>
- <properties>
- <env>dev</env>
- </properties>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- </profile>
- <profile>
- <id>ga</id>
- <properties>
- <env>ga</env>
- </properties>
- </profile>
- <profile>
- <id>docker</id>
- <properties>
- <env>docker</env>
- </properties>
- </profile>
- </profiles>
-
- <build>
- <defaultGoal>package</defaultGoal>
- <finalName>rz-em-etl</finalName>
- <outputDirectory>target/classes</outputDirectory>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>false</filtering>
- </resource>
- </resources>
-
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <configuration>
- <fork>true</fork>
- <mainClass>com.em.Application</mainClass>
- <layout>ZIP</layout>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <!--<version>3.3</version>-->
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- <encoding>UTF-8</encoding>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <!--<version>2.18.1</version>-->
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <!--<version>2.4</version>-->
- <executions>
- <execution>
- <id>attach-sources</id>
- <goals>
- <goal>jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <!-- not append assembly id in release file name -->
- <appendAssemblyId>false</appendAssemblyId>
- <descriptors>
- <descriptor>src/main/resources/build/assembly.xml</descriptor>
- </descriptors>
- </configuration>
- <executions>
- <execution>
- <id>make-targz</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <artifactId>maven-resources-plugin</artifactId>
- <!--<version>3.0.2</version>-->
- </plugin>
-
-
- </plugins>
-
-
- </build>
二. Dockerfile和其它
Dockerfile:
- FROM registry.docker-cn.com/library/centos-oracle-jdk8:v2
- MAINTAINER BY sys
- ADD output_scm/rz-em-etl.tar.gz /data1/www/rzpaf_release
- ENTRYPOINT cd /data1/www/rzpaf_release/rz-em-etl/bin && bash app_control.bash fstart
- EXPOSE 8080
打包命令:
sh build.sh docker
打包到服务器相对包路径:
output_scm/rz-em-etl.tar.gz
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。