【问题标题】:Delete and/or Replace Artifacts in Nexus using Gradle使用 Gradle 删除和/或替换 Nexus 中的工件
【发布时间】:2014-10-31 04:07:08
【问题描述】:

我还是 Gradle 和 Nexus 的新手。

我希望能够使用 Gradle 从托管的 nexus 存储库中删除工件。使用 nexus GUI 来执行此操作不是一种选择,因为我不想。

希望这样做的部分原因是能够自动更正上传错误,例如错误标记的工件,或使用错误版本上传的工件。我也可能只是想清除整个项目及其所有版本(可能是因为它上传到了错误的仓库,或者我只是在做一些房屋清洁工作。或者我想覆盖当前上传的版本一个神器。无论如何,我现在没有真正的用例,但我仍然想知道如何去做。

编辑:另外,我很好奇在某个工件版本已经上传时如何“优雅地”处理时间,例如捕获特定异常并输出用户友好消息以建议开发人员在之前更新构建版本正在上传。

这是我当前的 uploadArtifact 任务。

uploadArchives {
    repositories {
        flatDir {
            dirs 'repos'
        }
        mavenDeployer {
            credentials {
                username "user"
                password "password"
            }
            url "http://localhost:8081/nexus/content/repositories/releases/"
        }
    }
}

【问题讨论】:

  • 您必须使用 Groovy(Gradle 中的一等公民)在 Nexus 中执行任何操作。与 Nexus 类似,我们有 Artifactory,我使用 REST API 方法从 Artifactory 存储库中删除工件。你可以稍微调整一下代码来为 Nexus 做同样的事情。见这里:stackoverflow.com/questions/18861950/… 我的脚本也使用 REST API 从 Jenkins 中删除一些旧版本(REST API 方式),但你可以忽略那部分

标签: gradle nexus


【解决方案1】:

Gradle 中没有内置任何东西来管理 Nexus 存储库。除非您为此找到第三方 Gradle 插件,否则您必须开发自己的解决方案。例如,您可以编写一个或多个使用 Nexus 的 REST API 的 Gradle 任务来完成您想要的。

PS:Maven 存储库被设计为不可变的,在发布后更改任何数据或元数据通常是不受欢迎的。 (而是应该发布一个新版本来解决问题。)为了使这样的更改生效,每个开发人员和 CI 机器必须使用--refresh-dependencies 运行所有受影响的构建,以使本地缓存(或清除整个缓存)。这可能会导致很多痛苦。

【讨论】:

  • 我同意。 REST API 方式。我给了他一个小例子(我使用 Artifactory 做了同样的事情)。
  • 你让我确信永远不会删除提交。在尝试上传已经存在的版本时,您对如何优雅地处理错误有什么建议吗?我认为默认的异常消息不是很干净。
猜你喜欢
  • 2015-10-31
  • 2014-11-28
  • 2022-09-30
  • 1970-01-01
  • 2015-03-03
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多