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 root@Tomcat的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 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