web-dev-qa-db-ja.com

単一のJenkinsジョブ用の複数のMavenプロファイルの作成

1つのJenkinsジョブで複数のMavenプロファイルを作成しようとしています。各プロファイルはいくつかのコードを変更し、コマンドラインでmvn -Pdev install、次にmvn -Pprod installを実行してjarを作成します(mvn -Pdev,prod installを使用するMavenによると、機能するはずですが、私には機能しません)。 。これが私のプロジェクトのpom.xmlの2つのプロファイルです。

<profiles>   
 <!-- prod profile -->
   <profile>
    <id>prod</id>
     <build>
      <plugins> 

          <plugin>
                <groupId>com.google.code.maven-replacer-plugin</groupId>
                <artifactId>replacer</artifactId>
                <version>1.5.2</version>

                <executions>
                    <execution>                    
                        <phase>process-resources</phase>
                        <goals>
                            <goal>replace</goal>
                        </goals>
                    </execution>
                </executions>

                <configuration>

                         <file>src/main/Java/com/IQzone/Android/configuration/AbstractHoldingRefreshable.Java</file>
                    <replacements>
                        <replacement>
                            <token>TrUe</token>
                            <value>TOAST_SWITCH</value>
                        </replacement>
                    </replacements>

                </configuration>

            </plugin>

         <plugin>
           <artifactId>maven-jar-plugin</artifactId>
           <executions>
             <execution>
               <phase>package</phase>
               <goals>
                 <goal>jar</goal>
               </goals>
               <configuration>
                 <classifier>prod</classifier>
               </configuration>
             </execution>
           </executions>
         </plugin>
       </plugins>
     </build>
   </profile>


 <!-- dev profile -->
   <profile>
     <id>dev</id>
     <build>
        <plugins>

            <plugin>
                <groupId>com.google.code.maven-replacer-plugin</groupId>
                <artifactId>replacer</artifactId>
                <version>1.5.2</version>

                <executions>
                    <execution>                    
                        <phase>process-resources</phase>
                        <goals>
                            <goal>replace</goal>
                        </goals>
                    </execution>
                </executions>

                <configuration>

                    <file>src/main/Java/com/IQzone/Android/configuration/AbstractHoldingRefreshable.Java</file>
                    <replacements>
                        <replacement>
                            <token>TOAST_SWITCH</token>
                            <value>TrUe</value>
                        </replacement>
                    </replacements>

                </configuration>

            </plugin>

            <!-- build project with Java 1.6 -->
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>


         <plugin>
           <artifactId>maven-surefire-plugin</artifactId>
           <configuration>
             <skip>true</skip>
           </configuration>
         </plugin>
         <plugin>
           <artifactId>maven-jar-plugin</artifactId>
           <executions>
             <execution>
               <phase>package</phase>
               <goals>
                 <goal>jar</goal>
               </goals>
               <configuration>
                 <classifier>dev</classifier>
               </configuration>
             </execution>
           </executions>
         </plugin>



       </plugins>
     </build>
   </profile>
 </profiles>

ジョブがビルドにヒットしたときに、単一のJenkinsジョブに対してこれらのプロファイルの両方を自動的にビルドするようにJenkinsをどのようにセットアップしますか?そして、これらの瓶の両方を工芸品に入れますか?私はジェンキンスの知識がほとんどなく、これに関する情報はウェブ上にはあまりありません。

10
user2639215

Jenkinsマトリックスジョブを作成できます。マトリックスジョブを使用すると、設定を変更して同じジョブを実行できます(あなたの場合:文字列)。

変化する各設定を軸と呼びます。あなたの場合、2つの値を含む文字列軸を作成します:devとprod。

これにより、両方の値を使用してジョブが2回実行されます。

ただし、プロファイルの使用は危険です。ビルドの実行に使用されるプロファイルはアーティファクトにコード化されていないため、Mavenの「1つのソースリビジョンは常にまったく同じターゲットアーティファクトにつながるはずです」という契約を破ります(参照: http://www.blackbuild。 com/how-to-really-use-maven-profiles-without-endangering-your-karma / より詳細な説明)

分類子(-devと-prod)を使用して2つの異なるアーティファクトを作成することを検討してください。ビルドの2つの別々のモジュールを作成し、それぞれが1つのターゲットアーティファクトのみを作成します。

15
blackbuild

Mavenでは、mvn -Pdev,prodの場合、1つのコマンドで両方のプロファイルを同時にアクティブ化します。

コマンドの2つの別個の実行、つまり、2つのビルドを実行することでコマンドラインで実行するものを望んでいるようです:

mvn -Pdev install; mvn -Pprod install

ジェンキンスでは、どちらかでこれを達成できます

  • 1つのフリースタイルプロジェクトジョブ(2つのシェルビルダーがmvn -P$PROFILE installタスク)
  • 2つのmavenタイプのジョブ(「他のプロジェクトがビルドされた後にビルド」を使用して次々にチェーンできる).
11
coffeebreaks

Matrixジョブとフリースタイルジョブでの複数のmaven呼び出しに加えて、別の方法があります。事前ビルドステップとしてRun top-level Maven targetsを使用し、maven jenkinsプラグインを介して他のコマンドを実行します。

-Dmaven.repo.local=/${whatever-it-is}/${EXECUTOR_NUMBER}を指定して、事前構築ステップが他のコマンドと同じMavenリポジトリを使用していることを確認してください。

マトリックスジョブなどの詳細については、他の回答を参照してください。

1
phani

各実行に異なる実行IDを設定し、コマンドをトリガーすることでそれを行うことができます

mvn -Pdev,prod clean package install