一、实验目标

现状:没有做过优化的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

创建项目git标签版本触发CICD流程_CICD平台

创建成功后,如下图:

创建项目git标签版本触发CICD流程_Jenkins_02

2、创建成功后,页面显示personal access token。务必备存好。

创建项目git标签版本触发CICD流程_gitlab_03


4、登录Jenkins系统,配置Access Tokens

1、Jenkins系统配置

创建项目git标签版本触发CICD流程_gitlab_04

创建项目git标签版本触发CICD流程_gitlab_05

系统配置页配置gitlab系统的access token(jenkins通过access token访问gitlab api)

创建项目git标签版本触发CICD流程_CICD平台_06

创建项目git标签版本触发CICD流程_kubernetes_07

创建项目git标签版本触发CICD流程_kubernetes_08

 配置Publish over SSH (slave节点192.168.2.20免密登录192.168.2.12)

创建项目git标签版本触发CICD流程_Jenkins_09

创建项目git标签版本触发CICD流程_CICD平台_10

创建项目git标签版本触发CICD流程_gitlab_11

5、登录Jenkins系统,配置项目构建任务

登录jenkins系统,创建一个项目构建任务

创建项目git标签版本触发CICD流程_gitlab_12

创建项目git标签版本触发CICD流程_Jenkins_13

创建项目git标签版本触发CICD流程_kubernetes_14

创建项目git标签版本触发CICD流程_CICD平台_15

创建项目git标签版本触发CICD流程_gitlab_16

创建项目git标签版本触发CICD流程_gitlab_17

 配置构建触发器。将Webhooks地址和Secret token配置到gitlab,gitlab创建项目标签版本成功,会回调Webhooks地址触发CICD构建任务,所以每个构建任务项目都需要配置。

创建项目git标签版本触发CICD流程_Jenkins_18

创建项目git标签版本触发CICD流程_kubernetes_19

实验一传统部署:编译打包,自动部署应用到linux服务器

添加构建执行shell

创建项目git标签版本触发CICD流程_CICD平台_20

添加构建后操作

创建项目git标签版本触发CICD流程_gitlab_21

实验二docker部署:编译打包,自动构建镜像并推送到仓库,自动在linux服务器启动应用容器

创建项目git标签版本触发CICD流程_Jenkins_22

创建项目git标签版本触发CICD流程_CICD平台_23

创建项目git标签版本触发CICD流程_gitlab_24

实验三k8s部署:编译打包,自动构建镜像并推送到仓库,自动在k8s集群启动应用容器

创建项目git标签版本触发CICD流程_gitlab_25

创建项目git标签版本触发CICD流程_CICD平台_26

创建项目git标签版本触发CICD流程_gitlab_27

创建项目git标签版本触发CICD流程_CICD平台_28

创建项目git标签版本触发CICD流程_kubernetes_29


6、登录gitlab系统,创建Webhooks

创建项目git标签版本触发CICD流程_kubernetes_30

将Enable SSL verification的勾去掉

创建项目git标签版本触发CICD流程_kubernetes_31

Webhooks配置成功后,如下图:

创建项目git标签版本触发CICD流程_kubernetes_32


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标签版本

创建项目git标签版本触发CICD流程_gitlab_33

将release-1.0.0标签版本推送到仓库。

创建项目git标签版本触发CICD流程_gitlab_34


五、实验结果

项目git标签版本创建成功并推送到远程仓库成功后会自动触发CICD流程,实验结果如下图:


创建项目git标签版本触发CICD流程_Jenkins_35


六、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节点多种安装部署方法实践学习资料详见:

https://edu.51cto.com/course/29116.html