一、实验目标
现状:没有做过优化的CICD流程控制方法可以实现每次提交项目源码到git触发自动化持续构建任务,然而在技术人员提交项目源码到git频次较多时,会导致较多项目版本构建任务,严重时会造成该项目版本构建任务泛滥,如果存在项目版本构建任务失败,需要占用技术人员较多的时间排查解决,从而影响软件产品质量和研发效率。
需求:研发团队并不希望每个成员每次提交代码到git都执行项目CICD构建任务,而是期望合并源码提交git仓库后,项目组按需打标签版本触发项目CICD构建任务。
目标:基于git标签版本的CICD流程控制方法,按需打标签版本触发项目CICD构建任务,避免项目版本构建任务次数过多的问题。
二、实验步骤
1、撑握创建项目git标签版本(使用SourceTree工具、git命令行工具或gitlab管理页);
2、配置slave节点到项目部署主机免密登录。(slave节点为192.168.2.20,项目部署主机为192.168.2.12);
3、登录gitlab系统,创建Access Tokens;
4、登录Jenkins系统,配置Access Tokens;
5、登录Jenkins系统,配置项目构建任务;
6、登录gitlab系统,创建Webhooks;
7、创建项目git标签版本,触发CICD流程。
三、实验环境
共五台主机:三台部署k8s集群,一台安装gitlab,一台镜像仓库等。
1、192.168.2.10(3G内存):master01
2、192.168.2.11:worker01(Jenkins Master POD)
3、192.168.2.12:worker02
4、192.168.2.13(3.3G内存):gitlab
5、192.168.2.20:Jenkins Worker、镜像仓库
注:VMware虚拟机规格:CentOS Linux 7 (Core) 2核CPU、2G内存、50G磁盘,
创建虚拟机详见51CTO课程《基于HA方案kubernetes集群生产实战案例》
四、实验操作
1、撑握创建项目git标签版本
1、Git命令行CLI工具;
git tag -n --sort=-taggerdate # 以时间倒序显示标签版本
git checkout release # 切换分支版本
git tag -a release-1.0.0 -m "tag_202307" # 给当前分支版本打标签
git push origin release-1.0.0 # 将标签版本推到远程仓库
git tag -d release-1.0.0 # 删除本地仓库标签
git push origin :refs/tags/release-1.0.0 # 删除远程仓库标签
2、SourceTree软件;
SourceTree通过图形界面创建项目git标签版本
3、gitlab软件web页面;
登录gitlab,切到项目仓库web页-->版本发布-->选择分支,创建项目git标签版本
2、配置slave节点到项目部署主机免密登录
# 实操提示:提前登录Jenkins系统安装jenkins插件:gitlab、Publish over SSH
# slave节点为192.168.2.20,项目部署主机为192.168.2.12。如果是实验三,k8s部署应用,则部署主机为192.168.2.10
# jenkins master地址:http://192.168.2.11:8089 账号密码: admin / admin123
1、需要提前配置192.168.2.20登录到192.168.2.12主机免输密码登录id_rsa.pub(公钥),按以下方法配置:A主机为192.168.2.20,B主机为192.168.2.12。
# 从A主机免输密码登录到B主机配置方法
1)、在A主机执行以下命令
cd /root/.ssh/
ssh-keygen -t rsa
# 执行命令后会在/root/.ssh/目录下产生两个文件,id_rsa(私钥),id_rsa.pub(公钥)
2)、将公钥上传到B主机/root/.ssh/authorized_keys # 如果authorized_keys文件不存在,则手工创建再将公钥写入
3)、验证从A主机ssh免输密码登录到B成功
# 配置jenkins系统管理Publish over SSH,添加SSH Server:192.168.2.12,账号root,key内容为id_rsa(私钥)。
3、登录gitlab系统,创建Access Tokens
# jenkins-master通过Access Token获得gitlab api访问授权。首先登录gitlab系统,创建Access Tokens,再登录jenkins系统配置jenkins-master Gitlab连接名称、Gitlab host URL、Credentials(选择gitlab api tocken方式)
1、以iot-communication为例创建Access Tokens
创建成功后,如下图:
2、创建成功后,页面显示personal access token。务必备存好。
4、登录Jenkins系统,配置Access Tokens
1、Jenkins系统配置
系统配置页配置gitlab系统的access token(jenkins通过access token访问gitlab api)
配置Publish over SSH (slave节点192.168.2.20免密登录192.168.2.12)
5、登录Jenkins系统,配置项目构建任务
登录jenkins系统,创建一个项目构建任务
配置构建触发器。将Webhooks地址和Secret token配置到gitlab,gitlab创建项目标签版本成功,会回调Webhooks地址触发CICD构建任务,所以每个构建任务项目都需要配置。
实验一传统部署:编译打包,自动部署应用到linux服务器
添加构建执行shell
添加构建后操作
实验二docker部署:编译打包,自动构建镜像并推送到仓库,自动在linux服务器启动应用容器
实验三k8s部署:编译打包,自动构建镜像并推送到仓库,自动在k8s集群启动应用容器
6、登录gitlab系统,创建Webhooks
将Enable SSL verification的勾去掉
Webhooks配置成功后,如下图:
7、创建项目git标签版本,触发CICD流程
以下两种方法创建项目git标签版本:
1、Git命令行CLI工具;
git tag -n --sort=-taggerdate # 以时间倒序显示标签版本
git checkout release # 切换分支版本
git tag -a release-1.0.0 -m "tag_202307" # 给当前分支版本打标签
git push origin release-1.0.0 # 将标签版本推到远程仓库
2、SourceTree软件;
SourceTree通过图形界面创建项目git标签版本
先创建项目release分支,再在该分支创建项目git标签版本
将release-1.0.0标签版本推送到仓库。
五、实验结果
项目git标签版本创建成功并推送到远程仓库成功后会自动触发CICD流程,实验结果如下图:
六、CICD课程学习资料
1、基于kubernetes + gitlab + jenkins工具链CICD平台学习资料详见:
https://edu.51cto.com/course/29267.html
2、基于kubernetes + gogs + jenkins工具链CICD平台学习资料详见:
https://edu.51cto.com/course/29199.html
3、基于Jenkins的CICD平台Jenkins-master和slave节点多种安装部署方法实践学习资料详见: