2016-04-28 6 views
0

Ich habe ein Projekt mit mehreren Modulen mit einem Stamm pom.xml, definiert mit <packaging>pom</packaging>, und mehrere <modules>.Pom-only-Artefakt unerwartet als jar zu Artifactory

Auf Jenkins, ich laufen Maven mit den Zielen jar:jar install:install -Dmaven.test.skip=true (Kompilieren und Testen wurde bereits von früheren Jobs in der Build-Pipeline durchgeführt).

Als Post-Build-Aktion stelle ich Artefakte in Artifactory bereit. Ich habe 'Deploy Maven artifects' geprüft und das Feld include/exclude leer gelassen, damit es die Standardwerte annimmt.

Die Submodule haben ihren Pom und ihr Jar korrekt in Artifactory implementiert. Ich sehe dies in der Konsole ausgegeben:

Deploying artifacts of module: com.example:foo 
Deploying artifact: https://repo.example.com/snapshot/com/example/foo/7.0.0-SNAPSHOT/foo-7.0.0-SNAPSHOT.jar 
Deploying artifact: https://repo.example.com/snapshot/com/example/foo/7.0.0-SNAPSHOT/foo-7.0.0-SNAPSHOT.pom 

Die root pom ist nicht richtig hochgeladen Artifactory.

Wenn "Unterdrückt POM Konsistenzprüfungen" sind off, schlägt die Build mit einem Konflikt auf das root pom:

Deploying artifacts of module: com.example:root 
Deploying artifact: https://repo.example.com/snapshot/com/example/root/7.0.0-SNAPSHOT/root-7.0.0-SNAPSHOT.pom 
ERROR: Failed to deploy file: HTTP response code: 409. HTTP response message: Conflict 
java.io.IOException: Failed to deploy file: HTTP response code: 409. HTTP response message: Conflict 
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.throwHttpIOException(ArtifactoryBuildInfoClient.java:743) 
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.uploadFile(ArtifactoryBuildInfoClient.java:623) 
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.deployArtifact(ArtifactoryBuildInfoClient.java:329) 
    at org.jfrog.hudson.maven2.ArtifactsDeployer.deployArtifact(ArtifactsDeployer.java:190) 
    at org.jfrog.hudson.maven2.ArtifactsDeployer.deploy(ArtifactsDeployer.java:130) 
    at org.jfrog.hudson.ArtifactoryRedeployPublisher.perform(ArtifactoryRedeployPublisher.java:420) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:782) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:723) 
    at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.post2(MavenModuleSetBuild.java:1047) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:668) 
    at hudson.model.Run.execute(Run.java:1763) 
    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:531) 
    at hudson.model.ResourceController.execute(ResourceController.java:98) 
    at hudson.model.Executor.run(Executor.java:410) 
Build step 'Deploy artifacts to Artifactory' changed build result to FAILURE 

Wenn "Unterdrückt POM Konsistenzprüfungen" sind auf, überprüfe ich root auf Artifactory und ich gehen zu "POM View", dann sehe ich binäre Unordnung, die mit "PK" beginnt, das eine ZIP-Datei oder in diesem Fall wahrscheinlich eine JAR-Datei anzeigt. Das Herunterladen dieser Datei und das Extrahieren als Zip bestätigten, dass sie ein META-INF Verzeichnis mit einigen mit Maven verbundenen Unterverzeichnissen enthält.

Was ich erwartet habe, war ein Klartext pom.xml für root.

ich dies auch im Konsolenprotokoll bemerkt:

[JENKINS] Archiving /var/lib/jenkins/jobs/example-develop-maven-artifactory/workspace/target/example-root-7.0.0-SNAPSHOT.jar to com.example/root/7.0.0-SNAPSHOT/root-7.0.0-SNAPSHOT.pom 

und dann

Deploying artifacts of module: com.example:root 
Deploying artifact: https://repo.example.com/snapshot/com/example/root/7.0.0-SNAPSHOT/root-7.0.0-SNAPSHOT.pom 
Deploying artifact: https://repo.example.com/snapshot/com/example/root/7.0.0-SNAPSHOT/root-7.0.0-SNAPSHOT.pom 

Wie ich es, Artifactory fängt verstehen, was das Build-Tool im lokalen Repository bereit (~/.m2).

Wie bekomme ich die Pom, und nur die Pom, und kein magisch erzeugtes Glas, meiner root, auf Artifactory? Was wahrscheinlich darauf hinausläuft, wie sage ich Maven und/oder Jenkins, meine root Pom nicht mit einem root Glas zu überschreiben?

Versionen:

  • Artifactory 3.4.2 (rev. 30140)
  • Jenkins 1.643
  • Artifactory Plugin 2.4.7
+1

Warum tun Sie: 'jar: jar install: install -Dmaven.test.skip = true' anstelle von' mvn clean install' oder wenn Sie diese Artefakte im Repo-Manager bereitstellen möchten, verwenden Sie 'mvn clean deploy'? – khmarbaise

+0

Diese Frage ist bereits in der zweiten Zeile meiner Frage beantwortet: Ein vorheriger Build-Job in der Pipeline hat die anderen Ziele ausgeführt. Um ins Detail zu gehen, dauert es nur 45 Sekunden, um "jar: jar install: install" auszuführen, während "clean install" 4,5 Minuten dauert, wobei Tests übersprungen werden (und 25 Minuten mit Tests). –

+0

Warum trennen Sie die Schritte, nur eine Bereitstellung in der vorherigen Pipeline-Schritt tun? Oder benutze Jenkins, um die Bereitstellung anstelle von Maven zu machen ..? – khmarbaise

Antwort

0

Ab @ khmarbaise Kommentar, leite ich jetzt der Build mit

mvn install \ 
    -Dmaven.main.skip=true \ 
    -Dcheckstyle.skip=true \ 
    -Dfindbugs.skip=true \ 
    -Dmaven.test.skip=true \ 
    -Dmaven.site.skip=true \ 
    -Dmaven.javadoc.skip=true 

Der Build dauert immer noch 54 Sekunden, was bedauerlich ist, aber es gibt keine Noch eine redundante Kompilation, die genau das ist, was ich will.

Die Pom-only root ist korrekt zu Artifactory zugeordnet.

Verwandte Themen