1. 概要

このシリーズの前回の記事では、MavenからNexusへのデプロイメントプロセスを設定しました。 この記事では、プロジェクトのpomとJenkinsジョブの両方でリリースプロセスをMavenで構成します。

2. pomのリポジトリ

MavenがNexusリポジトリサーバーにリリースできるようにするには、distributionManagement要素を介してリポジトリ情報を定義する必要があります。

<distributionManagement>
   <repository>
      <id>nexus-releases</id>
      <url>http://localhost:8081/nexus/content/repositories/releases</url>
   </repository>
</distributionManagement>

ホストされているリリースリポジトリはNexusですぐに使用できるため、明示的に作成する必要はありません。

3. MavenのSCMpom

リリースプロセスはプロジェクトのソース管理と相互作用します-これは、最初に定義する必要があることを意味します私たちの要素 pom.xml

<scm>
   <connection>scm:git:https://github.com/user/project.git</connection>
   <url>http://github.com/user/project</url>
   <developerConnection>scm:git:https://github.com/user/project.git</developerConnection>
</scm>

または、gitプロトコルを使用します。

<scm>
   <connection>scm:git:git@github.com:user/project.git</connection>
   <url>scm:git:git@github.com:user/project.git</url>
   <developerConnection>scm:git:git@github.com:user/project.git</developerConnection>
</scm>

4. リリースプラグイン

リリースプロセスで使用される標準のMavenプラグインは、 maven-release-pluginです。このプラグインの構成は最小限です。

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-release-plugin</artifactId>
   <version>2.4.2</version>
   <configuration>
      <tagNameFormat>v@{project.version}</tagNameFormat>
      <autoVersionSubmodules>true</autoVersionSubmodules>
      <releaseProfiles>releases</releaseProfiles>
   </configuration>
</plugin>

ここで重要なのは、 releaseProfiles 構成により、リリースプロセス中にMavenプロファイル( releases プロファイル)が実際にアクティブになることです。

nexus-staging-maven-plugin を使用して、 nexus-releasesNexusリポジトリへのデプロイを実行するのはこのプロセスです。

<profiles>
   <profile>
      <id>releases</id>
      <build>
         <plugins>
            <plugin>
               <groupId>org.sonatype.plugins</groupId>
               <artifactId>nexus-staging-maven-plugin</artifactId>
               <version>1.5.1</version>
               <executions>
                  <execution>
                     <id>default-deploy</id>
                     <phase>deploy</phase>
                     <goals>
                        <goal>deploy</goal>
                     </goals>
                  </execution>
               </executions>
               <configuration>
                  <serverId>nexus-releases</serverId>
                  <nexusUrl>http://localhost:8081/nexus/</nexusUrl>
                  <skipStaging>true</skipStaging>
               </configuration>
            </plugin>
         </plugins>
      </build>
   </profile>
</profiles>

プラグインは、展開プロセス( skipStaging = true )に対して、以前のと同じように、ステージングメカニズムなしでリリースプロセスを実行するように構成されています。

また、展開プロセスと同様に、 Nexusへのリリースはセキュリティで保護された操作であるため、Nexusからすぐに使用できる展開ユーザーフォームを再度使用します。

また、グローバル settings.xml %USER_HOME%/。m2 / settings.xml )でnexus-releasesサーバーの資格情報を構成する必要があります。

<servers>
   <server>
      <id>nexus-releases</id>
      <username>deployment</username>
      <password>the_pass_for_the_deployment_user</password>
   </server>
</servers>

これは完全な構成です

5. リリースプロセス

リリースプロセスを小さな焦点を絞ったステップに分割してみましょう。 プロジェクトの現在のバージョンがSNAPSHOTバージョン( 0.1-SNAPSHOT など)の場合、リリースを実行しています。

5.1. リリース:クリーン

リリースのクリーニングは次のようになります。

  • リリース記述子を削除します( release.properties
  • バックアップPOMファイルを削除します

5.2. リリース:準備

リリースプロセスの次の部分は、リリースの準備です。 この意志:

  • いくつかのチェックを実行します–コミットされていない変更がなく、プロジェクトがSNAPSHOTの依存関係に依存していない必要があります
  • pomファイル内のプロジェクトのバージョンを完全なリリース番号に変更します(SNAPSHOTサフィックスを削除します)–この例では– 0.1
  • プロジェクトテストスイートを実行します
  • 変更をコミットしてプッシュする
  • この非SNAPSHOTバージョンのコードからタグを作成します
  • pom内のプロジェクトのバージョンを増やします–この例では– 0.2-SNAPSHOT
  • 変更をコミットしてプッシュする

5.3. リリース:実行

リリースプロセスの後半は、リリースの実行です。 この意志:

  • SCMからのチェックアウトリリースタグ
  • リリースされたコードをビルドしてデプロイする

プロセスのこの2番目のステップは、準備ステップの出力であるrelease.propertiesに依存しています。

6. ジェンキンスについて

Jenkinsは、2つの方法のいずれかでリリースプロセスを実行できます。独自のリリースプラグインを使用するか、正しいリリースステップを実行する標準のMavenジョブでリリースを実行するだけです。

リリースプロセスに焦点を当てた既存のJenkinsプラグインは次のとおりです。

ただし、リリースを実行するためのMavenコマンドは十分に単純なので、操作を実行するための標準のJenkinsジョブを定義するだけで済みます。プラグインは必要ありません。

したがって、新しいJenkinsジョブ(maven2 / 3プロジェクトのビルド)の場合、2つの文字列パラメーター releaseVersion =0.1およびdevelopmentVersion=0.2-SNAPSHOTを定義します。

Build 構成セクションでは、次のMavenコマンドを実行するように構成するだけです。

Release:Clean release:prepare release:perform 
   -DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion}

パラメータ化されたジョブを実行すると、Jenkinsはユーザーにこれらのパラメータの値を指定するように求めます。したがって、ジョブを実行するたびに、releaseVersiondevelopmentVersionに正しい値を入力する必要があります。

また、ワークスペースクリーンアッププラグインを使用して、このビルドのビルド開始前にワークスペースを削除オプションを確認することをお勧めします。 ただし、リリースの Perform ステップは、必ず prepare ステップと同じコマンドで実行する必要があることに注意してください。これは、後者のPerformステップが実行されるためです。 prepareによって作成されたrelease.propertiesファイルを使用します。 これは、Jenkinsジョブでprepareを実行して別のジョブでperformを実行することはできないことを意味します。

7. 結論

この記事では、Jenkinsの有無にかかわらずMavenプロジェクトをリリースするのプロセスを実装する方法を示しました。 Deployment と同様に、このプロセスは nexus-staging-maven-plugin を使用してNexusと対話し、gitプロジェクトに焦点を当てています。