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项目

  1. 回到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


posted @ 2020-10-26 12:04  IT&晓亦  阅读(741)  评论(0编辑  收藏  举报