Java Jenkins-使用通配符执行shell命令
我试图让Jenkins执行shell命令,但仍然允许使用通配符。以下是我试图做的参考:Java Jenkins-使用通配符执行shell命令,java,shell,maven,jenkins,Java,Shell,Maven,Jenkins,我试图让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
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试图执行该命令时,它会按照字面意思使用通配符。我真的不知道如何解决这个问题,如果你能提供帮助,我将不胜感激。谢谢大家! 如果您的意思是希望直接传递
*
,只需使用单引号,以避免shell应用globbing:
mvn deploy:deploy-file [...] '-Dfile=Spigot/Spigot-Server/target/spigot-*.jar'
如果您试图部署多个文件,我认为问题不在于使用Jenkins或bash命令,而在于使用 文件状态 及 如果要部署额外的工件,请使用 因此,如果您通过使用附加的
文件
,类型
,分类
参数来指定要显式部署的额外文件,则会更好,例如:
... -Dfile=Spigot/Spigot-Server/target/main-spigot.jar \
-Dfiles=$(ls -1d Spigot/Spigot-Server/target/spigot-*.jar | paste -sd ,) -Dtypes=... -Dclassifiers=...
如果是一个简单的.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部署文件调用
你也可以考虑一些备选方案:
事实上,我想要的是相反的。这不是问题所在。@mattrick:啊。这可能是值得澄清的。你可能需要在多个命令中这样做……不确定。@JonSkeet,FWIW,post确实声明“它从字面上理解通配符”:-)有趣的是,如果命令在Jenkins之外的bash中运行,除非遵循您的报价建议,否则shell确实会在执行命令之前尝试glob。不知道为什么詹金斯的外壳不遵循同样的行为。@tony19:我当然被描述搞糊涂了,所以我怀疑其他人也可能是这样。无论如何,当我可以的时候,我会删除我的答案。非常感谢!作为记录,我只尝试部署一个文件。
... -Dfile=Spigot/Spigot-Server/target/main-spigot.jar \
-Dfiles=$(ls -1d Spigot/Spigot-Server/target/spigot-*.jar | paste -sd ,) -Dtypes=... -Dclassifiers=...
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')