原理
CI(持续集成)
是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。
持续继承CI的并不是为了减少bulid失败的次数,而是为了用最短的时间内解决问题,让产品开发的更加敏捷
在传统的开发模式项目一开始是划分模块,将每个开发人员分别分发负责一个模块,等所有的代码开发完成后在集成到一起并一起提交给测试人员,但是这样出现了很多弊端,开发人员需要花费大量的时间来定位bug,加上软件的复杂性,bug的定位就更难,
而CI持续集成可以有效地解决软件开发过程的许多问题,比如在集成测试之前,就可以帮助开发人员定位到问题有效的确保软件质量。
CD(持续交付)
持续交付是指软件开发过程,从原始需求到最终产品开发过程中,较短周期内以需求的小颗粒度(小批量)频繁提交的过程。主要指集成后的代码在类生产环境(测试环境,预发布环境等)中测试并及时反馈的过程.
小颗粒度::意味着每次只处理一小部分的代码或数据变化,并进行快速的测试和验证,这样能更快地发现问题并解决。
开发过程中的快速更新,即使纠正偏离主线
小颗粒度实现,避免颗粒度大,出现问题解决麻烦
迅速反馈软件功能,避免方向性错误
团队角色,协助密切,减少时间
持续发布(CR)
发布是周期性或不定期地对项目在部署后,进行整体软件版本的更新,例如,更新新功能或展示页面框架等
持续发布更强调软件从开发到生产环境的整个过程的自动化,包括测试、构建、部署和环境配置等。
目的是为了让产品快速的更新,匹配市场的策略
持续测试(CT)
贯穿整个软件开发的过程,验证开发提交的代码程序,检验合规性,降低BUG,减少错误,实现敏捷的开发
重点是为了降低开发,部署,发布可能出现的BUG和各种错误。
蓝绿部署:
讲一个海豚的小知识:大家都知道海豚是一种可爱的海洋动物。但又有多少人知道,海豚可以永远不睡觉。
是什么样的能力,使得海豚可以永远保持清醒呢?依靠的是海豚大脑特殊的运作方式。像人一样,海豚的大脑也分为左脑和右脑两个部分。
像人一样,海豚的大脑也分为左脑和右脑两个部分
在海豚活跃的状态下,左脑和右脑都是清醒的:
当然,海豚也是血肉之躯,也是需要休息的。在海豚休息的状态下,其中一半大脑会进入睡眠,另一半大脑仍然保持清醒,以面对各种外界情况。
每隔两个小时,这种一半睡眠一半清醒的状态会进行交替,比如这一刻左脑睡眠右脑清醒,下一刻左脑清醒右脑睡眠。
这就是海豚永远不会真正睡觉的秘密。
蓝绿部署是一种保证系统不间断提供服务的情况下上线代码的方式
就好比海豚的左脑和右脑
在没有上线代码操作的时候,集群A和B是可以同时正常向外提供服务的
有代码上线的时候先把一个集群从负载均衡中删除,进行新版本的部署,集群B正常继续向外提供服务,待集群A成功正常上线后在添加到负载均衡,反之集群B。
最后集群A和集群B迭代后正常向外继续提供服务
滚动更新
滚动更新和蓝绿部署相似也是保证系统在不间断提供服务下上线代码的部署方式
但是比起蓝绿部署,滚动更新可以在更细的粒度下平滑的完成版本的升级
例:
只需要一个集群
例如以上例子,滚动更新可以对不通节点进行单独的版本升级,而蓝绿部署每次则需要维护两个集群成本较高
蓝绿部署与滚动更新对比
金丝雀部署(灰度发布)
17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离、
AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。
Jenkins介绍
Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。
官方
https://jenkins.io/
应用场景
场景1
研发人员上传开发好的代码到github代码仓库
需要将代码下载到nginx服务器部署
运维人员手动下载再部署
运维人员使用脚本下载再部署
场景2
部署Jenkins
原理和作用讲完了接下来开始进行部署
下载与安装
参考官方安装文档
https://pkg.jenkins.io/redhat-stable/
有的人 懒得去看,我摆在这了,找不到了再去翻吧。
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
yum install fontconfig java-17-openjdk
yum install jenkins
想手动下载对应的版本的软件包,可以去官方找到相应的软件包进行下载
也可以去rpmfind.net网站下载相应的软件包
rpmfind.net
环境部署
这里我准备了一台服务器用来装jenkins
IP:192.168.2.140
准备环境
关闭防火墙
systemctl stop firewalld
iptables -F
关闭selinux
setenforce 0
环境搭建好后开启启动
注意jdk一定要兼容,要不启动会失败
systemctl start jenkins.service
启动后去浏览器访问
这里需要解锁一下,去后台日志取密码
cat /var/lib/jenkins/secrets/initialAdminPassword
复制到浏览器,下一步,点继续
选择建议的插件继续,然后等待,他在装默认插件
等待过后创建个用户名密码
继续后公网的话可以在这输入域名,我用的私网,点击保存并完成
部署就成功了
安装后,可以做一个免密登录
vim /var/lib/jenkins/config.xml
打开此文件,然后把下面的一段注释(使用来注释)或删除
8 true
9
10 true
11
12
13 true
14 false
15
配置好后重启
systemctl stop jenkins
systemctl start jenkins
重启服务后,web访问就不需要密码验证了
git+github+jenkins
在开发者电脑上安装Git工具
yum install git -y
第2步: 在开发者电脑上创建空密码密钥对
ssh-keygen -t rsa -f /root/.ssh/id_rsa
复制开发者电脑上的公钥
cat /root/.ssh/id_rsa.pub
将开发者的公钥复制到github上
设置开发者身份
git config –global user.name “name”
git config –global user.email “emil”
git config –global color.ui true
后续之后发累了下班