整体部署方案
前提:开发环境不允许拥有测试环境及准生产或生产环境的配置信息。
每次发版全量发版。
1、通过jenkins调用maven 编译命令,编译仅有测试环境配置文件的maven工程。
2、此stg工程可以下载开发环境已经发布至nexus私服上的压缩包。
3、jenkins执行shell脚步解压配置文件及全量开发版本,组合成一个全量的发版压缩包文件
4、jenkins远程执行shell脚步获取此全量压缩包,进行备份、解压、重启tomcat。
stg工程主要信息
pom.xml
==========================================================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jy.platform</groupId>
<artifactId>com-jy-platform</artifactId>
<version>2.3.0</version>
</parent>
<groupId>com.jy.platform</groupId>
<artifactId>hrtool</artifactId>
<version>pro-0.0.1</version>
<packaging>war</packaging>
<name>hrtool</name>
<description>hrtool-pro-0.0.1</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<war.name>hrtool-pro-0.0.1</war.name>
</properties>
<dependencies>
</dependencies>
<repositories>
<repository>
<id>jy</id>
<name>jy</name>
<url>http://172.18.100.230:8080/nexus-2.5.1/content/groups/public/</url>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.10</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<executions>
<execution>
<id>download-test-data</id>
<phase>package</phase>
<goals>
<goal>download-single</goal>
</goals>
<configuration>
<url>http://172.18.100.230:8080/nexus-2.5.1/content/repositories/releases/com/jy/platform/hrtool</url>
<fromFile>/1.1.0/hrtool-1.1.0.tar.gz</fromFile>
<toDir>target/</toDir>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>make-zip</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>zip.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
<exclude>**/.svn/*</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.conf</include>
<include>**/*.jsp</include>
</includes>
</resource>
</resources>
</build>
</project>
========================================================================================
zip.xml
<assembly xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.0.0.xsd">
<id>package</id>
<formats><!-- 打包压缩为 *.tar.gz 过滤了相关配置文件信息-->
<format>tar.gz</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<!-- 复制 jsp -->
<fileSet>
<directory>target/${war.name}</directory>
<excludes>
<exclude>META-INF/**</exclude>
</excludes>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
jenkins调用shell脚步组装测试环境全量发版压缩包。
echo '================exec shell to makeup config file info start ================'
#projectName=hrtool
workPath=/home/jenkins/.jenkins/workspace/${JOB_NAME}/target/
archiveName=${projectName}-${projectVersion}.tar.gz
#存放准生产配置文件的压缩包
configName=${projectName}-${POM_VERSION}.tar.gz
#存放全量发版程序的路径
#curWorkPath=${projectName}_$(date "+%y%m%d%H%M%S")
curWorkPath=${projectName}_${fullPackageName}_${BUILD_NUMBER}
if [ ! -d "${workPath}" ]; then
mkdir -p ${workPath}
fi
cd ${workPath}
mkdir $curWorkPath
#cd $curWorkPath
#组装全量发版程序包
#解压待发版程序至指定路径
tar -zxf ${archiveName} -C $curWorkPath
#解压配置文件至指定路径
tar -zxf ${configName} -C $curWorkPath
#压缩全量发版程序至压缩包
cd $curWorkPath/
tar -czf $curWorkPath.tar.gz *
#推送全量压缩包至目标服务器
cp $curWorkPath.tar.gz /home/jenkins/product-package
#推送至172.16.101.43的nginx目录
cp $curWorkPath.tar.gz /usr/local/nginx/html
echo '================exec shell to makeup config file info end ================'
jenkins远程执行shell脚本部署测试环境全量的压缩包。
#sh /home/jyapp/deployAPP.sh loan loan-1.0.1.tar.gz
rootPath=`pwd`
backupPath=${rootPath}/backup/
tomcatPath=${rootPath}/apache-tomcat-7.0.59/
# 项目名称(根据实际情况进行配置)
warName=${projectName}
warDir=/home/jyapp/${projectName}
depAppTarName=${projectName}_${fullPackageName}_${BUILD_NUMBER}.tar.gz
fileDate=$(date "+%m%d%H%M%S")
fileName=${warName}"_bak"${fileDate}
appTar=/home/jyapp/${depAppTarName}
#获取tomcat进程ID
tomcatID=$(ps -ef | grep ${tomcatPath} | grep -v 'grep' | awk '{print $2}')
startTomcat=${tomcatPath}/bin/startup.sh
workSpace=$(pwd)
#主函数
function monitor()
{
echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
echo "======================获取最新全量压缩包================="
wget http://172.16.101.43/$depAppTarName
if [ ! $depAppTarName ]; then
echo "===$depAppTarName 参数为null,请补充参数===="
exit 1
fi
if [ "$tomcatID" ];then
echo "=====[info]当前tomcat进程ID为:$tomcatID====="
kill -9 $tomcatID
fi
backup
removeJAR
upload
startTomcat
}
#启动tomcat
function startTomcat(){
cd $workSpace
if [ -d "$warDir" ]; then
source /etc/profile
$startTomcat
#tail -f ${tomcatPath}/logs/catalina.out
echo "===start ok======="
else
echo "startTomcat 没有app: $warDir"
fi
}
#上传文件
function upload(){
cd $workSpace
if [ -d "$warDir" ]; then
echo "== tar -zxvf $depAppTarName -C $warDir "
#tar -zxvf /home/jyapp/masterdata-2.3.0.tar.gz -C /home/jyapp/masterdata ;
tar -zxf $depAppTarName -C $warDir
else
mkdir $warName
tar -zxf $depAppTarName -C $warName
fi
}
#清除tomcat的项目缓存
function removeJAR(){
cd $workSpace
echo "================开始清理tomcat的项目缓存============="
if [ -d "$tomcatPath" ]; then
rm -rf $tomcatPath/work/*
rm -rf $tomcatPath/temp/*
else
echo "remove JAR不存在 $tomcatPath"
fi
#删除 对应的包
rm -rf $warDir/
echo "===============清理完毕=============="
}
#备份原来的项目
function backup(){
cd $workSpace
echo "==========开始备份===================="
if [ -d "$warDir" ]; then
cd $workSpace
tar -zcf ${fileName}.tar.gz $warName
if [ ! -d "$backupPath" ]; then
mkdir -p ${backupPath}
fi
mv ${fileName}.tar.gz ${backupPath}
cd $workSpace
echo "=============备份完毕================"
else
echo "==============backup error 不存在$warDir==============="
fi
}
monitor
=================================================================
linux curl获取jenkins构建产物
curl -X GET 'http://172.16.101.22:8080/jenkins/job/LN-STG-163-boot-loan-api/31/com.jy.platform$loan-api/artifact/com.jy.platform/loan-api/1.1.0/loan-api-1.1.0.jar' -H 'authorization: Basic eHVqdW5xaTo8eGpxMDgwMT4=' -o loan-api-1.1.0.jar