Gebäude mehrere Maven-profile für eine einzelne Jenkins-job
Ich versuche zu bauen, mehrere Maven-profile in einem einzigen Jenkins-job. Jedes Profil ändert die Codes und erstellt dann ein jar von der Ausführung mvn -Pdev install
dann mvn -Pprod install
in der Befehlszeile (Nach Maven mit mvn -Pdev,prod install
funktionieren soll, aber es ist nicht für mich arbeiten). Hier sind die beiden profile in meinem Projekt 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>
Wie würde ich das setup Jenkins automatisch erstellen dieser profile für eine einzelne Jenkins-job, wenn der job ist der hit für ein build? Und setzen Sie beide Gläser in das Artifactory? Ich habe sehr wenig Jenkins wissen und es gibt nicht viel Informationen dazu auf der web.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie einen Jenkins job-matrix. Eine job-matrix ermöglicht es, die gleiche Arbeit ausführen, mit ändern von Einstellungen (in Ihrem Fall: ein string).
Jeder änderung der Einstellung wird als eine Achse. In Ihrem Fall würden Sie einen string-Achse mit den zwei Werten: dev und prod.
Diese Weise Ihre Arbeit zweimal ausführen würde, mit beiden Werten.
Jedoch: Ihre Nutzung der profile ist gefährlich. Da das Profil verwendet werden, um das build ist nicht kodifiziert in Ihr Artefakt, brechen die "one-source-revision sollte immer genau die gleichen Artefakt" Vertrag von Maven (siehe: http://www.blackbuild.com/how-to-really-use-maven-profiles-without-endangering-your-karma/ für eine ausführlichere Erklärung)
Erwägen, entweder zwei verschiedene Artefakte mithilfe von Klassifikatoren (-dev und prod), oder noch besser: erstellen Sie zwei separate Module, build, jedes schaffen nur eine Sie Ihr Ziel, Artefakte.
In Maven, wenn Sie
mvn -Pdev,prod
, dann sind Sie aktiviert beide profile gleichzeitig in einem einzigen Befehl.Es scheint, Sie wollen 2 verschiedene ausführen des Befehls, D. H. etwas, das Sie erzielen würde, auf der Kommandozeile zu tun 2 builds:
In jenkins können Sie erreichen dies entweder
mvn -P$PROFILE install
Aufgaben)Neben der Matrix-Arbeit und mehrere maven-Aufrufe in einer free-style-job, gibt es eine andere Möglichkeit:
Run top-level Maven targets
als pre-build-Schritt, und führen Sie den Befehl über maven-jenkins-plugin.Stellen Sie sicher, dass die pre-build-Schritt verwendet die gleiche maven-repo als den anderen Befehl durch die Bereitstellung
-Dmaven.repo.local=/${whatever-it-is}/${EXECUTOR_NUMBER}
.Bitte auf andere Antworten, für details auf matrix, job, etc.
Können Sie tun es, indem Sie andere Ausführung-ids zu jeder Ausführung und dann den Befehl auslösen
mvn -Pdev,prod clean package install