jenkins+maven+gitlab+harbor+k8s的 CI/CD
首先需要安装jenkins,maven,gitlab,harobor,k8s等工具:
- jenkins安装 安装文档:https://www.cnblogs.com/momoyan/p/12770919.html
- maven安装 安装文档:https://blog.csdn.net/qq_38270106/article/details/97764483
- gitlab安装 安装文档: https://www.cnblogs.com/momoyan/p/14033256.html
- harbor安装 安装文档:https://www.cnblogs.com/dalianpai/p/11800371.html
- k8s安装 安装文档:https://blog.csdn.net/weixin_42214548/article/details/109001157
- docker安装 安装文档:https://www.cnblogs.com/momoyan/p/9129200.html
1.Jenkins配置
安装完之后,开始配置:
1.1.安装jenkins插件
点击系统管理,管理插件,安装 GitHub Branch Source Plugin,Gitlab Authentication plugin,Gitlab Hook Plugin,GitLab Plugin,Maven Repository Server Plugin,Publish Over SSH,Workspace Cleanup Plugin 这些插件
插件下载地址:
1.2.新建任务
1.3.配置jenkins项目
(1)写好描述 主要是写上项目名
(2)配置git地址
注:第一个红框标起来的是git地址,是从gitlab上获取的,首先登陆gitlab,如下图,从这里获取
而第二个红框标识的证书而是需要从jenkins初始页面凭据添加的,首先点击jenkins首页的凭据,依次点击
之后点击
类型选择:
之后设置成如图样子,注意username要和登陆jenkins的用户一样,证书生成也不多说,在jenkins本机生成,贴上去即可,ID选项不用管,之后会自动生成一串ID:
设置好凭据后,回到创建jenkins项目的界面,选择:
如果出现大片红色报错,没关系,那一定是gitlab没有配置jenkins的密钥,去配置一下,首先打开gitlab,点到相应项目中,再点击图中位置,填写好.ssh/id.rsa.pub中的内容即可:
再回到jenkins看看是否可以了呢,可以了就不会报一片红~ 继续下一步
(3)构建触发器选择基本默认,有别的需要可以自定义:
这个选项中的url之后会用到,需要配置到gitlab~
(4)接下来就是maven打包这里,配置pom.xml的绝对路径,然后输入打包命令,将会自动完成:
(5) 接下来就是配置建立后的步骤:
添加shell,完成要完成的动作(根据自己需求来)
HOST="192.168.147.138" API_PORT=80 IMAGE_NAME="192.168.147.138/docker-tomcat/tomcat:v$BUILD_NUMBER" docker build -t $IMAGE_NAME . docker push %IMAGE_NAME
sed -i "s/BUILD_NUMBER/$BUILD_NUMBER/g" docker-tomcat.yaml
再添加一段ssh,通过这个把生成的包或者文件传到master并执行命令:
配置好点击保存,这样,jenkins就算完成了,接下来去到gitlab看下:
点到相应的项目中,配置url,这个url在jenkins配置的时候出现过,复制过来即可,保存
配置好以后,拉到底下,我们测试一下:
出现这样说明配置成功了:
这样子整套CI/CD流程也就做完了,提交代码后会自动打包部署。
测试:
写博客的这个项目我并没有保存,毕竟也是公司环境,所以我拿之前配置好的一个项目(项目名:docker)做下测试,记录下成果:
首先我提交代码,看jenkins变化:
部署已经成功了,看下部署过程:
部署已经完成了,去机器上看下:
kubectl get po
下图可以看到这个pod镜像是刚打出来的,v33版本
kubectl describe pod ng-364889701-m09zn
去harbor看下镜像,是有的:
版本回滚
那么我们发现一个问题,cicd是做好了,可是如果版本有问题,怎样回滚呢,其实也是很好解决的,可以用k8s自己的rolling update机制去完成,不但可以回滚版本,还可以弹性伸缩pod数量。
首先先试一下回滚,查看一下之前的版本:
kubectl rollout history deployment ng
让我们用一条命令回滚到上一版本:
kubectl rollout undo deployment ng
看下现在pod用的是否是上个版本的镜像:
kubectl get po
之前我们是v33版本,回滚到v32版本也是成功了,接下来说下怎样回滚到指定版本:
kubectl rollout history deployment ng
通过一条
kubectl rollout undo deployment deploy名 --to-revision=2
指定版本前方所对应的数字即可。
弹性伸缩
接下来说如何弹性伸缩:
手动伸缩通过命令:
kubectl scale deployment deploy名 --replicas=2
例如:
kubectl scale deployment ng --replicas=2
设定replicas数量即可,如图: