繁体   English   中英

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

[英]I want to get the artifact version deployed by Jenkins

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

我现在想创建一个 docker 映像,其中包含已部署的工件,并且该 docker 映像带有工件时间戳标记。 这是一个非常常见的场景,其中 docker 镜像的标签必须与包含的工件相同。

我已经阅读了几个帖子

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

其中 [3] 以 xml 形式为我提供了来自服务器的快照版本列表,必须对其进行解析。

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

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

在基于 Maven 的 Jenkins Jobs 中,环境变量POM_GROUPIDPOM_ARTIFACTIDPOM_VERSION被导出。

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

使用上述信息构建您想要的标签名称。

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

Jenkins 将一般 Maven 项目属性公开为环境变量。 当然,这仅适用于 Maven 构建作业,但不适用于执行 Maven 目标的自由式作业。

[...]

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

maven 项目属性 - Jenkins 环境变量

project.displayName - POM_DISPLAYNAME

project.version - POM_VERSION

project.groupId - POM_GROUPID

project.artifactId - POM_ARTIFACTID

project.packaging - POM_PACKAGING

project.relativePath - POM_RELATIVEPATH

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

1)创建Docker镜像文件

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

[...]

您还可以将构建目标绑定到 package 阶段,这样当您只运行 mvn package 时就会构建容器。

[...]

<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目标的更多信息: mvn com.spotify:docker-maven-plugin:help -Ddetail=true -Dgoal=buildhttps://github.com/spotify/docker-maven-plugin

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

附加 - 如果docker-maven-plugin不适合你 - 带有build-helper-maven-plugin ( http://www.mojohaus.org/build-helper-maven-plugin/usage.js )的 Docker 镜像文件。 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 映像工件将部署到具有相同版本字符串的 Maven 存储库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM