Git+JENKINS自动部署

第1章 历史演变

行话:CI/CD /持续集成/持续交付/持续部署

1.1 开发写代码的演变

1.1.1 一个开发人员单独开发

一个码农单打独斗,撸代码,开发网站,自由自在;

1.1.2 多人一起开发代码

多个开发同时开发一个网站,同时改一份代码:采用分支结构,每天上班第一件事克隆代码,下班前最后一件事合并代码,但是同时改一个文件会导致冲突。

好景不长,开发越来越多,代码文件越来越多。每天下班前合并代码时,发现很多合并失败的文件。最后每天加班3小时人工合并代码。

  • 解决办法:

将合并代码的周期缩短,以前一天,现在一小时,半小时。。。(根据开发人员效率决定)

1.1.3 持续集成

持续集成(CONTINUOUS INTEGRATION,简称CI)指的是,频繁地(一天多次)将代码集成到主干。

  • 它的好处主要有两个:
  1. 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
  2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

1.2 运维上线代码的演变

1.2.1 手工测试与上线

初级运维很苦逼,刚开始开发每天合并一次代码,然后运维把代码PULL下来测试就可以了,但是后来开发引进了持续集成方法论,开发们都“弹冠相庆”。运维一天到晚不停的测试代码每天下班之后,运维拖着疲倦的身子回到宿舍,就想有没有办法自动化?

  • 解决办法:
  1. 让开发自己进行代码测试
  2. 让公司招聘专职的测试人员进行代码测试
  3. 使用自动化运维工具JENKINS

1.3 持续交付

持续交付(CONTINUOUS DELIVERY)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审,如果评审通过,代码就进入生产阶段,持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。

借助自动化部署工具JENKINS,开发上传自己的代码到GITLAB,GITLAB发消息通知JENKINS随后JENKINS从仓库拉取代码,最后全自动部署到测试服务器进行相关测试,并将测试结果通知运维和开发,或者运维直接把这个工具交给开发使用,从此就可以专注其他工作了。

1.4 持续部署

持续部署(CONTINUOUS DEPLOYMENT)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境,持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

代码测试通过了,该到生产环境部署了,运维又该干活了,其实这是一锤子买卖了,要么成功,要么失败回滚。可以使用自动部署工具(比如ANSIBLE,SALTSTACK等),但是很多公司还是相信人工上线。

第2章 JENKINS介绍

JENKINS是一个用JAVA编写的开源的持续集成工具。在与ORACLE发生争执后,项目从HUDSON项目独立出来。

JENKINS提供了软件开发的持续集成服务。它运行在SERVLET容器中(例如APACHE TOMCAT)。它支持软件配置管理(SCM)工具(包括ACCUREV SCM、CVS、SUBVERSION、 GIT、PERFORCE、CLEARCASE和RTC),可以执行基于APACHE ANT和APACHE MAVEN的项目,以及任意的SHELL脚本和WINDOWS批处理命令。JENKINS的主要开发者是川口耕介。 JENKINS是在MIT许可证下发布的自由软件。

第3章 安装部署JENKINS

3.1 环境准备

  1. 准备2台安装好2系统的虚拟机。
  2. Linux中能发邮件的账号

3.1.1 主机名及IP地址关系表

序号 主机名 主机IP地址 内存大小
1 gitlab 10.0.0.211 2G+
2 jenkins 10.0.0.212 1G+

3.1.2 Jenkins系统主机信息

[root@jenkins ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@jenkins ~]# uname -r
3.10.0-327.el7.x86_64
[root@jenkins ~]# getenforce
Disabled
[root@jenkins ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
[root@jenkins ~]# hostname -I
10.0.0.212 172.16.1.212
[root@jenkins ~]# hostname
jenkins

3.1.3 Gitlab系统主机信息

[root@gitlab ~]#
[root@gitlab ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@gitlab ~]# uname -r
3.10.0-327.el7.x86_64
[root@gitlab ~]# getenforce
Disabled
[root@gitlab ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
[root@gitlab ~]# hostname -I
10.0.0.211 172.16.1.211
[root@gitlab ~]# hostname
gitlab
Gitlab安装过程请参看:https://blog.leonshadow.cn/763482/426.html

3.2 安装JENKINS

3.2.1 下载RPM包

RPM包下载地址:

官网下载地址:http://pkg.jenkins.io/redhat-stable/

清华源地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/

3.2.2 安装OpenJDK

[root@jenkins ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

3.2.3 安装Jenkins RPM包

[root@jenkins ~]# cd /server/tools/
[root@jenkins tools]# rpm -ivh jenkins-2.73.1-1.1.noarch.rpm
# 查看rpm安装内容
[root@jenkins ~]# rpm -ql jenkins
/etc/init.d/jenkins             # 启动脚本
/etc/logrotate.d/jenkins        # 日志分割
/etc/sysconfig/jenkins          # Jenkins配置文件,改端口,改用户
/usr/lib/jenkins                # 存放war目录
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins              # 网页代码存放目录
/var/lib/jenkins                # Jenkins工作目录
/var/log/jenkins                # 日志

3.2.4 启动Jenkins

[root@jenkins ~]# /etc/init.d/jenkins start
# Jenkins开启了服务器8080端口
[root@jenkins ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1158/sshd          
tcp6       0      0 :::8080                 :::*                  LISTEN      1481/java          
tcp6       0      0 :::22                   :::*                    LISTEN      1158/sshd

3.3 配置JENKINS

3.3.1 解锁JENKINS

  • 查看Jenkins安装后默认的admin密码:
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
9a1f734e44a542c7v57153dbf2d350cf
  • Web页面解锁Jenkins

图片[1]|Git+JENKINS自动部署|leon的博客

3.3.2 安装Jenkins插件

由于安装插件要从官网(国外网站)下载大约150MB左右文件,速度较慢,所以此处我们使用已经下载好的包直接安装插件的方式,但是在企业中建议使用直接从官网下载的方式,这样可以满足Jenkins插件兼容问题,否则不同版本的的Jenkins和插件之间也许会有兼容问题。

提示:企业中安装直接选择【Install suggested plugins】即可,或者自定义安装插件。

图片[2]|Git+JENKINS自动部署|leon的博客

3.3.3 完成Jenkins配置

图片[3]|Git+JENKINS自动部署|leon的博客

3.3.4 离线安装插件

3.3.4.1 解压插件离线安装包

[root@jenkins ~]# ls /var/lib/jenkins/plugins/          # Jenkins插件目录路径
[root@jenkins ~]# cd /server/tools/
[root@jenkins tools]# tar xfP jenkins_plugins.tar.gz
[root@jenkins tools]# /etc/init.d/jenkins restart

3.3.4.2 Web页面安装插件

图片[4]|Git+JENKINS自动部署|leon的博客

图片[5]|Git+JENKINS自动部署|leon的博客

图片[6]|Git+JENKINS自动部署|leon的博客

图片[7]|Git+JENKINS自动部署|leon的博客

第4章 优化Jenkins

4.1 更改管理员密码

图片[8]|Git+JENKINS自动部署|leon的博客

图片[9]|Git+JENKINS自动部署|leon的博客

图片[10]|Git+JENKINS自动部署|leon的博客

4.2 配置并发执行任务数量

提示:通常情况下并发执行任务数量设置为5个。

图片[11]|Git+JENKINS自动部署|leon的博客

图片[12]|Git+JENKINS自动部署|leon的博客

图片[13]|Git+JENKINS自动部署|leon的博客

4.3 配置邮件

图片[11]|Git+JENKINS自动部署|leon的博客

图片[15]|Git+JENKINS自动部署|leon的博客图片[16]|Git+JENKINS自动部署|leon的博客图片[17]|Git+JENKINS自动部署|leon的博客图片[18]|Git+JENKINS自动部署|leon的博客

第5章 使用JENKINS

5.1 创建自动测试项目

5.1.1 生成SSH认证密钥

[root@jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
76:87:ca:bd:c7:72:16:46:1f:5e:81:1f:ef:7c:0e:ed root@jenkins
The key's randomart image is:
+--[ RSA 2048]----+
|              .  |
|             . o |
|              . +|
|           .. ..o|
|        S o..o * |
|       o + .o + =|
|        o .o . +.|
|          ..=   E|
|          .=     |
+-----------------+
[root@jenkins ~]# ls .ssh/
id_rsa  id_rsa.pub
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub  # 公钥
ssh-rsa AACDB3NzaC1yc2EAAAAWCFABAAABAQCay+Ek17865DwmfVpOuYFGoUROOMiHSWNfc/g5e
...省略部分输出内容...
yEe//cBXe4HcBSU6wV7ZF282u/d root@jenkins
[root@jenkins ~]# cat /root/.ssh/id_rsa     # 私钥
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAmsvhJNek5DrtZn1aTrmBRqFETjjIh0ljX3P4OXkYWYhxbTwc
...省略部分输出内容...
9cnGuciLFbyGyUv+jtplMZcZy3VR7t81rmI0r8jt/VxV/qhL9RQ1
-----END RSA PRIVATE KEY-----

5.1.2 Gitlab配置公钥

图片[19]|Git+JENKINS自动部署|leon的博客图片[20]|Git+JENKINS自动部署|leon的博客

5.1.3 Jenkins创建测试项目

图片[21]|Git+JENKINS自动部署|leon的博客

图片[22]|Git+JENKINS自动部署|leon的博客

图片[23]|Git+JENKINS自动部署|leon的博客

提示:此处Repository URL地址为Gitlab项目首页下的地址,即:

图片[24]|Git+JENKINS自动部署|leon的博客

图片[25]|Git+JENKINS自动部署|leon的博客

图片[26]|Git+JENKINS自动部署|leon的博客

图片[27]|Git+JENKINS自动部署|leon的博客

图片[28]|Git+JENKINS自动部署|leon的博客

5.2 项目测试

5.2.1 开始测试

图片[29]|Git+JENKINS自动部署|leon的博客

5.2.2 查看测试过程详细信息

图片[30]|Git+JENKINS自动部署|leon的博客图片[31]|Git+JENKINS自动部署|leon的博客

图片[32]|Git+JENKINS自动部署|leon的博客

图片[33]|Git+JENKINS自动部署|leon的博客

5.3 配置自动邮件通知

图片[34]|Git+JENKINS自动部署|leon的博客图片[35]|Git+JENKINS自动部署|leon的博客图片[36]|Git+JENKINS自动部署|leon的博客图片[37]|Git+JENKINS自动部署|leon的博客

5.4 自动对上线的代码进行测试

5.4.1 配置Jenkins向Gitlab通信

图片[38]|Git+JENKINS自动部署|leon的博客图片[39]|Git+JENKINS自动部署|leon的博客

图片[40]|Git+JENKINS自动部署|leon的博客

5.4.2 配置Gitlab向Jenkins通信

图片[41]|Git+JENKINS自动部署|leon的博客

5.4.3 测试Gitlab和Jenkins通信情况

图片[42]|Git+JENKINS自动部署|leon的博客图片[43]|Git+JENKINS自动部署|leon的博客

5.4.4 配置Jenkins触发器

图片[44]|Git+JENKINS自动部署|leon的博客图片[45]|Git+JENKINS自动部署|leon的博客图片[46]|Git+JENKINS自动部署|leon的博客图片[47]|Git+JENKINS自动部署|leon的博客

5.4.5 配置Gitlab触发动作

图片[48]|Git+JENKINS自动部署|leon的博客图片[49]|Git+JENKINS自动部署|leon的博客

  • 查看触发结果:

图片[50]|Git+JENKINS自动部署|leon的博客图片[51]|Git+JENKINS自动部署|leon的博客

5.5 模拟实际生产环境自动测试

图片[52]|Git+JENKINS自动部署|leon的博客图片[53]|Git+JENKINS自动部署|leon的博客图片[54]|Git+JENKINS自动部署|leon的博客

扩展:http://www.cnblogs.com/can-H/articles/7346724.html
https://www.abcdocker.com/abcdocker/2041
温馨提示:本文最后更新于2022-12-20 20:57:53,已超过486天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/454.html
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享