我试图让 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 尝试执行该命令时,它会按字面意思使用通配符。我真的不确定如何解决这个问题,如果您能提供任何帮助,我将不胜感激。谢谢!
最佳答案
如果它是一个简单的单个 .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 参数 files, classifiers 和 types 用于部署多个相同 (groupId, artifactId, version) 下的 Artifact - 例如 .jar 和 -sources.jar
即使对于那个用例,语法也有些违反直觉 - 您必须对第一个 Artifact 使用file=file1.jar,然后是files=file1 -sources.jar,file1-test-sources.zip,.. 用于rest,同时使用classifier/classifiers(和packaging/types ) 以相同的方式(位置)指定您上传的每个 Artifact 的分类器/类型。
如果您的用例是上传不同版本的 Artifact ,您将需要为每个版本调用一次 maven 部署文件。
您还可以考虑一些替代方案:
(取决于 Artifact 的数量以及新 Artifact 出现的频率)- 手动将这些 Artifact 上传到 Nexus
让您的 Nexus 代理另一个 Nexus 存储库 来提供这些 Artifact 。
关于java - Jenkins - 使用通配符执行 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661995/