springBoot 项目 Jenkins+svn 集成部署
持续集成工具Jenkins
持续部署、持续集成、持续交付
Jenkins 和 Hudson 都是一款持续集成及自动化部署工具。
Jenkins 解决了什么问题:
Jenkins 的主要目标是监控软件开发流程,快速显示问题。所以能保证开发人员以及相
关人员省时省力提高开发效率。
解决了传统的打包、部署枯燥过程。
Jenkins 主要用于
1.持续、自动地构建/测试软件项目
2. 监控一些定时执行的任务
Jenkins 历史
Jenkins 和 Hudson 之间的关系,2009年,甲骨文收购了sun公司并集成了Hudson代码库。在2011年年初,甲骨文和开源社区之间关系破裂,该项目分为两个独立的项目。
Jenkins: 由大部分原始开发人员组成
Hudson:由甲骨文公司继续管理
所以 Jenkins 和 Hudson 是两款非常相似的产品
流程图
Red hat 安装Jenkins
jenkins下载 https://pkg.jenkins.io/redhat-stable/
下载rpm包到本地
sudo rpm -ih jenkins-2.222.3-1.1.noarch.rpm
自动安装完成之后:
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置文件
/var/lib/jenkins/ 默认的JENKINS_HOME目录
/var/log/jenkins/jenkins.log Jenkins日志文件
安装完成之后启动jenkins, 可能报这个错误,这是由于没有配置java环境,先检查一下java虚拟机有没有安装,如果没有就安装
解决办法在 vim /etc/init.d/jenkins
在第一行添加java环境,红色框中为自己的路径
为了避免jenkins默认端口冲突,修改enkins默认端口
执行 vi /etc/sysconfig/jenkins
找到 JENKINS_PORT="8080" 此端口不冲突可以不修改
修改jenkins默认的操作用户,linux下jenkins默认使用jenkins用户进行脚本和文件的操作,如果不修改,在部署项目时需要调整涉及到的文件和目录的操作权限,可以调整jenkins配置文件,将用户修改为root用户。
将JENKINS_USER="jenkins"调整为JENKINS_USER="root"
然后执行启动命令
sudo service jenkins start
然后访问:http://ip/8081
如果访问不到,检查服务器的防火墙是否关闭。
接着 :cd /var/lib/jenkins/secrets
进入此页面后,需要配置一下允许用户注册,Configure Global Security ,勾选此处,保存。
接着配置jdk 、maven、及setting.xml
需要安装 Subversion 和 Deploy to container 插件,如果无法安装提示Update information obtained: 不可用 ago;
其原因是无法上网,可检查 ping www.baidu.com 如果无法ping通,需要设置DNS
命令: vim /etc/resolv.conf 修改文件中nameserver为 8.8.8.8 和 8.8.4.4 保存退出 :wq
再次检查 ping www.baidu.com
开始构建部署springboot的jar项目
- 回到jenkins主页面,点击新建Item
-Dmaven.test.skip=true 忽略测试
然后点击页面下方的应用,并保存。接着设置全局配置进入jekins 主页面,点击左侧 Manage Jenkins进入页面后点击Configure System 系统配置
再次操作之前,需要安装 Publish over SSH 插件,
点击高级 勾选
以上配置完后,点击Test Configuretion 测试一下
之后我们去job中配置一下ssh,
此处的顺序需要注意一下,shell 脚本需要放在下面。
shell 脚本内容:
#!/bin/sh
#Copy jar to target path
BUILD_ID=DONTKILLME #后台执行
pid=$(ps -ef|grep ene-center.jar|grep -v grep | awk '{print $2}')
#copy jar 到启动目录
#cp -r /var/lib/jenkins/workspace/ene-center/target/ene-center.jar /data/test/em
# 关闭已经启动的jar进程
function stop(){
if [ -n "$pid" ]
then
echo "pid进程 :$pid"
kill -9 $pid
else
echo "进程没有启动"
fi
}
stop
sleep 5s
#发布jar服务
function start(){
cd /data/test/em
nohup java -jar ene-center.jar --server.port=5010 >center.log 2>&1 &
}
start
然后,应用并保存,在jenkins 任务列表页面点击构建,
前后端shell 脚本
- 后端脚本
#!/bin/bash
root="/data/test/ene"
for project in {"ene-center","ene-auth","ene-gateway","ene-basic","ene-sys"}
do
echo
echo
echo
echo $project"开始部署..."
BUILD_ID=DONTKILLME
pid=$(ps -ef|grep $project.jar|grep -v grep | awk '{print $2}')
function stop(){
if [ -n "$pid" ]
then
echo "关闭进程pid=:$pid"
kill -9 $pid
else
echo "未启动,不需要kill"
fi
}
file="${root}/$project/target/${project}.jar"
if [ -e $file ]
then
echo "原始文件路径:${root}/$project/target/${project}.jar...已找到"
else
echo "原始位置 ${root}/$project/target/${project}.jar...不存在,停止部署!"
continue
fi
echo "移动jar到 ${root}/_jar/$project.jar"
mv -f ${root}/$project/target/${project}.jar ${root}/_jar
function start(){
cd $root
echo "开始启动..."
nohup java -jar _jar/$project.jar > _jar/$project.log 2>&1 &
}
stop
sleep 3s
start
done
echo "脚本执行完毕!!!!!!"
echo
echo
echo
- 前端脚本
#!/bin/bash
BUILD_ID=DONTKILLME
cd /var/lib/jenkins/workspace/ene-vue/ene-vue
npm install
npm install script-ext-html-webpack-plugin
npm run build:prod
rm -rf /data/test/dist
rm -rf /data/test/ene-vue
mv /var/lib/jenkins/workspace/ene-vue/ene-vue/dist /data/test
cd /data/test
mv dist ene-vue