我试图让Jenkins执行shell命令,但仍然允许使用通配符。以下是我试图参考的内容:
mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=snapshots -Durl=http://nexus.example.net/content/repositories/snapshots -DpomFile=Spigot/Spigot-Server/pom.xml -Dfile=Spigot/Spigot-Server/target/spigot-*.jar
我需要能够通过上面的命令部署这个jar,因为该项目的git存储库不是由我拥有或操作的,所以我需要能够将它直接部署到我自己的Nexus实例。为了确保它将支持编译jar的所有可能版本,我必须使用外卡。不幸的是,当Jenkins尝试执行命令时,它会逐字地采用通配符。我真的不确定如何解决这个问题,我将不胜感激。谢谢!
答案 0 :(得分:2)
如果它是一个简单的单个.jar文件,请尝试:
mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=snapshots -Durl=http://nexus.example.net/content/repositories/snapshots -DpomFile=Spigot/Spigot-Server/pom.xml -Dfile=$(find Spigot/Spigot-Server/target/ -name 'spigot-*.jar')
如果它是多个文件,那就有点复杂了:
当您要部署多个 maven deploy-file 参数文件,分类器和类型时相同 (groupId,artifactId,version)下的工件 - 例如 .jar 和 -sources.jar
即使对于该用例,语法也有些违反直觉 - 您必须使用 file = file1.jar 作为第一个工件,然后 files = file1 -sources.jar,file1-test-sources.zip,.. 用于休息,同时使用分类器/分类器(以及包装/类型)以相同的方式(位置)指定要上传的每个工件的分类器/类型。
如果您的用例上传不同版本的工件,则需要为每个版本执行一个maven部署文件调用。
你也可以考虑一些替代方案:
(取决于有多少工件,以及新工具的出现频率) - 手动上传这些工件到Nexus
让Nexus 代理另一个提供这些工件的Nexus存储库。
答案 1 :(得分:1)
如果你的意思是你只想直接传递*
,只需使用单引号来避免shell应用globbing:
mvn deploy:deploy-file [...] '-Dfile=Spigot/Spigot-Server/target/spigot-*.jar'
答案 2 :(得分:0)
如果您尝试部署多个文件,我认为使用Jenkins或bash命令时问题不,但使用Maven Deploy Plugin。
文档说明
file File - File to be deployed. User property is: file.
和 如果要部署额外的工件,请使用
files String - A comma separated list of files for each of the extra side artifacts to deploy. If there is a mis-match in the number of entries in types or classifiers, then an error will be raised. User property is: files.
因此,如果您指定额外文件以使用其他files
,types
,classifies
参数明确部署,那将会更好,例如:/ p>
... -Dfile=Spigot/Spigot-Server/target/main-spigot.jar \
-Dfiles=$(ls -1d Spigot/Spigot-Server/target/spigot-*.jar | paste -sd ,) -Dtypes=... -Dclassifiers=...