背景介绍
在使用Jenkins从源码开始构建时,由于需要从远程仓库拉取依赖导致Jenkins构建速度较慢,需要优化Jenkins构建速度。借助Job Cacher能力,将依赖存储到对象存储中,再次部署时直接从对象存储拉取依赖,加速Jenkins构建速度。
Job Cacher插件介绍
Job Cacher插件是一个作业缓存插件,能够为依赖项和构建制品提供缓存,能够减少构建时长。Job Cacher支持本地、S3以及AWS S3三种存储方式,并提供jenkins.plugins.itemstorage.ItemStorage和jenkins.plugins.jobcacher.Cache两个扩展点让用户按需添加自定义缓存和缓存存储方式。安装Job Cacher插件后,可以在jenkins的pipeline和free style的job中使用该插件能力,同时支持自定义缓存缓存大小以使缓存不会无限制增长。
JobCacher缓存参数说明
参数 | 是否必须 | 说明 |
maxCacheSize | 否 | 允许的最大缓存,单位MB。该参数可以防止缓存无限期增长,设置为零或为空可跳过检查缓存大小。 |
skipSave | 否 | 如果设置为 true,则不保存缓存;默认为false。 |
skipRestore | 否 | 如果设置为 true,则跳过还原缓存;默认为false。 |
defaultBranch | 否 | 如果当前分支没有缓存,它将从指定的分支设定其缓存。不设置可为每个分支生成新的缓存。该选项可用于微调缓存有效性。 |
caches | 是 | 定义要使用的缓存。仅支持ArbitraryFileCache,相关参数如下: |
ArbitraryFileCache参数说明:
参数 | 是否必须 | 说明 |
path | 是 | 缓存路径。可以是绝对路径或相对工作空间的相对路劲。 |
cacheName | 否 | 缓存名称。通过该名称确保缓存的唯一性。 |
includes | 否 | 用于匹配应包含在缓存中的文件。 |
excludes | 否 | 用于匹配应从缓存中排除的文件。 |
useDefaultExcludes | 否 | 是否使用默认排除项,默认为true |
cacheValidityDecidingFile | 否 | 一个或多个文件的工作区相对路径,应用于确定缓存是否为最新。只会恢复最新的缓存,并且只会创建过时的缓存。 |
compressionMethod | 是 | 要使用的压缩方法。支持ZIP、TARGZ、TARGZ_BEST_SPEED、TAR_ZSTD、TAR压缩方法,默认为TARGZ。 |
使用Job Cacher插件
在Jenkins上使用Job Cacher插件需要现在Jenkins的插件中心安装该插件,并在Jenkins的全局配置中配置该插件使用的存储方式,然后在Jenkins的pipeline或free style的任务中使用,具体如下:
安装Job Cacher插件
在Jenkins的插件管理页面,选择Job Cacher插件并安装。
配置Job Cacher插件
安装Job Cacher插件后,需要配置Job Cacher插件。以使用S3对象存储为例说明:
在pipeline中使用
安装并配置好Job Cacher插件后,可以在pipeline中使用该插件,使用方法如下:
cache(maxCacheSize: 250, defaultBranch: 'develop', caches: [
arbitraryFileCache(path: 'node_modules', cacheValidityDecidingFile: 'package-lock.json')
]) {
// ...
}
使用效果
两个图片,第一个是首次使用该插件的情况,第二张是再次使用该插件时的情况。两张图片对比可以清楚看到,第一次构建的时候因为没有从S3对象存储找到对应的缓存需要拉取源码依赖,再次构建的时候直接从S3对象存储拉取缓存,大大加速Jenkins构建速度。
后续展望
在实际使用过程中,同租户下的应用存在相同依赖的情况,如果让Jenkins的每个任务独享一个缓存,存在缓存空间占据过大的情况,因此需要在该插件的基础上修改,增加参数,让用户按照自己的需求自己定义是否共用同一个缓存。在实际应用中,我们子啊该插件的基础上增加preCachePath参数,实现相同租户下的任务共享同一S3缓存,节省对象存储空间的同时由于缓存最终达到一致,将是否使用缓存归结于租户自定义能力,满足实际使用场景。