为单个Jenkins作业构建多个Maven配置文件

11

我正在尝试在单个Jenkins作业中构建多个Maven配置文件。每个配置文件会更改一些代码,并执行mvn -Pdev installmvn -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自动构建这两个配置文件,并将这两个jar包放入Artifactory中?我对Jenkins知之甚少,在网上也找不到太多相关信息。

4个回答

16
您可以创建一个Jenkins矩阵作业。 矩阵作业允许同一作业以不同的设置运行(在您的情况下:字符串)。
每个变化的设置都称为轴。 在您的情况下,您将创建一个包含两个值的字符串轴:dev和prod。
这样,您的作业将运行两次,使用两个值。
但是:您对配置文件的使用是危险的。 由于用于运行构建的配置文件未编码到您的构件中,因此违反了Maven的“一个源代码修订版应始终导致完全相同的目标构件”合同(有关更详细的解释,请参见:http://www.blackbuild.com/how-to-really-use-maven-profiles-without-endangering-your-karma/
请考虑使用分类器(-dev和-prod)创建两个不同的构件,或者更好地创建两个单独的构建模块,每个模块仅创建一个目标构件。

我有一个问题,与这个问题有点相似。我已经放在这个链接中,请您看一下,如果您有任何解决方案,请告诉我。https://stackoverflow.com/questions/48002535/one-profile-properties-are-overriding-with-another-profile-properties-in-maven - Nallamachu

11
在Maven中,如果您使用mvn -Pdev,prod,则可以在一条命令中同时激活两个配置文件。似乎您想要运行2个不同的命令,即通过在命令行上执行2个构建来实现:
mvn -Pdev install; mvn -Pprod install

在 Jenkins 中,你可以通过以下两种方法之一实现这一点:

  • 使用一个自由风格的项目任务(其中运行 2 个 shell 构建器来运行 mvn -P$PROFILE install 任务)
  • 使用 2 个 Maven 类型的任务(你可以使用“在其他项目构建后构建”来将它们链接在一起)。

2
除了在自由风格的工作中使用矩阵作业和多个maven调用外,还有另一种方法:在构建前作为预构建步骤运行顶层Maven目标,并通过maven jenkins插件运行其他命令。
请确保预构建步骤使用与其他命令相同的maven存储库,通过提供-Dmaven.repo.local=/${whatever-it-is}/${EXECUTOR_NUMBER}来实现。
有关矩阵作业等详细信息,请参考其他答案。

0

您可以通过为每个执行设置不同的执行ID,然后触发命令来完成它

mvn -Pdev,prod clean package install


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接