Archivieren Sie die Artefakte in Jenkins

132

Könnte mir bitte jemand die Idee von Artefakten im Erstellungsprozess erklären ?

Ich habe das Arbeitsbereichsverzeichnis, in dem ich den Code zum Kompilieren und Ausführen meiner Ant-Skripte usw. auschecke. Am Ende erhalte ich in meinem Fall eine JAR-Datei, die zur Installation bereit ist. Wird das als Artefakt angesehen?

Wo soll ich meinem Build-Skript sagen, dass es die JAR-Datei ablegen soll? Im Arbeitsbereichsverzeichnis? Meine JAR-Datei erhält einen eindeutigen Dateinamen, abhängig von Variablen wie BUILD_IDund wie. Wie kann ich Jenkins mitteilen, welche JAR-Datei ausgewählt werden soll?

EDIT: Okay, also habe ich versucht, so etwas zu machen:

Geben Sie hier die Bildbeschreibung ein

Der Pfad ist in meinem Arbeitsbereich noch nicht vorhanden, da das Build-Skript ihn erstellen soll, und natürlich sind die Dateien .jarund .propertiesnicht vorhanden, da sie noch nicht generiert wurden. Warum gibt es mir dann einen Fehler? Scheint, als würde mir etwas fehlen.

Löscht Jenkins auch die Artefakte nach jedem Build (nicht die archivierten Artefakte, ich weiß, ich kann ihm sagen, dass er diese löschen soll)? Andernfalls wird die Festplatte ziemlich schnell verstopfen.

Michael
quelle
12
Der Fehler, den Sie erhalten, ist höchstwahrscheinlich kein Problem. Wenn der Erstellungsprozess erfolgreich ist, sollte er erstellt werden. Speichern und probieren Sie dies aus. Es ist völlig normal, dass beim Einrichten der Pipeline einige fehlerhafte Builds vorhanden sind. :)
Anders Lindahl
3
Keine Angst vor der Warnung. Wenn ein Artefakt nach dem Erstellen generiert wird, wird es von Ihrer Konfiguration archiviert (obwohl auf der Konfigurationsseite eine Warnung angezeigt wird).
Huang F. Lei

Antworten:

68

Ihr Verständnis ist richtig, ein Artefakt im Sinne von Jenkins ist das Ergebnis eines Builds - die beabsichtigte Ausgabe des Build-Prozesses.

Eine gemeinsame Konvention ist das Ergebnis eines Builds in ein setzen build, targetoder binVerzeichnis.

Der Jenkins-Archivierer kann mit globs ( target/*.jar) problemlos die richtige Datei abrufen, selbst wenn Sie pro Build einen eindeutigen Namen haben.

Anders Lindahl
quelle
@Andres danke auch, löscht Jenkins die Artefakte nach jedem Build (nicht die archivierten Artefakte, ich weiß, ich kann ihm sagen, dass er diese löschen soll)? oder bin ich dafür verantwortlich, es selbst zu tun?
Michael
6
@michael: Sie müssen den Arbeitsbereich selbst bereinigen. Es wird empfohlen, vor jedem Build mindestens das Zielverzeichnis zu löschen, um sicherzustellen, dass Sie nicht die Ergebnisse eines früheren Builds erhalten.
Anders Lindahl
@Michael Sie können einen 'sauberen' Build-Schritt hinzufügen. ZB mit Maven -sh 'mvn clean package'
Snowcrash
@AndersLindahl - "Die übliche Konvention besteht darin, das Ergebnis eines Builds in ein Build-, Ziel- oder Bin-Verzeichnis zu stellen." Sie beziehen sich auf ein bin-Verzeichnis, das von allen Projekten gemeinsam genutzt wird? Wie mache ich das? Ist es eine Post-Build-Aktion?
user3240688
@ user3240688 Nein, ich beziehe mich auf Projektordner pro Projekt. Wenn Sie Artefakte aus mehreren Jobs in einem einzigen freigegebenen Ordner speichern möchten, müssen Sie die Artefakte beispielsweise mit einem der Plugins "Über $ PROTOCOL veröffentlichen" veröffentlichen.
Anders Lindahl
11

Ein Artefakt kann ein beliebiges Ergebnis Ihres Erstellungsprozesses sein. Wichtig ist, dass es keine Rolle spielt, auf welchem ​​Client es erstellt wurde. Es wird vom Arbeitsbereich zurück zum Master (Server) übertragen und dort mit einem Link zum Build gespeichert. Der Vorteil ist, dass es auf diese Weise versioniert ist, Sie nur ein Backup auf Ihrem Master einrichten müssen und dass alle Artefakte über die Weboberfläche zugänglich sind, auch wenn alle Build-Clients offline sind.

Es ist möglich, einen regulären Ausdruck als Artefaktnamen zu definieren. In meinem Fall habe ich alle Dateien, die ich speichern wollte, während des Builds in einer Datei mit einem konstanten Namen komprimiert.

Matthias Alleweldt
quelle
3
"Es ist möglich, einen regulären Ausdruck als Artefaktnamen zu definieren. In meinem Fall habe ich alle Dateien komprimiert." Können Sie das erklären? es klingt genau das was ich will?
Chris Milburn
7

Löscht Jenkins die Artefakte nach jedem Build? (nicht die archivierten Artefakte, ich weiß, ich kann es anweisen, diese zu löschen)

Nein, Hudson / Jenkins löscht den Arbeitsbereich nach einem Build nicht von selbst. Möglicherweise haben Sie Aktionen in Ihrem Erstellungsprozess, die Build-Artefakte löschen, überschreiben oder verschieben, von wo Sie sie verlassen haben. In der Jobkonfiguration in den erweiterten Projektoptionen (die erweitert werden müssen) gibt es eine Option namens "Arbeitsbereich vor dem Erstellen bereinigen", mit der der Arbeitsbereich zu Beginn eines neuen Builds gelöscht wird.

Codex24
quelle
1

In Jenkins 2.60.3 gibt es eine Möglichkeit, Build-Artefakte (nicht die archivierten Artefakte) zu löschen, um Festplattenspeicher auf dem Build-Computer zu sparen. Aktivieren Sie im Abschnitt "Allgemein" die Option "Alte Builds verwerfen" mit der Strategie "Protokollrotation" und gehen Sie dann zu den erweiterten Optionen. Es werden zwei weitere Optionen angezeigt, die sich darauf beziehen, Build-Artefakte für den Job basierend auf der Anzahl der Tage oder Builds beizubehalten.

Die Einstellungen, die für mich funktionieren, sind 1 für "Maximale Anzahl von Builds, die mit Artefakten aufbewahrt werden sollen" und anschließend eine Aktion nach dem Erstellen, um die Artefakte zu archivieren. Auf diese Weise werden alle Artefakte aus allen Builds archiviert, alle Informationen aus Builds werden gespeichert, aber nur der letzte Build behält seine eigenen Artefakte.

Verwerfen Sie alte Build-Optionen

Matt
quelle