Jenkins 使用 Deploy to Maven Repository 将工件部署到 Nexus

Jenkins Deploy Artifacts to Nexus using Deploy to Maven Repository

我们有一个场景可以将 maven 构建生成的工件部署到 Nexus。 Jenkins 的工作将 运行 个目标 clean package。如果 pom.xml 有 SNAPSHOT 版本,工件应该转到 SNAPSHOT 存储库。如果 pom.xml 有发布版本,工件应该去发布 repo。知道我们如何使用 Deploy to Maven Repository 插件实现这一点。截至目前,我在执行 Shell 中使用以下脚本。

#!/bin/bash
var1=
var2="SNAPSHOT"
if [[ $(echo "$var1"|grep -i "$var2" | wc -l | tr -d ' ') -gt 0 ]]; then
   exit 1
else
   exit 0
fi

在 Flexible Publish post 构建操作中,我正在使用 Execute Shell 条件操作。根据脚本的结果,我将执行部署到 Maven 存储库 post 构建操作。这只能帮助部署到发布 repo。任何更好的方法。

我相信这个功能是 Maven 本身内置的;您可以在 <distrobutionManagement> 块中指定不同的 <repository><snapshotRepository>。 (参见 docs

我假设如果您无法更新存储库中的 pom 文件,您有两个选择:

  1. 有一个 Maven Project plugin,它允许您添加新的 post-build 操作 Deploy artifacts to Maven repository。它允许您设置存储库 URL 和名称,以及其他一些选项。将带有 snapshot 策略的存储库设置为目标将导致成功上传快照工件。注意
    • 仅当构建类型为 Maven build (2/3)
    • 时,该步骤才可用
    • 如果您尝试上传发布工件,上传将失败并出现 Bad request 错误
  2. 如果添加插件不是一个选项,您可以使用肮脏的 hack 并通过 sed 之类的东西更改 pom 文件 on-the-fly 作为构建的第一步。这是有风险的,如果不是绝对不可避免,则不应使用。

要一次更新所有构建,我建议使用一些插件(Configuration Slicing plugin 作为一个选项)或直接通过 CLI 脚本更改 config.xml 文件,然后使用 "Reload configuration"在詹金斯。