如何将 Maven 包从 Nexus 迁移到 Azure Artifacts

问题描述 投票:0回答:3

我正在尝试将构建包从我们的本地 Nexus Repository Manager 迁移到 Azure Artifacts。我发现这个Microsoft链接解释了如何使用Powershell脚本为NuGet(.NET包管理器)执行此操作,但Maven没有这样的工具。

我正在考虑使用“maven cleancompile”检索所有构建文件,然后将我的 pom.xml 文件指向 Azure Artifacts,然后以某种方式推送它们。然而,包的数量达到了100k,并且有很多应用程序使用它。所以这感觉是一种非常笨拙的方法,需要付出很大的努力,并且有很大的出错空间。

有人对我有什么建议吗?

maven migration azure-artifacts
3个回答
0
投票

事实证明我的问题主要是由于我对 Artifact repos 和项目依赖链的理解有限造成的。显然,Artifact 存储库会缓存所有上游存储库,因此这就是其中有 100k 个文件的原因。最终只有两个公司特定的依赖项需要移动。

我按照以下方式完成了迁移(适用于所有 Maven 迁移):

克隆链中最高的依赖项。 (可能包含带有公共名称或父名称的名称)

将 Azure Artifacts 配置添加到 ${USER_HOME}/.m2/settings.xml 和 pom.xml,如下所述:https://robeco.visualstudio.com/Delivery%20Integration%20Services/_packaging?_a=connect&feed=Maven-喂食

从当前存储库检索依赖项

mvn install
mvn package

创建发布版本(后面不带-SNAPSHOT)并将其推送到Azure Artifacts (否则你会得到 Can't release project due to nonreleased dependency 错误)

mvn release:clean
mvn release:prepare
mvn release:perform

现在您已经有了 robeco-common-version1.0.16 版本。现在将其部署到 Azure Artifacts

mvn deploy

您应该看到类似上传到 Maven-feed 的内容:https://robeco.pkgs.visualstudio.com/....

对所有后续公司特定的依赖项执行相同的步骤。


0
投票

我花了很长时间寻找这个问题的答案,我什至放弃了并得出结论MS不支持从其他产品迁移!

但这似乎是一个错误的问题对正确的问题的情况。 正确的问题是“如何将外部库发布到 Azure Artifacts” - 如果可以做到这一点,则可以上传任何工件。

下面的解决方案通过本地

.m2
存储库传输工件,因此您需要一个有效的开发环境(安装 Maven、签出项目等)。 我已从 Artifactory 迁移,但同样的过程也适用于 Nexus。

1。将您的 pom 连接到现有存储库管理器和 Azure Artifacts。

您的 pom 应该已经有一个条目可以从现有存储库管理器下载工件。

  • 在分发管理中添加与 Azure Artifacts 的连接。

    • 转到您的 DevOps 项目
    • 打开 Artifacts 并选择 feed
    • 单击“连接到源”按钮
    • 选择“Maven”
    • 按照说明操作: Instructions in DevOps
  • DevOps 中的说明遗漏了一个关键步骤。

    Maven 需要 Azure 的 SSL 证书才能建立 https 连接。

    按照 这些说明 从 Azure 下载

    .crt
    文件并导入到 Java 的密钥库中,以便 Maven 可以使用它。

pom 的

repositories

distributionManagement
 部分应如下所示:

<repositories> <repository> <id>artifactory</id> <url>https://my_company/artifactory/libs-release</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <distributionManagement> <repository> <id>my_project</id> <url>https://pkgs.dev.azure.com/my_company/my_project/_packaging/my_project/maven/v1</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </distributionManagement>
注意:如果存储库部分中有 Azure Artifacts 条目,则无需将其删除。我没有在这里显示它,因为迁移不需要它。

2。将工件从现有存储库管理器下载到本地 .m2/repository 文件夹。

在项目的根文件夹中运行以下命令,更改组 id 和工件 id 以匹配您的项目:

mvn dependency:get -DgroupId='com.my_company' -DartifactId='my_project' -Dversion='0.1'
您需要循环浏览所有版本号。我在文本编辑器中使用宏来生成命令列表,或者您可以使用 sh/bat 脚本。

3.将这些工件上传到 Azure Artifacts。

在项目的根文件夹中运行以下命令,更改 .m2 文件夹的路径、存储库 id、url、组 id 和工件 id 以匹配您的项目:

mvn org.apache.maven.plugins:maven-deploy-plugin:2.4:deploy-file -Dpackaging=jar -DrepositoryId='my_project' -Durl=https://pkgs.dev.azure.com/my_company/my_project/_packaging/my_project/maven/v1 -DgroupId='com.pd4ml.utilities' -DartifactId='pd4ml' -Dversion='1.0' -Dfile=C:\Users\Steve\.m2\repository\com\pd4ml\utilities\pd4ml\1.0\pd4ml-1.0.jar -DpomFile=C:\Users\Steve\.m2\repository\com\pd4ml\utilities\pd4ml\1.0\pd4ml-1.0.pom
同样,您需要循环遍历所有版本号。


完成此操作后,您将在 Azure 中的源中仅看到一个(!)工件。不要惊慌,Azure 仅显示每个工件 ID 的最新版本。

如果单击包的名称,然后导航到“版本”,您将看到此工件的所有版本。

DevOps shows a list of versions for one artifact


0
投票
我希望将所有内容按原样从我的 Nexus 存储库迁移到 azure 工件,并找到了这个 github 存储库:

https://github.com/reegan-anne/nexus_to_artifacts,正是我想要的,希望它对其他人有帮助.

© www.soinside.com 2019 - 2024. All rights reserved.