后端项目构建速度优化思路、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