Nexus配置定时任务清理空间和解决因清除策略导致maven-metadata.xml丢失问题

Nexus 是Maven 仓库管理器,管理开发所需要的构件。如果每次都是从 Apache 提供的 Maven中央仓库去下载所需要的构件,那么这通常不是一个好的做法。应该在本地架设一个Maven仓库服务器,再代理远程仓库的同时维护本地仓库,以节省带宽和时间,那么Nexus可以满足这样的需求。

我们可使用Nexus作为开发私服来存储Java的Jar包、NodeJS的npm包、Docker镜像等开发构件。日常做自动化CICD集成时,每次构建会产生大量的Java Snapshots包上传到Nexus私服,总有一天会出现Nexus服务器磁盘空间告警。

通过配置Nexus清理策略可定时删除Snapshots包,以此来释放Nexus Blob存储空间,具体流程如下:

1. 配置Maven - Delete SNAPSHOT 快照删除定时任务

在server administration and configuration配置中,打开System下的Tasks

点击Create Task按钮,创建一个新任务

选择“Maven - Delete SNAPSHOT”创建快照删除任务

我们可以设置快照最小保留数量和最长保留天数来控制快照的数量。同时设置两个属性时,当快照超过我们设置的最长保留天数后,仍会按最小保留数量值保留最小的快照数量。

如上图所示,我们设置了快照最小保留数量为3,最长保留天数为7,当超过7天的快照有5个时,执行这个任务将删除多余的快照,只保留3个。

当超过7天的快照只有2个时,执行这个任务,也会保留这2个快照。

设置好快照保留任务后,需要选择这个任务的执行方式。可选择手动执行、执行一次,按小时、天、周、月等固定一个时间定时执行。

比如如下图所示,设置了每周六凌晨0点执行一次清理任务

点击保存后生效。

2. 配置Admin - Compact blob store 存储压缩任务

配置了快照删除任务后,Nexus删除快照后,并不会释放blob存储文件,还需要配置blob压缩任务才能释放空间。

点击Create Task按钮,创建一个新任务。选择“Admin - Compact blob store”创建blob压缩任务

选择要压缩的Blob Store,并设置任务运行方式

3. 配置Repair - Rebuild Maven repository metadata 重新构建任务

Nexus做了上述两个步骤清理空间后,清除策略会导致部分maven包的maven-metadata.xml丢失,引发部分maven包下载报错。这时,我们需要对maven-metadata进行修复。

通过配置Repair - Rebuild Maven repository metadata,在每次进行空间压缩后进行metadata的重新构建。

点击Create Task按钮,创建一个新任务。选择“Repair - Rebuild Maven repository metadata”创建重构任务

我们可以对全局 repository 重构metadata,也可以指定构建的GroupId和ArtifactID进行重新构建。

通过上述操作,可解决因使用清除策略后,导致maven-metadata.xml丢失的问题。