2017-09-06 1 views
0

Ich habe eine grundlegende Jenkins pipeline zusammengestellt und es tut, was ich in den meisten Fällen erwarte.Wie mache ich JAR-Dateien in einer Jenkins-Pipeline für ant verfügbar?

Allerdings verwende ich Ant und es erfordert Zugriff auf bestimmte JAR-Dateien. Ich habe wie so den Build-Schritt angegeben:

stage('Build') { 
    // Build the project 
    env.PATH = "${tool 'ant'}/bin:${env.PATH}" 
    sh 'ant -f dita-tools/build_all.xml -lib $WORKSPACE/dita-ot/lib:$WORKSPACE/dita-ot/lib/saxon' 
} 

Der Build Ich laufe durch diese Pipeline nicht und erzeugt die folgenden Fehler:

java.lang.ClassNotFoundException: org.dita.dost.module.GenMapAndTopicListModule 

Von dem, was ich sagen kann, ist dies Ameise wegen nicht Zugang zu dost.jar haben, das in der dita ot ist. Ich habe versucht, dieses Argument eine Reihe von Möglichkeiten zu definieren, einschließlich der Bezugnahme auf dost.jar (ich habe eine Reihe von Gläsern zu enthalten), aber jedes Mal, wenn es mit dem gleichen Fehler fehlschlägt.

Wenn ich in Jenkins ein eigenständiges Ameisenprojekt zusammenstelle, hat ant keine Probleme mit dem Argument, das ich oben angegeben habe. Gibt es einen besseren Weg für mich, dieses Argument/diese Abhängigkeit in einer Pipeline zu liefern?

UPDATE: Ich habe eine Echo-Anweisung für den Classpath meiner Build-Skript und konnte zu überprüfen, ob in dem Build-Skript zu dem Classpath der Gläser Zugabe in der Tat Arbeit. Also hat ant in jeder Hinsicht Zugriff auf alle relevanten Basis-Toolkit-Jars für das Ziel, aber der Fehler bleibt bestehen. An dieser Stelle scheint es, dass das Problem etwas damit zu tun hat, wie die jenkins-Pipeline im Gegensatz zur dita selbst funktioniert.

+0

Warum nicht nur die lib Stellen in dem Ant-Skript definiert selbst? – CAustin

+0

Ich habe das versucht, aber es hat nicht funktioniert. Kein Zweifel aufgrund eines Benutzerfehlers. Ich denke, du hast Recht. Das sollte eine vollständig praktikable Option sein. Ich werde weiter erkunden. –

Antwort

0

Ich nehme an, Sie benutzerdefinierte Plug-ins verwenden, wenn ja, bitte darauf achten, Sie richtig definiert Ihre Gläser in den plugin.xml wie so:

<feature extension="dita.conductor.lib.import" file="lib/my.jar"/> 

UPDATE

java.lang.ClassNotFoundException: org.dita.dost.module.GenMapAndTopicListModule 

Dieser Fehler bedeutet, dass das Haupt-DITA-OT-JAR nicht in Ihrem Klassenpfad gefunden wird. Dies deutet darauf hin, dass dies kein Plugin-Problem ist.

Normalerweise müssen Sie den Klassenpfad nicht einrichten, Ant erledigt das für Sie. Bitte lesen Sie auch Creating an Ant build script.

Bitte versuchen Sie einen Ausschnitt wie diese:

node { 
    try { 
     checkout scm 
     stage('Build') { 
      sh ''' 
       dir=$(pwd) 
       curl [your-dita-ot-url] --output dita-ot.zip 
       unzip -qq "$dir/dita-ot.zip" 
       rm dita-ot.zip 
       chmod +x ${WORKSPACE}/dita-ot/bin/ant 
       ${WORKSPACE}/dita-ot/bin/ant -f ${WORKSPACE}/build.xml -Ddita.dir=$dir/dita-ot -Dbranch.name=$BRANCH_NAME 
      ''' 
     } 
    } catch (e) { 
     currentBuild.result = "FAILED" 
     throw e 
    } finally { 
     notifyBuild(currentBuild.result) 
    } 
} 
+0

Ich habe ein bisschen mehr Details hinzugefügt. Im Grunde schlägt die Pipeline fehl, weil sie anscheinend nicht auf dost.jar zugreifen kann. Es ist also kein Plugin-Problem. –

+0

Danke für den Vorschlag. Ich habe es tatsächlich geschafft, auszudrucken, was im Klassenpfad für meine Ziele ist und alle relevanten Gläser sind da. Also, ich frage mich, ob vielleicht Jennkins-Pipeline versucht, in einem separaten Arbeitsbereich zu bauen und damit den Weg zu den Gläsern zu brechen. –

Verwandte Themen