开篇

总的来说,在我认知中的CI/CD流程,可以分为以下几大步:

  1. maven打包流程

  2. 镜像打包流程

  3. 镜像推送流程

  4. 镜像拉取流程

  5. 镜像启动流程

这几个步骤里可以进行更细一步的划分,当然,我在这篇文章里不会一 一去列举,对应的,我会直接点名流程中存在的,可以优化的点。

Maven打包流程

1、使用本地代码仓库

如果你的代码仓库托管在第三方平台,比如Gitee、Github这些,Jenkins在执行流水线的过程中拉取代码时,是要走外网带宽的,考虑到我们的网络环境,如果是Gitee这类国内的托管平台还好,如果是Github这种,100%会遇到超时的情况。当然,你可以配置代理、DNS之类的去优化这个问题,但是时间、成本花在那里完全不值当。最理想的环境是代码仓库和Jenkins在一个局域网内,拉取代码时直接走内网带宽。

2、配置正确的Maven仓库源

关于这点,其实和上述情况差不多,Maven的默认仓库源是在外网的,这个仓库源虽然不像Github那样墙的那么死,但是它的访问速度确实差点意思。我们最通用的做法都是配上阿里的仓库,基本上就够用了。

3、复用本地缓存

Maven默认是有.m2缓存的,所以这里主要说的是在Jenkins流水线的环境下要配置缓存的复用。详细的配置其实我也没做了解,这里我在工作中使用了比较直接的方法在Jenkins的机器中手动安装Maven,手动进Jenkins控制台里配置Maven信息。

4、选择性的跳过不需要的Maven生命周期

根据不同的部署环境去选择执行不同的生命周期。这块我提供不了比较有价值的参考,我这儿直接Install、package一把梭了。

5、排除不需要的依赖项

借助IDE把没有用到的第三方包排除掉,达到减小包体积的效果。

6、使用多线程提高Install速度

可以通过-T参数开启多线程的编译打包,提高速度。

镜像打包、推送、拉取流程

1、选择轻量级的基础镜像

这块我基本上都是自己去拉个Alphine镜像,然后写个DockerFile往里边加自己需要的东西,比如jdk、中文包之类的。有朋友可能会疑问,直接整个jre不是更合适吗?这是因为我们在后续排查各种问题的时候,还需要用到jdk提供的各种命令行工具,我们并不是集成了JDK就什么不做,我们可以在JDK的基础上进一步的去删减一下不必要的内容,这里可以去搜索引擎搜一下相关的镜像制作内容。

2、配置合理的镜像源

在写下这篇文章的今天,我现在认为这是一个很曹丹的优化点。以往我们可以配阿里云的镜像源起到加速的效果,但是现在国内的镜像源基本都被鲨完了,现在要么配代理,要么直接用海外服务器搭个代理镜像仓库。

3、编写合理的DockerFile

这里略。

4、使用本地镜像仓库

搭个本地的Harbor,手动把各种需要的镜像从DockerHub拉下来推到本地仓库。

5、注意网络环境,尽量不走外网带宽

简而言之就是和上述说的情况差不多。

镜像启动流程

1、!必须配置健康检测

健康检测是很重要的,如果你不配置监控坚持,容器在你执行run命令的时候,就会直接进入就绪状态,如果这时候请求路由到容器,会产生大量错误警告的!

2、这块更多是代码层面的,比如对一些资源进行懒加载

总结

总得来说,可以归纳为考虑网络带宽、包体积、缓存复用。这是结合个人在实践中总结出来的一些优化经验,仅供参考,希望对你有帮助。