2016-04-22 4 views
2

Ich habe ein Maven-Projekt, in dem ich eine Eigenschaft habe. Ich möchte von Jenkins darauf zugreifen.Wie maven Eigentum von Jenkins zugreifen?

POM-Schnipsel:

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <timestamp>${build.time}</timestamp> 
    <outputFolder>C:/AutomationTestReports/${project.name}/ExecutionReport${timestamp}</outputFolder> 
</properties> 

Dieser Ausgabeordner Eigenschaft wird zur Laufzeit ausgewertet. Ich möchte auf diese Eigenschaft in Jenkins zugreifen, um zu dem Ausgabeordner zu navigieren, der gemäß dem Zeitstempel generiert wird. Damit dies passiert, muss ich diese Ausgabe-Ordner-Eigenschaft in Jenkins erfassen, was ich nicht kann.

Nur mit diesem Ausgabeordner kann ich zu dem Ordner navigieren, um auf die Ergebnisdatei zuzugreifen.

Frage: Wie Maven Eigenschaften von Jenkins Job zugreifen?

+0

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. –

+0

Ich kenne den Link erwähnt einige Standard-Pom-Variablen, aber es lohnt sich, IMO versuchen. –

Antwort

2

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:

enter image description here

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 
1

A quick and dirty Lösung.

hinzufügen eine 'Ausführen von Shell Schritt und weisen Sie den Wert der Eigenschaft in eine Variable:

outputFolderVar=$(awk -F '[<>]' '/outputFolder/{print $3}' pom.xml)