分享好友 最新动态首页 最新动态分类 切换频道
基于jenkins+k8s(container)实现CI/CD
2024-12-25 14:03

持续集成是一种软件开发实践,通过自动化工具对代码进行编译、测试和打包,减少人工干预,提高构建效率。它的核心理念是将代码频繁地集成到共享存储库中,并通过自动化构建和测试流程来验证代码的正确性。这样做可以为开发人员提供即时的反馈,帮助他们快速定位并修复问题,从而加速软件开发周期并提高软件质量。

基于jenkins+k8s(container)实现CI/CD

持续交付是一种软件开发实践,通过自动化工具建立一套自动化的流水线,将应用程序部署到不同的环境中,例如开发环境、测试环境和生产环境等。这种流水线能够自动化地执行构建、测试、部署和发布等步骤,使得软件可以在不同环境中快速、可靠地交付给最终用户。持续交付的目标是确保软件可以随时随地以可靠的方式交付给用户,从而缩短交付周期、降低发布风险。

CI和CD是相互关联的两个概念,持续集成是持续交付的基础,只有实现了持续集成,才能够实现持续交付。持续集成提高了代码的质量和可维护性,为持续交付提供了更好的基础;而持续交付则能够更快地将代码交付给用户,从而促进持续集成的实施。这两者相辅相成,共同推动着软件开发过程的持续改进和交付效率的提升。

利用 Jenkins、SonarQube、Harbor、Container、Kubernetes技术,搭建一个完整的 CI/CD 管道,模拟实际生产环境项目开发部署流程,实现持续集成、持续交付和持续部署。通过自动化构建、测试、代码质量检查和容器化部署,将开发人员从繁琐的手动操作中解放出来,提高团队的开发效率、软件质量和安全性,实现持续更新迭代和持续部署交付。

开发测试阶段

  1. 开发人员需求确定后,从master分支拉取最新代码,在dev分支完成开发后,将dev分支合并到test分支并推送至gitlab仓库。
  2. Gitlab监听到test分支代码更新,请求jenkins的webhook地址,触发持续构建和持续部署流程,准备将代码部署至测试环境。
  3. Jenkins从Gitlab中拉取项目源码,编译并打成jar包,然后调用SonarQube完成代码扫描。
  4. 扫描完成调用docker或者container打包成容器镜像,并推送至Harbor镜像仓库。
  5. jenkins修改yaml文件,将资源部署至测试环境。
  6. Jenkins完成测试环境CICD流程后,将结果邮件通知给开发运维和测试人员。
  7. 测试人员访问测试环境,功能验证无误后反馈给开发主管,至此开发测试阶段完成。

生产发布阶段

  1. 开发主管将test分支代码合并至master分支,并推送至gitlab仓库。
  2. gitlab监听到master分支代码更改,请求jenkins的webhook地址,开始触发生产环境cicd流程,使用k8s滚动更新项目版本。
  3. jenkins完成cicd流程后自动发送邮件通知,用户访问新版本服务。

gitee:https://gitee.com/cuiliang0302/sprint_boot_demo
github:https://github.com/cuiliang0302/sprint-boot-demo

  1. **配置管理困难:**不同项目可能使用不同的编程语言、框架或库,这导致了每个Slave的配置环境各不相同。因此,需要动态Slave能够根据不同的项目需求,灵活配置不同的运行环境,从而简化配置管理和维护工作。
  2. **资源分配不均衡:**在使用静态Slave时,可能会出现某些Slave处于空闲状态,而其他Slave却处于繁忙状态,导致资源分配不均衡。动态Slave可以根据当前任务的需求自动调配资源,使得任务能够在空闲的Slave上尽快执行,从而提高资源利用率和任务执行效率。
  3. **资源浪费:**静态Slave在没有任务执行时仍然占用着资源,这导致了资源的浪费。而动态Slave能够根据实际需要自动扩容或缩减,当没有任务执行时会释放资源,从而避免了资源的浪费。

本项目所有服务均运行在k8s集群上,使用nfs共享存储,具体部署配置过程可参考下文,此处不再赘述。

参考文档:https://www.cuiliangblog.cn/detail/section/15287639

参考文档:https://www.cuiliangblog.cn/detail/section/116191364

参考文档:https://www.cuiliangblog.cn/detail/section/99861101

参考文档:https://www.cuiliangblog.cn/detail/section/99861101

参考文档:https://www.cuiliangblog.cn/detail/section/131418586

参考文档:https://www.cuiliangblog.cn/detail/section/131416735

参考文档:https://www.cuiliangblog.cn/detail/section/165547985

角色权限访客对项目有只读权限开发人员对项目有读写权限维护人员对项目有读写权限、创建webhook权限项目管理员出上述外,还有用户管理等权限

上传下载镜像测试
可参考文章https://www.cuiliangblog.cn/detail/section/15189547,此处不再赘述。

 

推送至gitlab仓库

 
 
 
 

GitLab插件安装与配置:https://www.cuiliangblog.cn/detail/section/127410630
SonarQube Scanner插件安装与配置:https://www.cuiliangblog.cn/detail/section/165534414
Kubernetes插件安装与配置:https://www.cuiliangblog.cn/detail/section/127230452
Email Extension邮件推送插件安装与配置:https://www.cuiliangblog.cn/detail/section/133029974
Version Number版本号插件安装与配置:https://plugins.jenkins.io/versionnumber/
Content Replace文件内容替换插件安装与配置:https://plugins.jenkins.io/content-replace/

安装完Kubernetes插件后,默认的slave镜像仅包含一些基础功能和软件包,如果需要构建镜像,执行kubectl命令,则需要引入其他container或者自定义slave镜像。
关于镜像构建问题,如果k8s容器运行时为docker,可以直接使用docker in docker方案,启动一个docker:dind容器,通过Docker pipeline插件执行镜像构建与推送操作,具体内容可参考https://www.cuiliangblog.cn/detail/section/166573065。
如果k8s容器运行时为container,则使用nerdctl+buildkitd方案,启动一个buildkit容器,通过nerdctl命令执行镜像构建与推送操作,具体内容可参考
https://www.cuiliangblog.cn/detail/section/167380911。
本次实验以container环境为例,通过nerdctl+buildkitd方案演示如何构建并推送镜像。
构建jenkins-slave镜像

 

测试jenkins-slave镜像构建容器与操作k8s
以下操作在k8s集群master机器,容器运行时为container节点执行测试

 
 
 
 
 

模拟开发人员完成功能开发后提交代码至test分支

 

此时查看cicd名称空间下的pod信息,发现已经创建一个名为springbootdemo-275-rf832-h6jkq-630x8的pod,包含3个container,分别是jnlp、maven、buildkitd。

 
 
 
 
 

接下来演示master分支代码提交后,触发生产环境版本发布流程。

 

待收到邮件通知后,查看k8s资源,已经在prod名称空间下创建相关资源

 
 
 

完整的jenkinsfile如下所示,由于每个项目使用的开发语言和版本各不相同,因此建议将jenkinsfile存储在代码仓库随项目一同管理,使用yaml格式可以最大程度的定制slave容器。

 
 
 

微信公众号同步更新,欢迎关注微信公众号《崔亮的博客》第一时间获取最近文章。

最新文章
韩国刀具品牌排行榜(2020全球十大知名刀具品牌排行榜)
我们致力于提供一个高质量内容的交流平台。为落实国家互联网信息办公室依法管网、依法办网、依法上网的要求,为完善跟帖评论自律管理,为了保护用户创造的内容、维护开放、真实、专业的平台氛围,我们团队将依据本公约中的条款对注册用户和
点猫科技:“创客教育解决方案”成功入选 获教育部资源中心认可
点猫科技成立于2015年,是国内资深的编程教育企业,旗下拥有编程教育品牌“编程猫”。近日,教育部教育技术与资源发展中心(中央电化教育馆)公布了2024年“数字校园综合解决方案”第二批测试合格名单,其中点猫科技的“中小学人工智能创客
大智慧大数据终端:开启智能化投资时代
引言:随着互联网技术与金融行业的深度融合,大数据应用在投资决策中的作用日益凸显。大智慧大数据终端作为投资者获取信息、分析数据、进行决策的重要工具,已经成为金融行业的热门话题。本文旨在深入探讨大智慧大数据终端的行业现状与发展
全球首发!眼科大型语言模型Eye GPT在Vision China 2023重磅发布!
5月19日上午,一项眼科领域的颠覆性产品——眼科大型语言模型Eye GPT数字医疗系统在Vision China 2023正式发布,这也是该项科技成果和应用在全球首次正式发布。排版:张颖琪审核:叶小静2023 VISION CHINA关注公众号了解更多相关资讯
超星线上课程平台与PTA(线上编程平台)教师简易使用教程
电脑上打开https://www.xueyinonline.com/或者各个学校自己的超星线上课程网站。登录后点击右上角头像。点击"我教的课"。进入课程后课进行如下操作:点"新建班级",输入班级名称(建议按照"学校-班级名"格式命名)。根据需要选择创建一个大班
如何使用AI工具生成超逼真美女写真?2023最佳工具评测与教程
这款工具特别适合用户生成高度真实的照片。它的AI算法专注于人脸的细节捕捉,非常适合制作高清晰度的美女写真。界面友好,适合各类用户,然而相比于其他工具,定制化选项较少,限制了用户创作的自由度。5. 【搜狐简单AI】最后,我们不得不
用AI绘画神器,轻松生成超逼真美女写真!
在如今这个数字化时代,生成超逼真的美女写真动画似乎成了一种潮流,特别是在社交媒体盛行的影响下,很多人想要通过AI技术制作出个性化、专业感满满的照片,那么哪个AI绘画工具最适合你呢?想象一下,你能坐在家里,随意指尖轻触,便可创造
网站SEO优化:黑帽常用的优化技巧
经常在站长论坛看到,一些站长抱怨他们的网站排名下降了。百度的网站受到惩罚甚至被删除。网站站长觉得很十分无辜,认为搜索引擎没有惩罚的理由。经过深入的研究和分析,人们会发现这些网站受到惩罚的事实恰恰是利用搜索引擎作为欺骗的手段
话题对于热搜的重要性你知道多少
有多少人只是为了而冲着,但那些人却会忽略一些小细节。比如如何设置热搜话题,如何对内容进行策划和编辑,让内容更贴近主题,素材更吸引眼球。我们就来说说主题吧。一个好的话题确实可以起到事半功倍的效果。在整体榜单之前,你是否做过深
百度搜索推广平台
百度搜索推广平台是一个在线广告投放平台,为企业提供精准的营销推广服务。该平台通过关键词竞价、定向投放等方式,将广告展示在用户搜索结果页面中,帮助企业快速提升品牌曝光度和销售业绩。该平台具有灵活的投放策略和精准的定向技术,可
相关文章
推荐文章
发表评论
0评