2013-09-27 3 views
6

Ich habe einen Jenkins-Job konfiguriert, um ein Maven 3-Projekt zu erstellen und das Plugin "Maven release build" zu aktivieren. Außerdem wurde eine Post-Build-Aktion hinzugefügt, um die Artefakte in ein Nexus-Repository zu implementieren.Wie kann ich konfigurieren, dass Jenkins nicht im Maven-Repository bereitgestellt wird, wenn ich keinen Release-Build durchführe?

Ich möchte jedoch nicht, dass Artefakte bereitgestellt werden, es sei denn, der Benutzer hat den Build initiiert, indem er auf den Link "Perform Maven Release" statt auf die Schaltfläche "Build Now" geklickt hat. Wenn ich auf "Jetzt erstellen" klicke, möchte ich nur eine Momentaufnahme erstellen, die nirgends bereitgestellt wird.

Ich habe aus der Dokumentation verstanden, dass ich eine Umgebungsvariable namens IS_M2RELEASEBUILD verwenden könnte, um dieses Verhalten zu steuern. Diese Umgebungsvariable wird vom M2 Release Plugin auf "true" gesetzt, wenn der Build über die Verknüpfung "Perform Maven release" gestartet wurde. Aber die Post-Build-Aktion ignoriert dies vollständig.

Jenkins Settings

Ich verwende Jenkins LTS 1.509.3 und Maven 3.0.5.

UPDATE: Bitte beachten Sie, dass ich nicht nach einer Problemumgehung mit dem Maven Release Plugin im POM suchen. Mein Ziel ist es, einen einzelnen Jenkins-Job zu erstellen, der als CI-Build (ohne Bereitstellen des Snapshots) durch Check-Ins ausgelöst wird, und denselben Job für die Erstellung eines Releases mit dem Jenkins M2 Release-Plugin verwenden zu können.

+0

Wie wäre es, die Version in SNAPSHOT zu ändern und das Snapshot-Repository zu definieren? –

+1

@AbhijithNagarajan Ich sehe keine Möglichkeit, 2 Post-Build-Aktionen (eine für Release und eine für Snapshot) zu haben und ich denke, ich hätte ein ähnliches Problem, einen Weg zur bedingten Ausführung des einen oder anderen zu finden. Außerdem möchte ich die Snapshot-Artefakte nicht wirklich bereitstellen. –

+0

Warum verwendest du nicht maven, um deine Artefakte zu verteilen? –

Antwort

2

Werfen Sie einen Blick auf Flexible Publish Plugin:

Ich denke, Sie ganz einfach Ihre Umgebungsvariable gegen erforderlichen Muster

enter image description here

und auslösen Aktion richtige Post Build überprüfen (sorry, nicht über deploy Maven)

enter image description here

1

Wenn Sie das hinzufügen Deploy Aktion zu den Maven Release-Zielen, dann brauchen Sie keinen separaten Schritt im Jenkins-Job. Diese Ziele werden nur beim Release ausgeführt: perform. Etwas wie:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId> 
    <configuration> 
    <goals>deploy</goals> 
    </configuration> 
</plugin> 

Peter Schuetze beantwortet diese in den Kommentaren und sollte wohl diese Antwort schreiben die Prämie zu erhalten.

0

Mein Kommentar zu der Frage ist offenbar die Antwort. ;)

Können Sie das Bereitstellungsziel nicht zu den Freigabezielen hinzufügen? Ich würde vermuten, dass es dann nur ausgeführt wird, wenn es ein Release ist.

Verwandte Themen