3

ステップとして (maven ビルドステップを使用して) maven deploy を実行すると、アーティファクトがタイムスタンプ付きでデプロイされます。

アーティファクトがデプロイされたドッカー イメージを作成したいと考えています。ドッカー イメージにはアーティファクトのタイムスタンプがタグ付けされています。Docker イメージのタグがアーティファクトに含まれているものと同じでなければならないという非常に一般的なシナリオです。

私はすでにいくつかの投稿を読みました

  1. Jenkins maven jar を nexus にデプロイする - アーティファクトの命名
  2. Jenkins - アップストリームからダウンストリームにパラメータを渡すにはどうすればよいですか
  3. Sonatype Nexus REST Api フェッチ最新ビルド バージョン

[3] は、解析する必要がある、サーバーからのスナップショット バージョンのリストを xml で提供します。

  • jenkins ジョブでアーティファクトをプッシュしているので、サーバーから取得する代わりに、ビルドで完全なアーティファクト名を知ることは可能ですか。

  • アーティファクトXMLの代わりに最新のアーティファクトの名前を付けることができるAPI/その他の方法はありますか

4

2 に答える 2

2

Maven ベースの Jenkins ジョブでは、環境変数POM_GROUPIDPOM_ARTIFACTIDおよびPOM_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

于 2015-06-29T14:38:49.553 に答える
1

すべてのファイルの-SNAPSHOT一部 (Maven デプロイメント「タスク」に添付) は、deploy:deployフェーズでタイムスタンプ付きのバージョンに置き換えられます。

1) Docker イメージ ファイルの作成

( https://github.com/spotify/docker-maven-plugindocker-maven-pluginで spotify によって提供される)を使用してアーティファクト POM を拡張します。

[...]

ビルド ゴールをパッケージ フェーズにバインドすることもできるため、mvn パッケージだけを実行するとコンテナーがビルドされます。

[...]

<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=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 イメージ アーティファクトが、同一のバージョン文字列で Maven リポジトリにデプロイされます。

于 2015-06-30T21:05:04.423 に答える