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信任中(名称随便写):
http://i2.运维网.com/images/blog/201809/05/8c1072410ecf8409a6a927f8378b69ae.png
二、环境部署
一、安装jenkins
1.下载jenkins
这里我选择的是war包安装jenkins,下载最新得就行
Jenkins 2.121.3我得版本
官网:https://jenkins.io/download/
http://i2.运维网.com/images/blog/201809/05/7f435c98d4cf69a6e4a9daccb6ef9b03.png
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://i2.运维网.com/images/blog/201809/05/12a6a220f7ca1e0ee95127137a89a582.png
http://118.24.137.86:8080/jenkins/
http://i2.运维网.com/images/blog/201809/05/e6196d0ded218472ba7c7ebeeee4af93.png
在服务器上面cat /root/.jenkins/secrets/initialAdminPassword会出现让输入的密码,一串数字字母,多等一会就出现了接下来的界面
http://i2.运维网.com/images/blog/201809/05/06aadadfdb65a2cb1d58afe47613ff3b.png
这个就是说推荐安装还是自己选,需要的包后面可以装,我点了第一个,知道用什么插件点第二个也可以这样装的包少一点。安装的插件都在/root/.jenkins/plugins/下面。
(PS:此处也很有可能出现jenkins处于离线状态,前提是现实中并未断网,可采取如下办法补救:)
http://i2.运维网.com/images/blog/201809/05/eb7e4b1db16a4fd0c9e4d68f7986aa2c.png
http://i2.运维网.com/images/blog/201809/05/06c6fc4f305c99ea6245d413e18ab610.png
解决方法:
安装插件那个页面,就是提示你offline的那个页面,不要动。然后打开一个新的tab,输入网址http://118.24.137.86:8080/jenkins/pluginManager/advanced。 这里面最底下有个【升级站点】,把其中的链接改成http的就好了,http://updates.jenkins.io/update-center.json。 然后在服务列表中关闭jenkins,再启动,这样就能正常联网了
http://i2.运维网.com/images/blog/201809/05/62fce71a48d371c5eaf44e12af448837.png
可以直接选择continue as admin也可以创建用户
http://i2.运维网.com/images/blog/201809/05/78418df38cb2d109817cebe31f6f1b08.png
开始使用,点击就会进来
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因为配置原因出错千千万,一步一报错,天天有惊喜,下面配置是把坑都填好的。
http://i2.运维网.com/images/blog/201809/05/ce0caa2de4d7282176a6cdbf6bce6a88.png
1.添加插件
http://i2.运维网.com/images/blog/201809/05/f38a5fa6a0fcf0c90968c0d0abfbe808.png
选择可选插件,过滤搜索,如果不知道那个有用没用,git、ssh、maven过滤出来得都装上
http://i2.运维网.com/images/blog/201809/05/56d427672c90de0fd182ed64eeb7c8a9.png
选择直接安装也可以,重启后安装也可以,用什么功能搜一下安装没,没安装装上就好,我看了已经安装的,比自己选安装的安装的多很多。。。
很多教程都装Deploy to Container Plugin,这个可以把包从运行的tomcat的项目http地址上直接发到项目服务器的目录下,我仔细研究了下觉得还是linux shell脚本简单。
2.工具配置
http://i2.运维网.com/images/blog/201809/05/83470d590ec297e2fe0122a26d25ced0.png
jdk别名叫啥都可以,路径写对,写你jdk环境变量配置的路径,写错了会出现ERROR: Failed to parse POMs java.io.IOException: Cannot run program***错误
http://i2.运维网.com/images/blog/201809/05/3766543b5f8ef79b6e9cbf19ba9cb73c.png
git的地址要写的是git这个命令的地址不是目录的地址,yum装的自然是/usr/bin/git,我是编译安装路径选自己得安装位置/usr/local/bin/git
http://i2.运维网.com/images/blog/201809/05/40d850a658215da77fe5ebf2d782833e.png
写完保存就好,接下来系统配置
3.系统配置
http://i2.运维网.com/images/blog/201809/05/e24f10ec045d213b83e69717b87e8732.png
http://i2.运维网.com/images/blog/201809/05/6bdd8358dc52b839101cb9c6d4a973f3.png
选择这个这里面可以写脚本,我下面写这个相当于脚本里的命令去远程执行另一个脚本
http://i2.运维网.com/images/blog/201809/05/16977edfcff69f45a214495f2752a37e.png
如图,后面的功能都是用脚本写的,jenkins和Tomcat服务器互相做了免密登录,在jenkins上可以直接用/usr/bin/ssh root@Tomcat的ip "要执行的命令"
/bin/bash /data/tomcat.sh 在Tomcat上执行这个脚本
过程:jenkins调用git把Github上的代码下载到jenkins服务器,maven构建成war包,调用ssh运行shell脚本完成备份,停服务,清webapps,拷war包到tomcat下,起服务
至此保存配置,点击立即构建
http://i2.运维网.com/images/blog/201809/05/5afed248ae9cd474987cb6c984359402.png
Tomcat请求项目页面成功展示:
http://i2.运维网.com/images/blog/201809/05/368adb94a41eb6dc5733a6c8782d31af.png
下面是我得脚本示例,写的比较烂~
#!/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 root@106.12.93.190:/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
|