带有子项目的 Jenkins Artifactory 插件文件规范

Jenkins Artifactory Plugin File Specs with subprojects

我正在使用 Jenkins 和 Artifactory plugin 来发布工件。

我使用 Java 和 Gradle 构建应用程序。按照惯例,工件位于 build/libs/ 文件夹中。如果我有多模块项目,则可以使用指定的文件规范进行发布。

root
|--proj1
|--proj2
|--...

文件规范模式看起来像(注意 com.rivancic 是 Artifactory 存储库的组):

"files": [
  {
    "target": "test-repo/com/rivancic/{1}/1.0.0/{2}-1.0.0{3}",
    "pattern": "/home-dir/com/rivancic/(*)/build/libs/(*)-1.0.0(*)"
  }
]

此处第一个通配符被解析为 proj1proj2,工件被上传到特定模块。

问题

我遇到的问题是将多模块项目与 嵌套项目.

一起使用时
root
|--proj1
   |--subproj11
   |--subproj12
|--proj2
|--...

现在,第一个子项目 11 使用相同的模式,第一个通配符被解析为 proj1/subproj11,而不仅仅是 subproj11。这解析为无效的工件模块名称并且 Artifactory 抛出异常

java.lang.RuntimeException: java.io.IOException: Failed to deploy file. Status code: 409 Response message: Artifactory returned the following errors: 
The target deployment path 'com/rivancic/project1/subproject11/1.0.0/subproject11-1.0.0.pom' does not match the POM's expected path prefix 'com/rivancic/subproject11/1.0.0'. Please verify your POM content for correctness and make sure the source path is a valid Maven repository root path. Status code: 409

有没有一种方法可以在 File Specs 中定义一个模式,它总是只采用路径的最后一部分,即最终的子项目,而不是上述结构的整个路径

您可以使用 2 个不同的文件规范或 2 个不同的文件规范组:一个用于多模块,另一个用于多项目。

对于多项目,使用以下示例:

"files": [
  {
    "target": "test-repo/com/rivancic/{1}/1.0.0/{2}-1.0.0{3}",
    "pattern": "/home-dir/com/rivancic/*/(*)/build/libs/(*)-1.0.0(*)"
  }
]

解释 - 在规范的 /*/(*) 部分,第一个星号被解析为常规通配符,括号中的星号用作 Placeholder.

有关文件规范的更多信息,请参见 Using File Specs