java - Jenkins - 使用通配符执行 shell 命令

标签 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-*.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')

如果是多个文件,就复杂一点:

ma​​ven deploy-file 参数 files, classifierstypes 用于部署多个相同 (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 部署文件

您还可以考虑一些替代方案:

  1. (取决于 Artifact 的数量以及新 Artifact 出现的频率)- 手动将这些 Artifact 上传到 Nexus

  2. 让您的 Nexus 代理另一个 Nexus 存储库 来提供这些 Artifact 。

关于java - Jenkins - 使用通配符执行 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661995/

相关文章:

Java - 将 xml 文件从 ISO-8859-2 转换为 UTF-8

java - 从java读取文件系统结构

Maven 无法从具有多个接口(interface)的类中加载 JUnit 类别的组?

maven - 如何在 vimscript 中遍历目录结构并启动 mvn build?

java - 将java项目部署到谷歌计算引擎

java代码和unix守护进程

java - 无法解析 android Activity 中的方法 setHasOptionsMenu

bash - grep 排除文件名模式

linux - 如何检查命令是否匹配输出

缺少 JBoss 作为客户端 5.1.0.GA 存储库