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をどのようにセットアップしますか?そして、これらの瓶の両方を工芸品に入れますか?私はジェンキンスの知識がほとんどなく、これに関する情報はウェブ上にはあまりありません。
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つのターゲットアーティファクトのみを作成します。
Mavenでは、mvn -Pdev,prod
の場合、1つのコマンドで両方のプロファイルを同時にアクティブ化します。
コマンドの2つの別個の実行、つまり、2つのビルドを実行することでコマンドラインで実行するものを望んでいるようです:
mvn -Pdev install; mvn -Pprod install
ジェンキンスでは、どちらかでこれを達成できます
mvn -P$PROFILE install
タスク)Matrixジョブとフリースタイルジョブでの複数のmaven呼び出しに加えて、別の方法があります。事前ビルドステップとしてRun top-level Maven targets
を使用し、maven jenkinsプラグインを介して他のコマンドを実行します。
-Dmaven.repo.local=/${whatever-it-is}/${EXECUTOR_NUMBER}
を指定して、事前構築ステップが他のコマンドと同じMavenリポジトリを使用していることを確認してください。
マトリックスジョブなどの詳細については、他の回答を参照してください。
各実行に異なる実行IDを設定し、コマンドをトリガーすることでそれを行うことができます
mvn -Pdev,prod clean package install