持续集成

第1章 行话

1.1 什么叫持续集成?           ---简称CI

在公司中,开发人员每天上班克隆一个自己的分支,下班前将分支进行合并,但是随着开发人员越来越多,代码也越来越多,每天下班之前要花很长时间进行人工合并代码,为了解决这样的情况,将合并的周期缩短,以前每天合并,改为每小时或者没半小时进行合并,随时随地的将代码进行合并,这种方法叫做持续集成

一句话:持续集成就是指,频繁的将代码集成到主干!

1.1.1 持续集成的好处:

1.      快速的发现错误,没完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易

2.      方式分支大幅度偏离主干,如果不是经常集成,主干又不断的更新,会导致以后集成的难度变大,甚至难以集成

1.2 什么叫做持续交付?         ---简称CD

借助一个自动化的部署工具,jenkins

当开发上传自己的代码到gitlab,gitlab发消息通知jenkins,随后jenkins从仓库拉取代码,最后全自动部署到测试服务器进行相关测试,并将测试结果通知运维和开发,这种方法叫做持续交付

1.3 什么叫持续部署?           ---简称CD

持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境

持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产进阶

第2章 jenkins介绍

jenkins是一个用java编写的开源的持续集成工具,在与oracle发生争执后,项目从hudson项目独立出来

jenkins提供了软件开发的持续集成服务,他运行在servlet容器中(例如apache,tomgcat)他支持软件配置管理,(SCM)工具,可以执行基于Apache antApachemaven的项目,以及任意的shell脚本和windows批处理命令,jenkins的主要开发者是川口耕介,jenkins是在mit许可证下发布的自由软件

 

第3章 部署jenkins:

3.1 软件下载地址:

官方仓库  https://pkg.jenkins.io/redhat-stable/

清华大学开源软件镜像站  https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

3.2 进行安装

yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

rpm -ivh jenkins-2.73.1-1.1.noarch.rpm 

/etc/init.d/jenkins start

3.3 安装插件

[root@jenkins tools]# tar xfP jenkins_plugins.tar.gz

[root@jenkins tools]# /etc/init.d/jenkins restart

3.3.1 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   # war

/usr/sbin/rcjenkins         # 命令

/var/cache/jenkins          # war包解压目录 jenkins网页代码目录

/var/lib/jenkins            # jenkins 工作目录

/var/log/jenkins             # 日志

配置文件说明:

[root@Jenkins ~]# grep "^[a-Z]" /etc/sysconfig/jenkins

JENKINS_HOME="/var/lib/jenkins"    #jenkins工作目录

JENKINS_JAVA_CMD=""

JENKINS_USER="jenkins"             # jenkinx启动用户

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"

JENKINS_PORT="8080"                # 端口

JENKINS_LISTEN_ADDRESS=""

JENKINS_HTTPS_PORT=""

JENKINS_HTTPS_KEYSTORE=""

JENKINS_HTTPS_KEYSTORE_PASSWORD=""

JENKINS_HTTPS_LISTEN_ADDRESS=""

JENKINS_DEBUG_LEVEL="5"

JENKINS_ENABLE_ACCESS_LOG="no"

JENKINS_HANDLER_MAX="100"          # 最大连接

JENKINS_HANDLER_IDLE="20"

JENKINS_ARGS=""

3.4 输入http://10.0.0.64:8080进入web管理界面

第4章 web界面安装:

4.1 查看解锁jenkins的密码:

[root@jenkins secrets]# cat /var/lib/jenkins/secrets/initialAdminPassword

8c85ece6417d4c229434b26eaa5806bd

jenkins持续集成_第1张图片

1.1 输入密码登录后,会有安装插件的提示,先关闭页面,在安装完jenkins后安装插件

jenkins持续集成_第2张图片


1.1 关闭安装插件后,选择开始使用jenkins

jenkins持续集成_第3张图片

1.1 安装完成

jenkins持续集成_第4张图片

1.1 安装jenkins插件:    ---系统管理---管理插件

jenkins持续集成_第5张图片

这里直接上传的软件包

[root@jenkins tools]# tar xfP jenkins_plugins.tar.gz

[root@jenkins tools]# /etc/init.d/jenkins restart

第1章 jenkins配置

配置jenkins并发执行数量,提高执行效率

jenkins持续集成_第6张图片

1.1.1 完成

jenkins持续集成_第7张图片

1.1 设置邮件,在测试完成后,主动发送邮件通知测试情况

jenkins持续集成_第8张图片

jenkins持续集成_第9张图片

第1章 jenkins使用

1.1 创建一个新的任务

jenkins持续集成_第10张图片

jenkins持续集成_第11张图片

1.1 jenkinsgitlab联合

[root@Jenkins ~]# ssh-keygen

Generating public/private rsa key pair.

 

Enter file in which to save the key (/root/.ssh/id_rsa): 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:

SHA256:5SGYye8oxCKFJjddb4W8JC0RAQhBWCvuG8aZL8eMJs4 root@Jenkins

The key's randomart image is:

+---[RSA 2048]----+

|==....=* ..      |

|...o oo==.       |

|+.= . =++.o      |

|++ o   o.+ .     |

|... o   S .      |

|o.oo   o         |

| B+ . . .        |

|++++ .           |

|+Eo.             |

+----[SHA256]-----+

1.1.1 gitlab中添加公钥信息

jenkins持续集成_第12张图片

1.1.1 jenkins中添加私钥

jenkins持续集成_第13张图片

jenkins持续集成_第14张图片


1.1.1 选择ssh密钥和证书,然后选择直接输入,将私钥复制到下框中即可

jenkins持续集成_第15张图片

1.1.1 选择刚才创建的证书,完成后,选择构建

jenkins持续集成_第16张图片

1.1.1 选择构建,拉到最底部,选择使用shell脚本

jenkins持续集成_第17张图片

1.1.1 脚本内容:

jenkins持续集成_第18张图片

1.1 创建测试环境

[root@jenkins ~]# mkdir /data/www -p

[root@jenkins ~]# chown -R jenkins.jenkins /data/www/

说明:这里创建完目录后把站点目录的属主和属组都交给jenkins用户,因为jenkins程序运行是jenkins用户,要注意安全问题,各种服务都一样!

1.1.1 选择构建后,让每次构建完成后将结果发送给管理员

jenkins持续集成_第19张图片

jenkins持续集成_第20张图片

1.1 配置简单的测试项目完成

1.1.1 部署执行过程的日志    

jenkins持续集成_第21张图片

jenkins项目所在目录

[root@jenkins oldboyedu]# pwd

/var/lib/jenkins/workspace/oldboyedu          

1.1 查看部署结果

[root@jenkins oldboyedu]# ll /data/www/

total 8

-rw-r--r-- 1 jenkins jenkins  10 Mar 21 23:08 jiang.txt

-rw-r--r-- 1 jenkins jenkins 782 Mar 21 22:24 README.md

第2章 配置更新代码以后自动上线自动部署

2.1 添加gitlab-token,配置gitlab认证

jenkins持续集成_第22张图片

1.1.1 添加新凭证

jenkins持续集成_第23张图片

1.1.1 gitlab设置中将token复制过来

jenkins持续集成_第24张图片

1.1.1 将复制的token粘贴到api token,点击ok即可

jenkins持续集成_第25张图片

1.1 系统全局配置连接上gitlab

jenkins持续集成_第26张图片

1.1 打开项目,编辑项目的构建触发器

jenkins持续集成_第27张图片

1.1.1 gitlab上配置连接jenkins,jenkinssecret tokenURL复制到gtilab

jenkins持续集成_第28张图片

1.1.1 保存之前进行测试,测试成功后保存即可

jenkins持续集成_第29张图片

1.1.1 gitlab上上传文件,进行测试即可

jenkins持续集成_第30张图片

1.1.1 在日志中显示是 Started by GitLab push by Administrator 即表示自动集成成功

第1章 代码上线解决方案:

1.1 合理化上线方案:

1.      开发人员需在个人电脑的搭建LAMP环境测试开发好的网站代码,并且在办公室或者IDC机房的测试环境测试通过,最好有专职测试人员

2.      程序代码上线要规定时间,这个上线时间需要从监控中分析数据得知,选择流量低的时段进行上线

3.      代码上线之前需要备份,网站程序有问题方便回滚,另外,从上线技巧上讲,上传代码时尽可能先传到服务器中网站的临时目录,传完整后一步mv过去,或者通过做软链接的方法实现

4.      尽量由运维人员管理上线,对于代码的功能性,开发人员更在意,对于代码的性能优化和上线后的稳定,运维更在意服务器的稳定,因此,如果网站宕机问题归运维管理,就要让运维上线,这样规范更科学,否则,开发随意更新,出了问题找不到根源


1.1 PHP程序代码上线的具体方案:

对于php上线方法:发布代码时可以直接发布到正式线临时目录,然后mv或者更改林肯的方式发布到正式线上目录,不需要重启http服务,当然这也是新浪,赶集的上线方案

1.2 JAVA程序代码上线的具体方案

对于java上线方法,较大公司需要分组平滑上线(如从负载均衡服务器上摘掉一般的服务器)发布代码后,重启服务器进行测试,没问题后,挂上上线好的一半,再换另外一半,如果前段有DNS智能解析,上线还可以分地区上线若干服务器,在逐渐普及到全国的服务器,这个被称为灰度发布

1.2.1 灰度发布:

通过ip地址定位,地区,返回指定网页内容