后端项目构建速度优化思路、gitlab-runner镜像构建详解

当前公司后端项目自动构建(gitlab-ci)使用的运行器(gitlab-runner)是使用docker方式执行ci脚本,整个流程是代码合并触发自动构建,运行期执行gitlab-ci.yml文件中的脚本。首先拉下来指定的image,然后启动这个镜像实例在里面执行ci脚本。整体流程如下图1所示:

这样做的弊端是每次触发ci都会使用一个新的docker容器,当maven构建jar包时因为本地没有依赖包每次都会去下载依赖,且当前runner所在环境上的maven没有配置镜像仓库,下载依赖速度很慢,这就导致构建的耗时久,进而拉低整个ci的效率。随着业务越来越多,打包速度也会越来越慢,因此需要优化下构建流程。

解决此问题目前有三个思路

第一个思路是在原来gitlab-ci.tml文件里使用cache关键字加上缓存,缓存路径为容器里依赖存储的目录,缓存key为项目id+分支名,这样每次在容器内打包时就会使用上次构建使用的jar包,可以大幅加快构建速度,但流程上还是比较复杂。

第二个思路是继续使用docker方式执行ci脚本,但是在拉取的指定的image上下载好大部分的依赖,这样可以省去占比较大的下载依赖所消耗的时间。但此方法maven的打包耗时会与此镜像内依赖包的全面程度挂钩。

第三个思路是使用shell方式执行ci脚本。首先在基础镜像基础上构建一个有gitlab-runner、maven、gradle、java

如何加快 CI (maven编译和单元测试) 速度 文章目录如何加快 CI (maven编译和单元测试) 速度 CI 速度 慢到什么程度会无法接受加快编译 速度 增量编译模块并行编译加快单元测试 速度 单元测试并行 优化 单元测试如何找到执行时间较长的单元测试 CI 速度 慢到什么程度会无法接受 CI 速度 或者单元测试 速度 一般不会在某一次特定的提交后突然变慢,如果真的是突然变慢,一般来说可以立刻定位到这次提交,问题一般也能解决了,但是就怕没有发现变慢,或者问题不是某一次提交暴露出来的,而是慢慢堆积起来的。 根据Jenkins 构建 历史,可以看到 CI ()持续集成,CD()持续部署(也包含了持续交付的意思)。CD 指的是在我们 CI 流程通过之后,将代码自动发布到服务器的过程,这个过程也是自动化的。在 开发 人员提交代码之后,会触发 gitlab 的 CI 流水线。也就是上图的 CI PIPELINE,也就是中间的部分。在 CI 流水线中,我们可以配置多个任务。比如上图的 build、unit test、integration tests 等,也就是 构建 、单元测试、集成测试等。在 CI 流水线都通过之后,会触发 CD 流水线。 CI /CD属于DevOps,代表持续集成、持续交付/部署。 CI /CD 自动化了传统上将新代码从提交到生产(例如 构建 、测试和部署)以及基础设施配置所需的大部分或全部手动人工干预。借助 CI /CD , 开发 人员可以对代码进行更改,然后自动测试并推出以进行交付和部署。以实现停机时间最小化,代码发布 速度 更快。 浏览器访问gitlab的web页面,发现非常慢,并且很容易出现502问题。其中一个原因就是8080端口被tomcat占用,前面一篇已经更换了端口,但还是很慢。 后来搜了下,原因是gitlab占用内存太多,导致服务器崩溃。尤其是使用阿里云的服务器,最容易出现502. 默认情况下,阿里云云主机的swap功能是没有启用的,解决办法就是启动swap分区。 Swap分区 Swap分区在系统的物理内存不... 解决 方案 : 1.解决catch问题,主要是缓存了node_modules,原先是在全局中定义的,实际node_modules只在build-node这个job中使用了,只需要在这个... 默认 Git 设置 http post 的缓存为 1MB,使用命令将git的缓存设为500M,重新配置一下postBuffer值。添加:git config http.postBuffer 524288000。通过以下命令查看本机的ssh 然后复制到上图。解决方法2:直接修改config参数,项目名称 newProject。 lyonger 18 年加入网易,先后负责过多个游戏产品的运维工作,多年运维生涯。负责小游戏 CI /CD、事件处理平台 开发 、游戏 Nomad 运维模式探索、gitlab 平台维护等工作。主要关注 Linux 性能 优化 、DevOps、云原生领域。探索和分享是一趟美好的旅程。 记一次G... 针对 类似于 Maven( Java 构建 的项目(所有项目共享本地仓库),这种方法比较简单有效。 以Maven为例,在mvn 构建 容器中,直接从host或者远程块设备上mount一个目录进去作为Maven的repo... 最近接了给前端项目 构建 发布做 优化 的任务,本次 优化 分为两个部分,一个部分是Gitlab CI /CD 的发布流程 优化 ,另外一个部分是Webpack的打包 优化 。这篇文章先来讲讲Gitlab CI /CD方面的 优化 。 首先,我们先来过一遍Gitlab 执行 CI /CD 的流程,以及Gitlab CI /CD一些重要的知识点。 什么是Gitlab CI /CD CI CD 是持续集成(Continuous Integration)、持续交付(Continuous Delivery)与持续部署(Continuous Deploy