为啥这么干
公司小,现阶段运维全是后台的事,然后,运维任务也不是不堪重负,只是想着节省一点时间来多琢磨琢磨业务需求的事,嗯,光明正大的节省操作步骤,光明正大的偷懒。
运行环境
CentOS 7
JDK 1.8_131
Jenkins 较新版本
Maven
Svn server/Git server
项目要求
- 首先需要项目是 SpringBoot
- 然后,SpringBoot 使用的内置容器是 Jetty(Tomcat 未测试,但是理论上是没问题的)
- 使用 Maven 的打包格式是 jar
Jenkins
Jenkins 配置
jenkins 以 root 身份启动,或者把 workspace 和部署目录的拥有者改为 jenkins
workspace 目录 /home/munineyi/workspace
部署目录 /home/munineyi/Jenkins-in/
旧文件备份目录 /home/munineyi/Jenkins-in/backup
项目配置
源码管理
使用 Svn 或者 Git
Post Steps
增加Execute shell
#!/bin/bash
cd /home/munineyi/Jenkins-in/
echo "Execute shell Start"
sh stop.sh
sh replace.sh
echo "Execute shell Finish"
chmod 777 /home/munineyi/Jenkins-in/startup.sh
#!防止项目被杀死
BUILD_ID=dontKillMe nohup /home/munineyi/Jenkins-in/startup.sh
Bash 脚本
stop.sh
#!stop.sh
#!/bin/bash
JARFILE=Sandy-1.0-SNAPSHOT.jar
cd /home/munineyi/Jenkins-in
echo "Stopping SpringBoot Application for Sandy"
ls
pid=`ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ];then
echo "kill -9 的 pid:"$pid
kill -9 $pid
fi
echo "清除进程已完成"
replace.sh
JARFILE=Sandy-1.0-SNAPSHOT.jar
#!编译号的 jar存放地址
file_path=/home/munineyi/workspace/target
#!将现有的 jar 备份后,将新的 jar 替换
file=/home/munineyi/Jenkins-in/Sandy-1.0-SNAPSHOT.jar
if [ -f "$file" ];then
mv /home/munineyi/Jenkins-in/Sandy-1.0-SNAPSHOT.jar /home/munineyi/Jenkins-in/backup/Sandy-1.0-SNAPSHOT.jar.`date +%Y%m%d%H%M%S`
fi
cp /home/munineyi/workspace/target/Sandy-1.0-SNAPSHOT.jar /home/munineyi/Jenkins-in/
#!删除老旧的备份项目
cd /home/munineyi/Jenkins-in/backup
ls -lt | awk 'NR>5{print $NF}' | xargs rm -rf
startup.sh
JARFILE=Sandy-1.0-SNAPSHOT.jar
#!编译号的 jar存放地址
file_path=/home/munineyi/workspace/target
#!将现有的 jar 备份后,将新的 jar 替换
file=/home/munineyi/Jenkins-in/Sandy-1.0-SNAPSHOT.jar
if [ -f "$file" ];then
mv /home/munineyi/Jenkins-in/Sandy-1.0-SNAPSHOT.jar /home/munineyi/Jenkins-in/backup/Sandy-1.0-SNAPSHOT.jar.`date +%Y%m%d%H%M%S`
fi
cp /home/munineyi/workspace/target/Sandy-1.0-SNAPSHOT.jar /home/munineyi/Jenkins-in/
#!删除老旧的备份项目
cd /home/munineyi/Jenkins-in/backup
ls -lt | awk 'NR>5{print $NF}' | xargs rm -rf
整体思路
整体的思路比较简单,Jenkins 从 svn/git 上拔下来项目源码,然后通过 Maven 编译,编译好了生成 jar,接着运行预先写好的 Bash 脚本。
脚本的思路就不再重复了,代码上都有体现。
因为是简版的教程,所以需要一些基础,熟悉简单的 SpringBoot 配置,熟悉 Maven,熟悉简单的 Jenkin 操作,一定的 Linux 基础,以上。