处理本地存储库中的旧快照的最佳方法?

时间:2012-03-15 22:23:32

标签: maven build repository jenkins snapshot

我们有一个Nexus本地存储库管理器,它可以处理我们所有的内部项目(以及镜像外部存储库)。对于我们的内部项目,我们只保留最新版本的快照构建。例如,如果我们有ProjectX 1.0,1.1和1.2-SNAPSHOT,一旦1.2发布,我们将删除1.2-SNAPSHOT,然后在我们的Nexus存储库中有1.0,1.1,1.2和1.3-SNAPSHOT。

问题是我们的Jenkins服务器在其本地.m2 / repository文件夹中具有所有OLD快照,并继续针对这些旧快照成功构建项目,而实际上它们应该失败(我们的开发人员应该修复它们的POM文件。)

是否可以配置Maven(在settings.xml或pom.xml中)删除Nexus存储库中不存在的这些不需要的快照?

如果没有,摆脱它们的最佳方法是什么? Jenkins配置,cron作业,其他选项?

...谢谢

5 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

在Linux上,您可以使用以下命令:

*-SNAPSHOT

说明:

  • 在文件夹$HOME/.m2/repository/
  • 中查找名为-exec的内容
  • 它必须是目录
  • 并且必须在过去60天内修改
  • 打印您找到的内容。如果要测试命令,请在此处停止
  • -prune将删除该文件夹,-exec告诉发现以后不要尝试输入该文件夹。
  • //in another class called URL-Service.ts you will need to add this //to providers at the root level in app.module export class URLService { public savedURL: string = ''; } //in another class where you have access to the url export class SomeClass { constructor(private urlService = URLService){} someMethod(){ this.urlService.savedURL = whateverHasTheURL; } } export class DataService { constructor (private urlService = URLService, private http: Http) { this.url = this.urlService.savedURL; } ... } 将删除里面的文件夹和文件。

答案 2 :(得分:0)

我们在这里使用类似的设置。我们让nexus在工件发布后自动删除快照(对于某些存储库)。然后在我们的连续服务器上,我们只有一个cron作业,每天删除一次本地存储库文件夹。这对我们很有用。

答案 3 :(得分:0)

首先,如果您使用jenkins构建最佳实践以获得干净的构建,这意味着每个构建使用本地存储库而不是服务器的全局。此外,听起来你没有使用发布插件来释放你的工件,它会自动检查pom是否包含SNAPSHOTs,如果有的话会失败。此外,可以通过maven-dependency-plugin清理本地存储库。根据我的经验,我简单地配置了一个任务,删除超过一个月的SNAPSHOT ......

答案 4 :(得分:-3)

这可能是jenkins服务器上maven的配置问题。

通过在<updatePolicy>部分中为<repository>配置<snapshots>的值,

maven可以而且应configured定期查找更新的快照。

<updatePolicy>daily</updatePolicy>

选项包括:alwaysdaily(默认),interval:X(其中X是以分钟为单位的整数)或never

此外,如果版本发生更改(从1.1-SNAPSHOT更改为1.2-SNAPSHOT),则不清楚jenkins如何使用较早的(1.1-SNAPSHOT版本成功构建。