CI/CD是什么
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。
当我们把开发周期这样理解时:
编码 → 构建 → 集成 → 测试 → 交付 → 部署
持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)有着不同的软件自动化交付周期。
持续集成的好处:
-
快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;
-
防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成并不能消除Bug,而是让它们非常容易发现和改正。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
jenkins是什么
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
官网:https://jenkins.io/
官方文档:https://jenkins.io/doc/
jenkins的特性
1.开源的java语言开发持续集成工具,支持CI,CD;
2.易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理;
3.消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告;
4.分布式构建:支持Jenkins能够让多台计算机一起构建/测试;
5.文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;
6.丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
jenkins的安装
软件下载:https://jenkins.io/zh/download/
国内镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
安装jenkins:
rpm -ivh jdk-8u171-linux-x64.rpm
rpm -ivh jenkins-2.225-1.1.noarch.rpm
systemctl start jenkins
(刚开始未启动时,/var/lib/jenkins/目录里为空,
当启动jenkins时,此目录出现很多文件。
一般等到updates目录出现,就可以进行插件安装。
更新插件源,这里的插件源不进行更新的话,在后面安装插件时,会出现问题,国外镜像站不一定能用。
# vim /var/lib/jenkins/hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
# cd /var/lib/jenkins/updates
# sed -i.bak 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
# sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
访问: http://172.25.0.12:8080
使用初始密码登录:cat /var/lib/jenkins/secrets/initialAdminPassword
安装默认插件即可,使用admin用户,登录后修改密码。
点击右下角的使用admin用户,保存并完成
实例配置
接下来的实验环境:
172.25.2.7 ser6 jekins主机
172.25.2.8 ser8 gitlab代码库
172.25.2.2 ser2 harbor仓库
关闭几台主机的selinux,firewalld
1.新建item,选择自由风格。
2.为gitlab代码库配置认证
3.解决报错:需要在jenkins主机上安装git工具
将gitlab主机的私钥添加在jenkins上
credentials的用户选择为root
先进行测试,轮询表示jenkins多久去看一下gitlab仓库。这是jenkins主动发起的检测。(每分钟)
执行shell脚本
点击保存使更改生效
等待一分钟左右
点击控制台输出
在jenkins主机中发现
设置gitlab主动触发jenkins
对jenkins进行设置
1.为jenkins安装gitlab插件
点击插件管理
选择gitlib并点击直接安装
安装完成之后,进入工程test1,点击配置
关闭之前测试用的轮询
构建触发器,让gitlab使用webhook机制主动触发jenkins
点击高级
点击右下角的generate,获得密钥
点击保存
对gitlab进行设置
点击settings–>管理中心->设置->网络
按照图示打上勾,点击保存
进入项目,点击设置->webhooks
填写url和token,jenkins的
当出现勾选的情况时应该触发jenkins
点击测试->push events
push成功
在jenkins中