当前位置: 首页 > 面试题库 >

您如何将特定的工件从Jenkins部署到Nexus?

周弘毅
2023-03-14
问题内容

我有一个在Jenkins中运行的多模块Maven项目。我想将最终的工件(程序集构建中的RPM)部署到Nexus服务器。我认为没有理由部署中间工件(因此没有“
mvn clean
deploy”),因为这会在服务器上产生我不需要的额外垃圾。我们正在尝试建立一个持续交付管道,因此我们从未部署过SNAPSHOT版本。Jenkins的各种插件似乎都专注于部署所有工件。我该如何部署自己选择的那个?

编辑:

经过深思熟虑,如果在所有构建完成之后进行部署,我愿意将所有工件部署到联系。如果我要走那条路线,我想在构建后使用“将工件部署到Maven存储库”。不过,此工具似乎已损坏,因为它缺少指定用户名/密码的功能。我知道可以在settings.xml中指定它,但显然只有“
.m2”中的一个。它似乎并没有查看我为此构建指定的settings.xml。

重新部署工件似乎也坏了。在《
Jenkins权威指南》中有一些用语,但这是关于“本地”
settings.xml的。我所有的构建都在Jenkins从属服务器上进行,因此这不是一个选择,甚至对于Jenkins架构也没有任何意义。


问题答案:

这是我想出的丑陋的骇客。如果有人有更好的主意,我会很乐意为其他人提供“正确”的答案:

我意识到我需要同时部署父pom.xml和程序集。我在两个单独的后期构建步骤中进行了此操作。

首先,我选择了带有“
Maven”的Maven版本的“调用顶级Maven目标”(我认为这使用的是Jenkins版本的maven。我不想在系统上放置其他版本)。我使用了以下目标:

-s svn-admin/settings.xml -N deploy

这将使用我指定的settings.xml将父pom部署到nexus。

当我想部署rpm时,确实发生了很大的变化。我尝试了“部署文件”目标,但是如果没有变量,我可以扩展到版本号,我无法指定确切的文件,而通配符也不会扩展。相反,我做了一个“
Execute shell”选项,并使用了在这里找到的curl :

env
UPLOAD_FILE=assembly/target/ips-${POM_VERSION}-x.x86_64.rpm
DESTINATION=http://mvnrepo01/nexus/content/repositories/releases/com/bla/ips/assembly/${POM_VERSION}/assembly-${POM_VERSION}.rpm
sha1sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.sha1
md5sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.md5
curl -v -u admin:password --upload-file ${UPLOAD_FILE} ${DESTINATION}

UPLOAD_FILE=assembly/pom.xml
DESTINATION=http://mvnrepo01/nexus/content/repositories/releases/com/bla/ips/assembly/${POM_VERSION}/assembly-${POM_VERSION}.pom
sha1sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.sha1
md5sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.md5
curl -v -u admin:password --upload-file ${UPLOAD_FILE} ${DESTINATION}

就像我说的,这是一个丑陋的骇客。我很确定有些元数据文件没有更新,但是rpm,pom和它们的校验和都已上传。



 类似资料:
  • 我正在使用以下配置文件为开发、测试和生产环境创建3个工件(war): 为了从Jenkins执行此操作,我使用Jenkins插件“调用顶级Maven目标”。 一旦创建了所有war,我想将它们部署到Artifactory! 我谷歌了很多,但没有找到任何关于只是部署我的工件到Artifactory。 注意:我可以使用“clean deploy-P dev”构建和部署我的工件,但在这种情况下,我无法修改工

  • 我的名为“TestProject”的Java/Maven项目与我的jenkins and nexus repo挂钩: 我的pom.xml看起来是: 正如预期的那样,jenkins将工件上传到Nexus,看看jenkins build的控制台输出,如下所示: 问题是: 如果我在pom.xml中指定的版本是

  • 我正准备建立一个詹金斯管道。第一阶段完成,代码编译、测试、检查并部署到Nexus。 现在,我想在管道上做一个第二阶段,在这里,战争从Nexus检查出来,并部署在Tomcat上。 实际上,我已经集成了maven-tomcat插件来部署在Tomcat上。我的问题是我怎样才能查看战争的最新构建? 帕特里克

  • 问题内容: 我的java / maven项目“ testproject”与我的jenkins和nexus回购挂钩: 我的pom.xml看起来像: 在我的詹金斯设置中,我有: 正如预期的那样,jenkins将工件上传到Nexus。查看jenkins build的控制台输出,如下所示: 问题是 : 鉴于我在pom.xml中指定的版本是 jenkins为何将testproject- 0.1-201205

  • 我有一个定制的Nexus,用于与项目相关的实用程序jar。我有一个詹金斯来做这些罐子。 我想在项目中使用gradle和Jenkins文件来定义管道。作为最后一个阶段,我希望构建工作将工件部署到我的Nexus。 由于我不希望Nexus的凭据出现在我的源存储库中(因此gradle脚本和Jenkins文件中都不需要),我在Jenkins凭据插件中设置了一个凭据条目,其中包含Nexus的用户和密码。 如何