我正试图在一个Jenkins作业中构建多个Maven概要文件。每个概要文件都会更改一些代码,然后通过在命令行中执行mvn -Pdev install
和mvn -Pprod install
来创建一个jar(根据Maven的说法,使用mvn -Pdev,prod install
应该可以工作,但对我来说不起作用)。以下是我项目的pom.xml
:中的两个配置文件
<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矩阵作业。矩阵作业允许在更改设置的情况下运行相同的作业(在您的情况下:字符串)。
每个变化的设置称为一个轴。在您的情况下,您将创建一个包含两个值的字符串轴:dev和prod.
这样,您的作业将运行两次,同时使用两个值。
但是:您使用配置文件是危险的。由于用于运行构建的概要文件没有被编码到您的工件中,因此您打破了Maven的"一个源版本应该总是导致完全相同的目标工件"合同(请参阅:http://www.blackbuild.com/how-to-really-use-maven-profiles-without-endangering-your-karma/更详细的解释)
考虑使用分类器(-dev和-prod)创建两个不同的工件,或者更好:创建构建的两个独立模块,每个模块只创建一个目标工件。
在Maven中,如果使用mvn -Pdev,prod
,则在一个命令中同时激活两个配置文件。
看起来你想要两个不同的命令运行,也就是说,你可以通过两个构建在命令行上实现:
mvn -Pdev install; mvn -Pprod install
在詹金斯,你可以通过实现这一点
- 一个自由风格的项目作业(由2个shell生成器运行
mvn -P$PROFILE install
任务) - 2个maven类型的作业(您可以使用"构建其他项目后再构建"一个接一个地链接)
除了Matrix作业和自由风格作业中的多个maven调用之外,还有另一种方法:Run top-level Maven targets
作为预构建步骤,并通过maven-jenkins插件运行另一个命令。
通过提供-Dmaven.repo.local=/${whatever-it-is}/${EXECUTOR_NUMBER}
,确保预构建步骤使用与其他命令相同的maven repo。
有关矩阵作业等的详细信息,请参阅其他答案。
您可以通过为每次执行设置不同的执行ID,然后触发命令来实现这一点
mvn -Pdev,prod clean package install