Jenkins+Maven+Github+Tomcat+shell实现自动化集成发布
在做这个工作得时候我查了很多网上资料,比较杂乱,最终在一名叫ianjinsong作者得文章中获得启发,还是要感谢这位仁兄!
一、环境准备:
Jenkins+Tomcat服务器:106.12.93.190(百度云主机,测试Jenkins使用)
Tomcat服务器:118.24.137.86 (腾讯云主机,测试发布ZrLog项目专用)
Github服务器:https://github.com/longyueyang/test-java.git
Github也可以选择自行搭建的gitlab私服
Jenkins与Tomcat服务器之间实现互信任免密登录(后期要实现远程执行shell脚本),利用如下两条命令:
Ssh-keygen
Ssh-copy-id
Jenkins的公钥:cat /root/.ssh/id_rsa.pub
将公钥添加到github得key信任中(名称随便写):
二、环境部署
一、安装jenkins
1.下载jenkins
? ? ??这里我选择的是war包安装jenkins,下载最新得就行
Jenkins 2.121.3我得版本
官网:https://jenkins.io/download/
2.安装jdk环境
?jdk-8u73-linux-x64.gz
?本人分享下载地址:https://pan.baidu.com/s/1PndZNkYTkIzQYuWbO90T6g
tar -xvf jdk-8u73-linux-x64.gz -C /usr/local/
vim /etc/profile 追加如下
#JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_73
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
LANG=zh_CN.utf8
export LANG
3.安装tomcat
? ? ?本人分享地址:https://pan.baidu.com/s/1zONUCed9ORxOtqQxLEFmng
这个什么版本都可以,别太旧了,旧的会有漏洞,解压完成试试能不能用,tomcat目录里面bin目录下,./catalina.sh start启动,访问一下,不能访问基本都是防火墙问题,能出现tom猫界面就可以停了,可以./catalina.sh stop,也可以找到进程pid,kill-9 pid号,进到webapps目录里面删除所有,把下载好的的jenkins.war拷进来,启动tomcat。
http://118.24.137.86:8080/jenkins/
在服务器上面cat /root/.jenkins/secrets/initialAdminPassword会出现让输入的密码,一串数字字母,多等一会就出现了接下来的界面
这个就是说推荐安装还是自己选,需要的包后面可以装,我点了第一个,知道用什么插件点第二个也可以这样装的包少一点。安装的插件都在/root/.jenkins/plugins/下面。
(PS:此处也很有可能出现jenkins处于离线状态,前提是现实中并未断网,可采取如下办法补救:)
解决方法:
安装插件那个页面,就是提示你offline的那个页面,不要动。然后打开一个新的tab,输入网址http://118.24.137.86:8080/jenkins/pluginManager/advanced。 这里面最底下有个【升级站点】,把其中的链接改成http的就好了,http://updates.jenkins.io/update-center.json。 然后在服务列表中关闭jenkins,再启动,这样就能正常联网了
可以直接选择continue as admin也可以创建用户
?
开始使用,点击就会进来
?
? ? ?admin用户登录还不知道密码是什么,最好新建一个属于自己得用户,鄙人就是新建jenkins用户使用
二、安装Maven(用来构建项目)?
? ? 本人分享地址:https://pan.baidu.com/s/1_kqfLo8Kb_fBPfm7p6SFtA
tar -xvf apache-maven-3.3.9-bin.tar.gz -C /usr/local/
vim ?/etc/profile
? ? ?export M2_HOME=/usr/local/maven3
? ? ?export M2=$M2_HOME/bin
? ? ?export PATH=$M2:$PATH
三、安装git
yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker curl-devel
wget https://www.kernel.org/pub/software/scm/git/git-2.15.0.tar.gz
tar xzf git-2.15.0.tar.gz
cd git-2.15.0
./configure
make
make install
PS:git使用https协议出错:Peer reports incompatible or unsupported protocol version
解决办法:
yum update -y nss curl libcurl(解决git不支持https得问题)
nss为名称解析和认证服务 curl为网络请求库
四、配置jenkins
? ? ?jenkins因为配置原因出错千千万,一步一报错,天天有惊喜,下面配置是把坑都填好的。
?
1.添加插件
选择可选插件,过滤搜索,如果不知道那个有用没用,git、ssh、maven过滤出来得都装上
?
?选择直接安装也可以,重启后安装也可以,用什么功能搜一下安装没,没安装装上就好,我看了已经安装的,比自己选安装的安装的多很多。。。
?很多教程都装Deploy to?Container?Plugin,这个可以把包从运行的tomcat的项目http地址上直接发到项目服务器的目录下,我仔细研究了下觉得还是linux shell脚本简单。
2.工具配置
?
jdk别名叫啥都可以,路径写对,写你jdk环境变量配置的路径,写错了会出现ERROR: Failed to parse POMs java.io.IOException: Cannot run program***错误
git的地址要写的是git这个命令的地址不是目录的地址,yum装的自然是/usr/bin/git,我是编译安装路径选自己得安装位置/usr/local/bin/git
?
?
?写完保存就好,接下来系统配置
3.系统配置
?
?
?这个配置费劲九牛二虎之力,刚开始一直找不到这个选项,后来在插件中安装了maven得几个插件才显示,此处关系到maven得jar包存储,也是相当重要
五、构建项目
?点击新建,出现下图,名字随便起,选择构建一个maven项目
?
?
?
?
连接git,此处在开始已经将jenkins所在服务器得公钥加在了github上面,免密认证,自己搭建得gitlab私服也同理
?
?
?
选择这个这里面可以写脚本,我下面写这个相当于脚本里的命令去远程执行另一个脚本
?
如图,后面的功能都是用脚本写的,jenkins和Tomcat服务器互相做了免密登录,在jenkins上可以直接用/usr/bin/ssh [email protected]的ip "要执行的命令"?
/bin/bash /data/tomcat.sh ?在Tomcat上执行这个脚本
过程:jenkins调用git把Github上的代码下载到jenkins服务器,maven构建成war包,调用ssh运行shell脚本完成备份,停服务,清webapps,拷war包到tomcat下,起服务
至此保存配置,点击立即构建
Tomcat请求项目页面成功展示:
下面是我得脚本示例,写的比较烂~
#!/bin/bash
#引入了系统环境变量,这样系统环境变量里面没有export声明的也可以用
source /etc/profile
sj=date +%m-%d-%H%M
#开始先打印个时间到日志
echo date
>> /tmp/ZrLog.log
#备份一下当前的项目,名字用ZrLog代替
tar -zcPf /data/bf/ZrLog_$sj.tar.gz /usr/local/tomcat8/webapps/ZrLog >>/dev/null
echo "tomcat备份成功,开始拷war包" >> /tmp/ZrLog.log
#在/data/bf里面处理完再放到tomcat下,感觉停服务的时间短一些
#rm -rf /data/bf/ZrLog/*
/usr/bin/scp [email protected]:/root/.jenkins/workspace/test01/target/zrlog-1.10.1-SNAPSHOT.war /data/bf/ZrLog/ZrLog.war
echo "开始解压,替换配置文件" >> /tmp/ZrLog.log
unzip /data/bf/ZrLog/ZrLog.war -d /data/bf/ZrLog >>/dev/null
sleep 3
rm -rf /data/bf/ZrLog/ZrLog.war
echo "停止服务"
tomcat_pid=/usr/sbin/lsof -i:8080 | awk -F" " NR==2‘{print $2}‘
kill -9 $tomcat_pid
rm -rf /usr/local/tomcat8/webapps/ZrLog/
/bin/cp -a /data/bf/ZrLog /usr/local/tomcat8/webapps/
echo "启动服务" >> /tmp/ZrLog.log
/usr/local/tomcat8/bin/catalina.sh start &
sleep 10
re_pid=/usr/sbin/lsof -i:8080 | awk -F" " NR==1‘{print $2}‘
if [ $re_pid == "PID" ];then
echo "tomcat自动部署成功"
echo "tomcat重启成功" >> /tmp/ZrLog.log
else
echo "tomcat自动部署失败"
echo "tomcat重启失败" >> /tmp/ZrLog.log
fi
原文地址:http://blog.51cto.com/11612019/2170607