云原生的大时代背景下,CI/CD流程在日常工作生产中起到了很关键的作用,本文主要介绍了如何用当前流行的各种CI/CD的开源工具,将其串联起来形成一套完整的能应用于生产的CI/CD流程,话不多说咱们进入正题。
在此流程中CI使用的是Jenkins,CD使用的是ArgoCD,代码管理使用了GitLab,镜像仓库使用的是Harbor,下面是整个流程的流程图介绍。
以上流程图分为9个步骤,完整的流程使用文字版的描述如下:
-
研发人员将代码变更提交到GitLab仓库中,在发布时间段提交发布任务。
-
运维人员触发对应发布任务对应的Jenkins项目,进行发布。
-
Jenkins拉取最新的代码,执行打包的CI Shell脚本(自行研发,下面称为脚本)。
-
脚本将代码拷贝到打包机(为了提升打包速度),将最新的代码打包成镜像
-
脚本将打包好的镜像推送到自建的Harbor仓库。
-
CD Python脚本将最新的镜像ID更新到k8s的配置仓库。
-
ArgoCD会循环监听配置仓库里面的变化。
-
ArgoCD将最新的配置文件应用到K8S中。
-
K8S根据最新的配置拉取最新的配置进行更新应用。
以上步骤比较繁琐,进行了比较详细的拆解。其中的 CI 脚本主要实现打包和更新配置仓库内容即可,其中主要影响整个流程速度的有以下几点:
-
所有的环节最好都是在同一网络环境下,同一内网最好,最少要保证打包机,镜像仓库以及K8S集群在同一内网环境,方便加速对镜像的上传和下载。
-
打包机性能要求高一些,可以提升容器打包速度。
-
git项目保证尽可能地小,构建的代码不要包含无用的大文件。
以上是针对CI/CD的一个思路,其中的组件都可以替换成其他流行的开源软件或者是自行开发都可,欢迎各位评论留言讨论。
如果想了解具体如何实现,可以参考我的专栏(基于GitOps的CI/CD保姆级搭建),目前正在更新中2024年6月会更新完毕,对搭建进行讲解,各个组件的部署和CI/CD中的脚本也更新在专栏中,如果购买了专栏可以一对一协助解决部署过程中的问题或其他定制化的需求。
同时也可以关注我的公众号实用运维 ,会不定时更新我实践过的内容,欢迎大家关注讨论。