基于kubernetes CI/CD实践

基于K8s创建静态节点


 env部分是Jenkins的地址和secret。

这个Jenkins agent其实有一个服务启动脚本,然后去读这些参数。在这个pod里面默认是没有mvn构建工具的,这就需要我们去构建镜像,将常用的工具添加到镜像当中,然后agent使用这个镜像就可以了。

动态创建节点


实现的思路就是先去k8s里面创建一个pod, 然后我再运行pipeline,运行完之后调用k8s的api去delete将这个pod删除掉。

实现这个功能可以使用上面的插件,主要依赖于几个插件,一个是kubernetes插件,还有一个是凭据的插件,还有一个依赖于kubernetes的api其实也包含在Kubernetes插件里面的。

不要去过度的依赖插件,你只顾着安装,在升级Jenkins的时候就痛苦,导致升级之后Jenkins起不来了。

如何避免这样的问题,在使用groovy写的时候可以通过共享库来减少对插件的依赖。

所以避免使用插件,只需要安装核心插件就行了,其他的都是写groovy的共享库来实现,比如调用原生的api来实现。

这个名称可以随便定义,这个后面会用到。凭据这里是kube-config文件加到了这里

这个类型是文件的类型,文件就是kube-config这个文件,上传完之后连接测试就行了。

可以看到agent这里发生了变化,这里添加了kubernetes

cloud字段要和我们在插件里面配置的字段保持一致,现在镜像里面是没有mvn工具的,要进行代码扫描和docker镜像的构建,这个时候就需要我们自己去构建镜像了,或者多个container。

ci这块,我们输入版本分支,帮我们去下载代码,然后运行我们的构建,然后单元测试和代码扫描,因为是基于kubernetes做交付的,所以这里会有构建镜像的步骤,镜像是分支名称加commit-id来命名的。

cd使用的helm来部署的,在企业里面都是会自己去开放chart,这个仓库里面存放的就是chart,ci之后更新chart里面values.yaml文件,然后通过helm去部署,如果出现了问题立刻去回滚。

上面是自动的更新yaml文件,gitops里面推崇的是将环境的配置信息都纳入到版本控制系统里面来进行管理,这样对环境的变更都会留下历史记录,很方便去回顾。

我们代码库里面存放的是业务的代码还有我们的chart。

先加载共享库,第一个容器是jnlp容器,也即是agent,其次就是mvn构建的容器,还有docker构建,因为很多版本都是使用了containerd去作为容器运行时,所以里面是没法使用docker的,所以需要使用dind去构建镜像,然后使用docker,还有curl容器和helm部署的容器。

下载代码

 这里做了优化,将项目的信息改为commit-id,这里也会加一些描述信息。

这里面就是下面的代码部分。 

 build部分是在jnlp容器里面运行的,就是jenkins agent容器里面运行的,下面是在container里面去运行的,

 mvn的配置文件已经放在共享库里面了,那么就可以去共享库里面拿到文件的内容,然后写到本地, 也就是将文件从共享库里面拿下来了,然后通过mvn命令指定配置文件。(这里还涉及到m2的缓存)

上传制品其实就是将包名称做了重命名mv,然后将其上传到了制品库, 上传制品其实也就是调用了nexus的api。

docker构建镜像的命令,同时切换容器。涉及到登入信息都放在凭据里面,然后通过变量的方式引用这些凭据信息。

 最后就是调用gitlab的api去更新文件。你构建了镜像后面需要去部署,需要找到chart仓库里面,需要去更新values里面的镜像信息,还有tag信息。

这个步骤是自动去做的。

cd部分就是下载仓库,并且helm部署和回滚。

这个下载代码其实就是下载我们的chart仓库。

部署的时候就是切换到helm里面去,然后将k8s信息存入到本地,然后放到root下面去。

 这里回滚是通过input的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340