J'essaie de créer plusieurs profils Maven dans un seul travail Jenkins. Chaque profil modifie du code, puis crée un fichier jar en exécutant mvn -Pdev install
, puis mvn -Pprod install
dans la ligne de commande (selon Maven, utiliser mvn -Pdev,prod install
est censé fonctionner, mais cela ne fonctionne pas pour moi). Voici les deux profils dans le pom.xml
de mon projet:
<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>
Comment configurer Jenkins pour créer automatiquement ces deux profils pour un seul travail Jenkins chaque fois que le travail est recherché? Et mettre ces deux pots dans l'Artifactory? Je connais très peu Jenkins et il n’ya pas beaucoup d’informations à ce sujet sur le Web.
Vous pouvez créer un travail de matrice Jenkins. Un travail matriciel permet d'exécuter le même travail avec des paramètres modifiés (dans votre cas, une chaîne).
Chaque réglage est appelé un axe. Dans votre cas, vous créeriez un axe de chaîne contenant les deux valeurs: dev et prod.
Ainsi, votre travail sera exécuté deux fois, avec les deux valeurs.
Cependant: votre utilisation des profils est dangereuse. Étant donné que le profil utilisé pour exécuter la construction n'est pas codifié dans votre artefact, votre contrat "Maven" doit toujours aboutir au même artefact cible "(voir: http://www.blackbuild.com/ comment-vraiment-utiliser-profils-maven-sans-mettre en danger votre karma/ pour une explication plus détaillée)
Pensez à créer deux artefacts différents à l'aide du classificateur (-dev et -prod), voire mieux: créez deux modules distincts de votre construction, chacun ne créant qu'un seul de vos artefacts cibles.
Dans Maven, si vous utilisez mvn -Pdev,prod
, vous activez les deux profils simultanément en une seule commande.
Il semble que vous souhaitiez 2 exécutions distinctes de la commande, c’est-à-dire quelque chose que vous obtiendriez sur la ligne de commande en effectuant 2 versions:
mvn -Pdev install; mvn -Pprod install
En Jenkins, vous pouvez y parvenir avec
mvn -P$PROFILE install
)En plus du travail Matrix et de plusieurs invocations maven dans un travail de style libre, il existe un autre moyen: Run top-level Maven targets
en tant qu'étape de pré-génération et exécutez l'autre commande via le plugin maven jenkins.
Assurez-vous que l'étape de pré-génération utilise le même référentiel maven que l'autre commande en fournissant -Dmaven.repo.local=/${whatever-it-is}/${EXECUTOR_NUMBER}
.
Veuillez vous reporter à d’autres réponses pour des détails sur le travail matriciel, etc.
Vous pouvez le faire en définissant différents identificateurs d’exécution à chaque exécution, puis en déclenchant la commande.
mvn -Pdev,prod clean package install