Jenkins Maven-Jobs enthalten standardmäßig einige maven properties, die während der Jobkonfiguration verwendet werden. Sie bietet jedoch keinen einfachen Zugriff auf weitere in der pom-Datei definierte Eigenschaften.
Daher ist ein benutzerdefinierter Ansatz erforderlich. Hier ist eine funktionierende Lösung, die ein grooviges Skript verwendet und dazu verwendet werden könnte, jede definierte Maven-Eigenschaft zur Build-Zeit in eine neue Jenkins-Variable umzuwandeln, um sie dann in weiteren Post-Build-Schritten weiter zu verwenden.
Vorrausetzungen zu dieser Lösung sind:
- Groovy in dem Jenkins-Server (Klick installiert, nur download it, entpacken, stellen Sie sich auf den Pfad
- Die Jenkins Groovy Plugin in Jenkins installiert ist (leicht Schritt verwalten Jenkins> Plugins verwalten, erhältlich Plugins, installieren sie es, dann konfigurieren sie es unter verwalten Jenkins> Configure System> Groovy, um es auf die Installation von Schritt Punkt zu machen oben
Sie können dann in das Projekt ein pom folgende build/plugins
Abschnitt ist:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>write-project-properties</goal>
</goals>
<configuration>
<outputFile>${project.build.directory}/build.properties</outputFile>
</configuration>
</execution>
</executions>
</plugin>
Was tun wir? Verwenden Sie einfach das Ziel properties-maven-plugin
und write-project-properties
, um die Projekteigenschaften in eine neue Datei unter dem Zielordner (target\build.properties
) zu schreiben. Hinweis: Eigenschaften in dieser Datei werden bereits interpoliert.
Diese neue Datei wird für Ihr Build und Projekt harmlos sein, von jedem anderen Build-Schritt ignoriert, als Teil eines Aufrufs mvn clean
entfernt, aber wirklich hilfreich für Jenkins.
Dann in dem betreffenden Jenkins Job können Sie eine neue Beitrag Schritten> Ausführen System Groovy Skript (und nicht ein Groovy Skript ausführen, tragen die difference) zu einer neuen groovigen Datei zeigt Sie speichern können, wo erwünscht oder geben Sie in die Konsole den folgenden groovy Code:
import hudson.model.*;
import hudson.util.*;
def thr = Thread.currentThread();
def currentBuild = thr?.executable;
def props = new Properties();
new File(currentBuild.workspace.toString()+"\\target\\build.properties").withInputStream {
stream -> props.load(stream);
}
println "detected from properties: "+props.get("outputFolder");
def newParamAction = new ParametersAction(new StringParameterValue("outputFolder", props.get("outputFolder")));
currentBuild.addAction(newParamAction);
Was ist das Skript zu tun? Lesen Sie einfach die Eigenschaftendatei und drucken Sie die Eigenschaft outputFolder
als Protokoll (wird optional entfernt), und legen Sie sie als neue Jenkins-Jobvariable mit demselben Namen fest (die bei Bedarf geändert werden muss).
Sie können dann in weiteren Post-Build-Schritten die ${outputFolder}
neue Variable (oder die %outputFolder%
in Windows-Befehle) verwenden und es wird korrekt vorhanden sein.
Als Beispiel können Sie es über einen neuen Post Steps> Ausführen Windows Batch Befehl debuggen und einfach Echo. Hier ist ein Screenshot:
Als Ausgabe einer Probe Jenkins Job würden Sie dann:
detected from properties: C:/AutomationTestReports/sample-project/Execution_(2016-04-24_12-11-13UTC)
[workspace] $ cmd /c call C:\dev\tomcat-7\temp\hudson6024790907972070905.bat
C:\Users\user-name\.jenkins\jobs\sample-maven\workspace>echo C:/AutomationTestReports/sample-project/Execution_(2016-04-24_12-11-13UTC)
C:/AutomationTestReports/sample-project/Execution_(2016-04-24_12-11-13UTC)
C:\Users\user-name\.jenkins\jobs\sample-maven\workspace>exit 0
Finished: SUCCESS
Laut diesem Artikel - https://blog.codecentric.de/en/2014/07/accessing- maven-project-properties-jenkins-build-jobs /, Es scheint, dass wir in einem Jenkins-Job auf einige Aspekte der pom.xml zugreifen können. Können Sie versuchen, ob das funktioniert? Vielleicht machen Sie diesen als eindeutiges Tag in der Pom und versuchen Sie, wie gezeigt darauf zuzugreifen? Nur ein Versuch, nicht sicher, ob das funktioniert. Ich habe kein Jenkins, um es zu versuchen. –
Ich kenne den Link erwähnt einige Standard-Pom-Variablen, aber es lohnt sich, IMO versuchen. –