我想获得Jenkins部署的工件版本
我将maven deploy作为一个步骤运行(使用maven构build步骤),并使用时间戳部署工件。
我现在要创build一个具有已部署工件的泊坞窗图像,并且使用工件时间戳标记泊坞窗图像。 这是一个非常普遍的情况,即docker镜像的标签必须与artifact包含的镜像相同。
我已经阅读了几个post
- Jenkins maven将jar部署到nexus – 工件命名
- jenkins – 我如何将参数从上游传递到下游
- 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=build
或https://github.com/spotify/docker-maven-plugin
2)在Maven部署任务上附加Docker镜像文件
附加 – 如果docker-maven-plugin
没有为你做 – Docker镜像文件和build-helper-maven-plugin
( http://www.mojohaus.org/build-helper-maven-plugin/usage。 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_GROUPID
, POM_ARTIFACTID
和POM_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