Jenkins 搭建企业实战案例 (发布与回滚)

摘要

让我们的代码部署变得easy,不再难,Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。本次环境模拟一整套企业生产流程

Jenkins 搭建企业实战案例 (发布与回滚)

Jenkins
2019年04月24日

相关文章
Jenkins 前端自动发布 [git 钩子]
持续集成之Jenkins+Gitlab简介 [一]


环境说明

服务器IP 服务 备注
10.4.82.119 Jenkins 第一次配置不会的可以按照我的步骤来
10.4.82.120 gitlab、tomcat 测试环境tomcat端口8083
10.4.82.115 tomcat 测试环境tomcat端口8083

Jenkins发布回滚流程
image_1d95jfdj78u08711tnhk871vnh97.png-189.1kB

一、Jenkins介绍及安装

安装和介绍都是老生常谈的内容了,说了N+1+2+3+4+5+.....的话题了,这里直接跳过了

Jenkins yum安装https://www.abcdocker.com/abcdocker/3174
Jenkins War安装https://www.abcdocker.com/abcdocker/2897

二、Jenkins 安装配置

安装完成后的界面如下
image_1d7tvs410bn711sg1spk90hq1m9.png-80.8kB
image_1d7u06a4hk1h3j51orl159t9hm.png-119.7kB

Jenkins插件安装
Jenkins主要依赖于插件化,我们进行插件的安装
Maven Integration Maven编译插件
Role-based Authorization Strategy 权限控制插件 ## 标题 ##
AnsiColor 输出Log颜色优化插件

安装插件的步骤不详细讲解了 https://i4t.com/3174.html详细介绍
image_1d854mcf9vr3iv8euggbr0b1u.png-125.9kB

image_1d855f3oa1ja91a3s11e21ctm8802r.png-139.3kB

Jenkins 全局配置

  1. 1.配置jdk环境
  2. 下载
  3. wget http://down.i4t.com/jdk1.8.0_66.tar.gz
  4. $ tar zxf jdk1.8.0_66.tar.gz -C /usr/local/
  5. $ ln s /usr/local/jdk1.8.0_66 /usr/local/jdk
  6. $ vim /etc/profile
  7. export JAVA_HOME=/usr/local/jdk
  8. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  9. export PATH=$JAVA_HOME/bin:$PATH
  10. $ java -version
  11. 检查
  12. $ java -version
  13. java version "1.8.0_151"
  14. Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
  15. Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
  16. 2.配置maven环境
  17. $ wget http://down.i4t.com/apache-maven-3.6.1-bin.tar.gz
  18. $ tar xf apache-maven-3.6.0-bin.tar.gz
  19. $ mv apache-maven-3.6.0-bin.tar.gz /usr/local/
  20. $ ln -s /usr/local/apache-maven-3.6.0/ /usr/local/maven
  21. $ vim /etc/profile
  22. export M2_HOME=/usr/local/maven
  23. export PATH=${M2_HOME}/bin:$PATH
  24. $source /etc/profile
  25. 验证
  26. $ mvn -v
  27. Apache Maven 3.6.0 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T03:58:13-04:00)
  28. Maven home: /usr/local/maven
  29. Java version: 1.8.0_151, vendor: Oracle Corporation
  30. Java home: /usr/local/jdk1.8.0_151/jre
  31. Default locale: en_US, platform encoding: UTF-8
  32. OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"

我们需要配置Java环境,以及maven等
123.png-274.9kB
配置JDK环境
image_1d8566suk837g6m1bqbb3u1git38.png-87.2kB
配置Maven环境
image_1d8568e0s1rhb14vuj5915e21g703l.png-48.4kB

下面进行gitlab安装,用于上传测试代码,Jenkins基本上已经配置完毕!

三、gitlab 安装及配置

Gitlab安装目前只需要配置一个yum源,yum install 安装即可
gitlab安装文档https://i4t.com/2041.html

我这里提供了一份hello 的Java代码用于测试
一共分为2步

1.在gitlab web界面创建test项目
2.将Java代码下载push到gitl

  1. 代码下载
  2. wget http://down.i4t.com/hello-world-war-master.zip
  3. [root@abcdocker hello-world-war-master]# yum install -y git && git remote add origin http://10.4.82.120/root/test.git
  4. #这里需要在gitlab上创建项目,并且复制git地址进行push
  5. [root@abcdocker hello-world-war-master]# git push -u origin master
  6. Username for 'http://10.4.82.120': root
  7. Password for 'http://root@10.4.82.120':
  8. fatal: Authentication failed for 'http://10.4.82.120/root/test.git/'
  9. [root@abcdocker hello-world-war-master]# git push -u origin master
  10. Username for 'http://10.4.82.120': root
  11. Password for 'http://root@10.4.82.120':
  12. Counting objects: 16, done.
  13. Delta compression using up to 2 threads.
  14. Compressing objects: 100% (11/11), done.
  15. Writing objects: 100% (16/16), 4.64 KiB | 0 bytes/s, done.
  16. Total 16 (delta 0), reused 0 (delta 0)
  17. To http://10.4.82.120/root/test.git
  18. * [new branch] master -> master

当我们将测试代码上传完毕后
image_1d8583ndjd4j1mgm3ioteg10qh4s.png-198.9kB

四、创建项目演示

准备工作

1.tomcat 地址相同 (多套情况)
2.tomcat 端口相同 (多套情况)
3.web 服务器添加tomcat重启脚本
4.Jenkins - web免密 (Jenkins-tomcat服务器免密)
5.修改好项目名

进入Jenkins,进行创建项目

12.png-307kB

简单说一下,我这里环境的配置

  1. tomcat路径(多套环境只需要改后缀和端口)
  2. /usr/local/abcdocker-test
  3. tomcat端口 8083
  4. tomcat服务器 10.4.82.115 10.4.82.120
  5. 我们进入82.11582.120服务器,配置jdktomcat,设置端口
  6. 配置Tomcat JDK
  7. wget http://down.i4t.com/jdk1.8.0_66.tar.gz
  8. $ tar zxf jdk1.8.0_66.tar.gz -C /usr/local/
  9. $ ln s /usr/local/jdk1.8.0_66 /usr/local/jdk
  10. $ vim /etc/profile
  11. export JAVA_HOME=/usr/local/jdk
  12. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  13. export PATH=$JAVA_HOME/bin:$PATH
  14. $ java -version
  15. 下载Tomcat
  16. wget wget http://down.i4t.com/apache-tomcat-8.5.39.tar.gz
  17. tar xf apache-tomcat-8.5.39.tar.gz
  18. mv apache-tomcat-8.5.39 abcdocker1-test
  19. #修改端口
  20. sed -i s#8080#8083#g abcdocker1-test/conf/server.xml
  21. ## 将默认端口修改为8083

我们先访问默认tomcat,检查是否会因为JDK环境问题导致默认tomcat就无法启动
访问地址ip:8083 tomcat安装配置参考
image_1d8fg6l5u13ohh7mkrtpotkre9.png-364.7kB

现在我们的tomcat测试基本上没有问题

配置Jenkins

1.配置Jenkins 参数化构建
image_1d95f9cv41at41cf21c61c2c1ea99.png-83.6kB
image_1d95fh5of1umb1kek1b441e701ntlm.png-133.6kB

[ 1 ] 创建选项参数
[ 2 ] 创建Git commit版本参数

image_1d95fjqao1mo3lnv17i11nes1rjv13.png-57.6kB

2.Git地址配置
我们通过https://i4t.com/2041.html安装完gitlab之后,将代码上传完毕。这里需要输入项目的git地址

温馨提示:我这里已经将测试代码上传到gitlab上,怎么上传代码看上面的步骤吧。

image_1d95fsv1r1slv1vho5a613g5qg01t.png-245.8kB

复制git地址之后需要配置一点,那就是gitlab的地址。有2种认证方式,一种是通过账号密码,在Jenkins上创建账号密码,另外就是通过key来认证。key认证实际上就是复制Jenkins服务器的ssh公钥到gitlab上的SSH key选项。 我这里以账号密码为主
image_1d95fvua8lanu711l4lvdk1f222a.png-111.1kB

配置完成后

只要没有红色报错即可
image_1d95g3pl0vn31tk21o9h1cqcloa2n.png-91.9kB

3.日志代码高亮配置
其他选项我们不配置,这里只配置一个日志输出高亮的参数。 没有的安装上面的插件
image_1d95g7kiepuq19h3m0a1fg0l634.png-89.3kB

4.maven编译参数配置

我这里的编译参数就是maven默认的编译参数,具体不讲解了。每个公司的环境不一样

clean package -Dmaven.test.skip=true
测试Jenkins就用我这个配置就OK

image_1d95g9fkj1p9scaj8lr6vc147m3h.png-41.8kB

5.构建完执行脚本
我们需要将构建完执行脚本点开,默认Jenkins不配置shell脚本,Jenkins只是将程序设置成war包,存储下来。这样并没有发布到web服务器上
image_1d95gct6i1nmr1a212tc3aqvoo3u.png-62kB

6.发布及滚回脚本

脚本内容比较多,请直接下载查看

  1. wget http://down.i4t.com/abcdocker-jenkins.txt

脚本解释
image_1d95gufma16n21hv81hlqtna14d54b.png-272.5kB

除了这几个要修改,我们还需要修改tomcat启动和重启脚本
内容如下
下载地址wget http://down.i4t.com/abcdocker-test 还需要添加权限+x

  1. #需要修改一下tomcat启动目录
  2. #!/bin/bash
  3. # description: Tomcat is a Java Servlet Container
  4. . /etc/profile
  5. TOMCAT_HOME=/usr/local/abcdocker1-test
  6. start () {
  7. TOMCAT_PID=`ps -ef |grep "$TOMCAT_HOME" |grep -v "grep" |awk '{print $2}'`
  8. if [ -z $TOMCAT_PID ];then
  9. /bin/bash $TOMCAT_HOME/bin/startup.sh
  10. else
  11. echo "$0 is running"
  12. fi
  13. }
  14. stop () {
  15. TOMCAT_PID=`ps -ef |grep "$TOMCAT_HOME" |grep -v "grep" |awk '{print $2}'`
  16. if [ -z $TOMCAT_PID ];then
  17. echo "$0 is not running"
  18. else
  19. echo "shutting down $0"
  20. kill -9 "$TOMCAT_PID" && echo "PID $TOMCAT_PID killed."
  21. fi
  22. }
  23. status () {
  24. TOMCAT_PID=`ps -ef |grep "$TOMCAT_HOME" |grep -v "grep" |awk '{print $2}'`
  25. if [ -z $TOMCAT_PID ];then
  26. echo "$0 is not running"
  27. else
  28. echo "$0 is running PID is $TOMCAT_PID"
  29. fi
  30. }
  31. case $1 in
  32. start)
  33. start
  34. #tail -f $TOMCAT_HOME/logs/catalina.out
  35. ;;
  36. stop)
  37. stop
  38. ;;
  39. status)
  40. status
  41. ;;
  42. restart)
  43. stop
  44. start
  45. #tail -f $TOMCAT_HOME/logs/catalina.out
  46. ;;
  47. *)
  48. echo "Usage:$0 {start|stop|status|restart}."
  49. ;;
  50. esac

我们Jenkins点击保存save,现在Jenkins就配置完毕,我们进行测试

tomcat需要启动正常

启动目录和启动脚本都要写好
image_1d95hkd0tf1r9621pvd1hiv1f8d4o.png-330.3kB

访问验证结果

image_1d8fg6l5u13ohh7mkrtpotkre9.png-364.7kB

现在我们开始使用Jenkins发布

1.发布前确认Jenkins和web做免密(我这里已经做了,不介绍) https://i4t.com/1353.html
2.确保tomcat启动正常
3.获取gitlab的git commit地址

我们现在获取git commit地址
git commit版本不区分分支,不一定必须在master分支上,其他分支也会有
image_1d95hqq4719s65f6unb6801nug55.png-225kB

image_1d95hsqr31v4q9p71gi1i5jp2r5i.png-141.2kB

我这里只配置了test环境,我们就只演示test环境,其他环境脚本配置都差不多

  1. 点击项目---->点击构建

image_1d95i1ssiele386j5p148i17a45v.png-101.2kB

点击小圆圈
image_1d95i51cc1n756t2ds15o5h6j6c.png-228.7kB

结果说明

git拉代码

image_1d95icrpn15qot3b1e0bdm1vsg6p.png-217.4kB

Maven编译步骤

image_1d95idvob1qoc1fcvuradtn74m76.png-266.2kB

执行shell命令

image_1d95ifjk0k871uboni8tshplb7j.png-248.5kB

启动服务判断,如果有一台服务启动异常,将会暂停发布。通过nginx upstream_check_module会自动停止异常tomcat请求

image_1d95igh8g12eb1oo1f631slbnkv80.png-235kB

同时web服务器会自动在data目录创建备份

发版完毕,在shell脚本部分我们后期可以修改成salt,不推荐使用Publish over SSH主要是由于配置麻烦,环境不好区分。要创建多个Jenkins,使用shell或者引用批量分发脚本最为简单

image_1d95ikk3g11p01mnt1cig1ekv1mqv8d.png-203.3kB
image_1d95im6lr1llj13191s8s1bo41l3r8q.png-95kB

发布回滚脚本流程
image_1d95jfdj78u08711tnhk871vnh97.png-189.1kB


新闻联播老司机

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: