项目采用SpringBoot架构,若是用传统的构建+发布的模式,QA要记录不少的环境配置,作不少机械的操做,容易增长出错的可能,工做效率比较低。java
为了解决这个问题,我使用Jenkins做为持续集成工具,写了一个Shell脚本,能够自动清理服务器环境和启动对应的服务,大大提升了QA部署服务的工做效率。git
1)Gitee工程、Gitee帐号。(公司项目是用codehub维护,我这里使用码云来演示)web
2)Ubuntu18测试环境服务器。docker
3)Windows10 开发机器。shell
4)Shell脚本,主要功能清理服务器部署环境、启动服务。服务器
4)Jenkin的web程序包。网络
1)下载jenkins.war架构
下载地址:https://jenkins.io/download/jvm
页面下部,点击红框里面的文件下载。maven
2)启动Jenkins
在任一安装了java环境的机器上均可以启动jenkins程序包
java -jar jenkins.war
在控制台会jenkins会输出初始化密钥
一样能够去电脑对应的文件目录里面找到这个key
b111033f1a404d799251929b4db3e14f
3)安装Jenkins
jenkins默认8080端口,访问 http://127.0.0.1:8080,输入上面的初始化密钥
点击继续,
选择安装推荐的插件
网络快的话,大概几分钟
建立一个本身的用户,保存并继续,
保存继续,
完成设置。
4)设置Jenkins
选择 可选插件
安装这几个[Pipeline Maven Integration]、[Maven Integration]、[Publish Over SSH]和[Gitee]。
勾选并选择直接安装。
拉到页面的下部,配置远程测试服务器,
增长服务配置,
分配设置maven配置文件、jdk目录、git安装目录和maven目录。
本身电脑上安装了git后,会默认读取git的安装进程的
输入一个名字,例如我输入:helloPudding
进入配置页面,配置源代码,
构建环境中,选择 [Send files or execute commands over SSH after the build runs]
分两步操做
第一步 清理服务器环境 和 第二步 启动服务
服务器opt目录的树形结构是
goaloneService.sh 的脚步内容以下:
#!/bin/sh ## java env export JAVA_HOME=/lib/jvm/jdk1.8.0_181 export JRE_HOME=$JAVA_HOME/jre ## exec shell name EXEC_SHELL_NAME=$1\.sh ## service name SERVICE_NAME=$1 SERVICE_DIR=/opt JAR_NAME=$SERVICE_NAME\-0.0.1-SNAPSHOT.jar TIME_STR=$(date +%Y%m%d%H%M%S) PID=pid/$SERVICE_NAME\.pid WORK_DIR=$SERVICE_DIR/servicespace/$1 #function start start(){ cd $WORK_DIR if [ ! -d "log" ]; then mkdir log fi nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME > log/$SERVICE_NAME.out 2>&1 & echo $! > $PID echo "**************** start $SERVICE_NAME success ****************" } # function stop stop(){ cd $WORK_DIR if [ -f "$PID" ]; then kill `cat $PID` rm -rf $PID fi echo "**************** stop $SERVICE_NAME ****************" sleep 6 TEMP_PID=`ps -ef | grep -w "$SERVICE_NAME" | grep "java" | awk '{print $2}'` if [ "$TEMP_PID" = "" ]; then echo "**************** $SERVICE_NAME process not exists or stop success ****************" else echo "**************** $SERVICE_NAME process pid is [$TEMP_PID] ****************" kill -9 $TEMP_PID fi echo "**************** stop $SERVICE_NAME success ****************" } # function clean clean(){ cd $WORK_DIR if [ ! -d "lastDeploy" ]; then mkdir lastDeploy fi if [ -f "$JAR_NAME" ]; then mv $JAR_NAME lastDeploy/$JAR_NAME$TIME_STR fi } case "$2" in start) start ;; stop) stop ;; restart) stop sleep 2 start echo "**************** restart $SERVICE_NAME success ****************" ;; clean) stop sleep 2 clean echo "**************** clean $SERVICE_NAME success ****************" ;; *) ## restart stop sleep 2 start ;; esac exit 0
配置maven打包命令,并跳过单元测试。
控制台输出部分日志:
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.670 s [INFO] Finished at: 2018-08-30T18:25:56+08:00 [INFO] Final Memory: 35M/333M [INFO] ------------------------------------------------------------------------ Waiting for Jenkins to finish collecting data [JENKINS] Archiving C:\Users\xxx\.jenkins\workspace\helloPudding\pom.xml to com.goalone/helloPudding/0.0.1-SNAPSHOT/helloPudding-0.0.1-SNAPSHOT.pom [JENKINS] Archiving C:\Users\xxx\.jenkins\workspace\helloPudding\target\helloPudding-0.0.1-SNAPSHOT.jar to com.goalone/helloPudding/0.0.1-SNAPSHOT/helloPudding-0.0.1-SNAPSHOT.jar SSH: Connecting from host [DESKTOP-DFCKDKK] SSH: Connecting with configuration [Test182] ... channel stopped SSH: EXEC: STDOUT/STDERR from command [cd /opt sh ./goaloneService.sh helloPudding clean] ... **************** stop helloPudding **************** **************** helloPudding process not exists or stop success **************** **************** stop helloPudding success **************** **************** clean helloPudding success **************** SSH: EXEC: completed after 8,230 ms SSH: EXEC: STDOUT/STDERR from command [cd /opt sh ./goaloneService.sh helloPudding start] ... **************** start helloPudding success **************** SSH: EXEC: completed after 202 ms SSH: Disconnecting configuration [Test182] ... SSH: Transferred 1 ( 0 + 1 ) file(s) Finished: SUCCESS
部署成功。
https://www.jianshu.com/p/ba09cdc53343