我想获得Jenkins部署的工件版本

我将maven deploy作为一个步骤运行(使用maven构build步骤),并使用时间戳部署工件。

我现在要创build一个具有已部署工件的泊坞窗图像,并且使用工件时间戳标记泊坞窗图像。 这是一个非常普遍的情况,即docker镜像的标签必须与artifact包含的镜像相同。

我已经阅读了几个post

  1. Jenkins maven将jar部署到nexus – 工件命名
  2. jenkins – 我如何将参数从上游传递到下游
  3. Sonatype Nexus REST Api获取最新版本

其中[3]给我的服务器的快照版本列表在一个XML中,这是必须parsing。

  • 由于我在jenkins作业中推送了工件,是否有可能在构build中知道完整的工件名称,而不是从服务器获取它。

  • 是否有API /任何其他方式,它可以给出最新的工件,而不是工件XML的名称

所有文件中的-SNAPSHOT部分(附加在Maven部署“任务”上)将被deploy:deploy阶段中的时间戳版本replace。

1)创buildDocker镜像文件

使用docker-maven-plugin (通过https://github.com/spotify/docker-maven-plugin上的spotify提供)扩展工件POM。

[…]

您还可以将构build目标绑定到包阶段,因此只在运行mvn包时将构build容器。

[…]

 <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.2.11</version> <executions> <execution> <phase>package</phase> <goals> <goal>build</goal> </goals> <configuration> <imageName>${project.build.finalName}</imageName> <baseImage>java</baseImage> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <!-- copy the service's jar file from target into the root directory of the image --> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </execution> </executions> </plugin> 

Docker镜像名称将在<imageName />定义,并使用工件文件名称( ${project.build.finalName} )。

imageName:build立的图像将被赋予这个名字。

有关build目标的更多信息: mvn com.spotify:docker-maven-plugin:help -Ddetail=true -Dgoal=buildhttps://github.com/spotify/docker-maven-plugin

2)在Maven部署任务上附加Docker镜像文件

附加 – 如果docker-maven-plugin没有为你做 – Docker镜像文件和build-helper-maven-pluginhttp://www.mojohaus.org/build-helper-maven-plugin/usage&#x3002; html )。

  <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.9.1</version> <executions> <execution> <id>attach-artifacts</id> <phase>package</phase> <goals> <goal>attach-artifact</goal> </goals> <configuration> <artifacts> <artifact> <file>${project.build.finalName}</file> <type>...</type> <classifier>docker</classifier> </artifact> ... </artifacts> </configuration> </execution> </executions> </plugin> 

在这些步骤之后,工件文件本身和Docker镜像工件被部署到具有相同版本string的Maven仓库中。

在基于Maven的Jenkins Jobs中,导出了环境variablesPOM_GROUPIDPOM_ARTIFACTIDPOM_VERSION

通过${ENV,var="POM_VERSION"} (或类似的)获取这个variables

用上面的信息构build你喜欢的标签名称。

请参阅: https : //blog.codecentric.de/en/2014/07/accessing-maven-project-properties-jenkins-build-jobs/

Jenkins将一般的maven项目属性公开为环境variables。 corse只能在maven构build作业中使用,而不能在执行maven目标的自由式作业中使用。

[…]

下表显示了maven项目属性如何映射到Jenkins环境variables的完整列表:

maven项目属性 – Jenkins环境variables

project.displayName – POM_DISPLAYNAME

project.version – POM_VERSION

project.groupId – POM_GROUPID

project.artifactId – POM_ARTIFACTID

project.packaging – POM_PACKAGING

project.relativePath – POM_RELATIVEPATH

Interesting Posts