In einem groovigen Jenkins-Skript versuche ich, eine Abhängigkeit herunterzuladen, indem ich Folgendes verwende:
@Grab(group='myorg', module='SuiteCreator', version='1.16.1', conf='jar', transitive=false)
import myorg.myorgAPI
Ich habe eine /home/jenkins/.groovy/grapeConfig.xml-Datei mit folgendem:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-settings>
<settings defaultResolver="downloadGrapes"/>
<resolvers>
<chain name="downloadGrapes">
<sftp user="admin" userPassword="pw" host="ivy.myorg.com" name="myrepository" checkmodified="true">
<ivy pattern="/data/ivy/repo/[organisation]/[module]/[branch]/[revision]/ivy-[revision].xml"/>
<artifact pattern="/data/ivy/repo/[organisation]/[module]/[branch]/[revision]/[artifact]-[revision].[ext]"/>
</sftp>
</chain>
</resolvers>
</ivy-settings>
Die ivy-1.16.1.xml des Moduls, das ich zu greifen versuche:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="1.0">
<info organisation="myorg" module="SuiteCreator" branch="master" revision="1.16.1" status="release" publication="20190417105814"/>
<configurations>
<conf name="jar" description="Distribution jar"/>
</configurations>
<publications>
<artifact name="myorg-suitecreator" type="jar" ext="jar" conf="jar"/>
</publications>
</ivy-module>
Also versuche ich nur, das Artefakt zu greifen: myorg-suitecreator-1.16.1.jar.
Wenn ich mein grooviges Skript in Jenkins ausführe, erhalte ich die folgende Fehlermeldung:
2019.07.09 18:06:15 org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 2019.07.09 18:06:15 Allgemeiner Fehler während der Konvertierung: Error grabbing Grapes -- [download failed: myorg#SuiteCreator#master;1.16.1!SuiteCreator.jar] 2019.07.09 18:06:15 2019.07.09 18:06:15 java.lang.RuntimeException: Error grabbing Grapes -- [download failed: myorg#SuiteCreator#master;1.16.1!SuiteCreator. jar] 2019.07.09 18:06:15 um sun.reflect.NativeConstructorAccessorImpl.newInstance0 (native Methode)
Aus dem Fehler geht hervor, dass Grape davon ausgeht, dass der Name des Ivy-Artefakts mit dem Modulnamen identisch ist. Der Artefaktname ivy-1.16.1.xml unter: /ivy-module/publications/artifact/@name ist als myorg-suitecreator definiert. Grab scheint jedoch ein Versuch zu sein, Folgendes herunterzuladen: SuiteCreator.jar.
Das Artefaktmuster in grapeConfig.xml ist:
<artifact pattern="/data/ivy/repo/[organisation]/[module]/[branch]/[revision]/[artifact]-[revision].[ext]"/>
Und so ist die Datei, die ich zu greifen versuche, tatsächlich: /data/ivy/repo/myorg/SuiteCreator/1.16.1/myorg-suitecreator-1.16.1.jar
Hat jemand Vorschläge, wie dies funktioniert (oder ob Grab Artefakte mit unterschiedlichen Artefaktnamen zum Modulnamen von Ivy herunterladen kann?).
Lösung des Problems
Ich habe es aufgegeben, Grab zu verwenden, um dies zu erreichen. Ich habe festgestellt, dass eine weitere Einschränkung von Grab darin besteht, dass es die Angabe des Zweigs des Artefakts, das Sie abrufen möchten, nicht zulässt. Mir ist klar, dass es keine Best Practice ist, keine Releases in einem Master- Branch oder einem Single-Release-Branch zu haben, aber wir haben diese Anforderung in unserer Entwicklungsumgebung.
Stattdessen habe ich einfach einen Invoke Ant - Build-Schritt in Jenkins verwendet, um mein Ivy-Artefakt abzurufen. Wir verwenden ANT bereits in unserem Entwicklungsprozess, daher war dies nicht schwierig.
Das ANT build.xml-Skript befindet sich im selben Git-Repository wie das Groovy-Skript, das ich ausführen möchte. Das Retrieve-Suite-Creator- Ziel ist einfach ein Ivy-Retrieve
<target name="retrieve-suite-creator" depends="clean, install-ivy">
<ivy:retrieve conf="suite-creator" type="jar" pattern="${build.dir}/[artifact].[ext]" log="${ivy.resolve.log}" settingsRef="${ivy.build.settings}"/>
</target>
Verwenden meiner ivy.xml (wieder im selben Repo wie das Groovy-Skript):
<ivy-module version="1.0">
<info organisation="myorg" module="MyAutomation" status="integration" branch="${ivy.branch}"/>
<configurations>
<conf name="suite-creator" description="Configuration for Suite Creator"/>
</configurations>
<dependencies>
<dependency org="myorg" name="SuiteCreator" branch="mybranch" rev="1.16.1" conf="suite-creator->suite-creator" changing="true"/>
</dependencies>
</ivy-module>
Ich musste die Suite-Creator- Ivy-Konfiguration zur ivy.xml des SuiteCreator-Moduls hinzufügen (in einem separaten SuiteCreator-Git-Repo). Ich konnte die vorhandene JAR- Konfiguration nicht verwenden, da dadurch auch alle transitiven Abhängigkeiten heruntergeladen wurden, die ich nicht benötigte.
<ivy-module version="1.0">
<info organisation="myorg" module="SuiteCreator" status="integration" branch="${ivy.branch}"/>
<configurations>
<!-- Build configurations -->
<conf name="build" description="Classes used in jar compilation"/>
<conf name="jar" description="Distribution jar"/>
<conf name="suite-creator" description="Just the myorg-suitecreator.jar"/>
</configurations>
<publications>
<artifact name="myorg-suitecreator" type="jar" ext="jar" conf="jar,suite-creator"/>
</publications>
<dependencies>
...
</dependencies>
</ivy-module>
Schließlich hatte ich in meinem Jenkins-Job nach dem Invoke Ant -Build-Schritt einen Execute Groovy Script - Build-Schritt, in dem ich das heruntergeladene JAR zu meinem Class path hinzufügen musste.
Keine Kommentare:
Kommentar veröffentlichen