代码改变世界

Jenkins持续构建打包后端服务流程详解

2019-06-12 20:24  那个杰克  阅读(7492)  评论(0编辑  收藏  举报

背景运用场景及思路

1、为响应后端开发人员需求,提升项目开发过程效率,选择Jenkins持续构建,进行导包启动一键持续集成

思路:
使用jenkins自带,立即构建->SVN拉取代码,通过Jenkins安装的mvn编译进行打包,并自动化启动后端服务

致谢:
工作岗位的上一任,留给我很多资料进行查阅,感蟹!!

Jenkins搭建部署

1、下载tomcat软件,gz压缩包,存放到需要配置的Linux服务器上
2、 官网下载jenkins,将jenkins压缩包,解压后,放置到tomcat-->webapp目录下
3、 进入tomcat-->bin目录-->./startup.sh启动命令
配置时需注意事项:
1、需要修改tomcat-->config文件夹-->server.xml
(启动tomcat时,需要netstat查看tomcat启动的默认8080端口是否已经被占用,如果已经被占用,vim编辑server.xml文件,找到8080端口,进行修改,如下所示:)

<Connector port="8080" protocol="HTTP/1.1"
	connectionTimeout="20000"
	redirectPort="8443"/>

修改后:
<Connector port="3030" protocol="HTTP/1.1"
	connectionTimeout="20000"
	redirectPort="8443"/>

2、如启动tomcat后,进入127.0.0.1:3030检查,Tomcat是否正常启动起来 ,如果无法正常查看,则需要执行以下命令,关闭防火墙服务

service iptables stop

配置系统环境

1、Linux需安装jdk_1.8,这里可以按照自己的喜好进行下载
2、下载解压安装jdk成功后,需要进入etc/profile环境配置如下变量
(我这里下载解压后的jdk,是放置到了/opt目录下)

JAVA_HOME=/opt/jdk1.8.0_141
JAVA_BIN=$JAVA_HOME/bin
JRE_HOME=$JAVA_HOME/jre
JRE_BIN=$JAVA_HOME/bin
PATH=$JAVA_BIN:$JRE_BIN:$PATH
export JAVA_HOME JRE_HOME PATH

安装Jenkins插件

1、 Tomcat起来后进入访问页面:服务器IP地址:端口号/jenkins
2、访问Jenkins成功,进行默认选择进行下一步,下一步安装
3、安装插件时,可以根据自己的喜好进行安装的啦,这里就不概述啦

配置JDK,MAVEN安装

一、配置后台服务Maven打包时需要的jdk/maven

二、配置前端服务npm打包时所需nodeJs

配置SSH连接服务器




创建Maven项目


SVN打包构建及SSH远程部署



启动脚本

source /etc/profile # 应ssh远程连接是no-login状态,则需要每次执行source /etc/profile配置
pid=`ps -ef |grep  "other"|grep -v 'grep'|awk '{print $2}'`
if [ $pid ]; then #如果存在已启动的项目进程,则kill掉,没有则不进行处理
    kill -9 $aa
fi
cd /data/
if [ $? -eq 0 ]; then
    rm -rf /data/xqb-other-1.0.0.jar
else
    mkdir -p /data/
fi
setsid java -jar xxxx.jar > nohup.out

遇到的问题

1、安装jenkins时,出现大部分插件,自动下载失败,重新retry后,仍是如此,待解决

2、昨天一天晚上,自信满满的认为自己可以很快的能解决好Jenkins持续构建打包后端服务,结果折腾了差不多半天时间,端午放假的最后一天班,还一个人加班到了最晚,这就是技术人,没有技术的加班血泪史鸭
其中遇到的问题有自身的问题、以及技术方面欠缺的问题,总结如下:
(1)、细节没有注意到,编写构建脚本时,每个Maven项目,写的目录因copy现有的,导致存在很多小字眼写错了,这里需要面壁思过了,细节决定成败,细节决定成败呀,都是血泪史~~
(2)、Mvn编译打包后,在PostStep下,Jenkins没有将打包好后的xxx.jar包,正常远程传输到制定的路径下
(3)、打包完成后,脚本启动命令,没有正常被执行,导致传输后的jar包,无法正常启动起来

1.打包后无法传输到指定的目标服务器路径

VW98I0.png

遇到这个问题时,思考的方向是SSH配置用户名和密码是否正确,检查没有问题后,才第一时间是,查询了jenkins 项目中的poststep中各个输入框的用法,毕竟还是知识理论更重要

配置POST STEP

编译打包文成后,就需要配置post step,该模块是在你Jenkins编译打包完成后,执行的动作
需要介绍的点是:
SSH Server:用户需要ssh传输jar包的服务器
Source files:传输的源文件,这里按照Jenkins的默认路径是当前的job项目的工作路径,比如:
jenkins中创建的每个job工程项目,对应会在Jenkins安装目录下的workspace空间下自动创建
如:
jenkins在linux下默认的安装路径是以下路径

/root/.jenkins/

我创建的Job工程名字为jenkins,则构建成功后,会在以下的路径,生成jenkins文件夹,如下所示

/root/.jenkins/workspace/jenkins

source files,是我要打包完成的jar进行上传到其他服务器,所以我这里写的是target/*.jar

Remove prefix:这里表示上传后,不需要创建的target目录,所以这里需要填写target,表示上传完成后,不会在对应指定的目录下再生成一个/target目录,而是直接把*.jar包直接上传到指定的目录里

Remote diretory: 比如我要把*.jar包,放置到tomcat的webapp里,则我这里就填写 webapp,上传包后需要存放的地方

Exec command: 这里填写需要启动jar包的命令
例子:

setsid java -jar xxx.jar > nohup.out &

这里参考原文地址(推荐):[原文]https://www.cnblogs.com/abcwt112/p/6296399.html

2.setsid java -jar xxx.jar脚本命令无法正常启动

使用上面的setid启动jar包命令后,看到进程总是启动到一半后,

ps -fe |grep java

看到进程正常启动后一半,就自动停掉了,但是将上面的命令直接放在服务器上root用户下,直接执行时确能够执行成功,后来经过研发童鞋的指点,说在jenkins这里的命令,命令肯定是没有被启动起来,或者jenkins没有执行这行命令权限
经过思考推敲后,进行百度搜索无意间看到有位博主也遇到类似问题,才发现时ssh远程操作执行命令时,时non-login状态,ssh远程执行该命令时,是需要不会执行/etc/profile里面定义的变量的,而刚好jdk的配置,在/etc/profile文件里,所以ssh Server模块的脚本里,需要加上如下source /etc/profile:

source /etc/profile
setsid java -jar xxx.jar > nohup.out&

这里参考原文地址(推荐):[原文]http://blog.sina.cn/dpool/blog/s/blog_64693fd40101eyyh.html

最后轻松解决了上面害我加班的问题,真的是在你最无奈的时候,那么你就该要好好的静下心来,学习了。

效果

1、写代码(更新代码),push到SVN服务器

2、立即构建Job--> checkout SVN代码-->编译打包-->上传服务器-->自动启动执行jar服务

3、登陆使用项目,一体化,是不是爽歪歪呢,跟自己做好一道美味的菜后,最后有人帮把美酒倒了,饭给你装了,筷子给你拿了,你直接开吃的效果差不多。可惜我不是开发,哈哈哈哈