我有一个在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和它们的校验和都已上传。