Einführung
Fieldlight Studio möchte drei Gartenfotografien teilen. Die Originale sind bereit, doch große Originaldateien sind für eine schnelle Durchsicht unpraktisch. Du verwendest ein vorbereitetes Bildwerkzeug, um kleine Vorschaubilder und einen Kontaktbogen zu erstellen: ein Bild, das die gesamte Sammlung auf einen Blick zeigt.
Das Werkzeug ist auf einem verbundenen Jenkins-Agenten installiert. Deine erste Aufgabe ist es, den Agenten auszuwählen, der die Arbeit tatsächlich ausführen kann. Anschließend reagierst du auf die Anforderung einer kleineren Auslieferung, bewahrst beide erfolgreichen Versionen auf und schützt die Originalfotografien.
Vorausgesetzt werden die Navigation auf Jenkins-Seiten und das Erkennen einer kurzen Declarative Pipeline. Java-Programmierung, Bildbearbeitungsbefehle, Docker-Administration oder die Installation von Agenten sind nicht erforderlich. Die bereitgestellten Programme und Agentenverbindungen sind vorbereitet. Die beiden Agenten sind separate Container auf einer Übungs-VM: Ihre Dateisysteme sind unabhängig, sie teilen sich jedoch deren Kernel. Dies ist keine Cloud-Flotte. Fieldlight ist fiktiv, und die Fotografien sind KI-generierte Lernmaterialien. Die Dauer ist eine Schätzung des Autors, keine mit Anfängern gemessene Zeit.
Ordne die Arbeit dem passenden Agenten zu
In diesem Schritt untersuchst du die Originale, beobachtest einen erwarteten Fehler wegen eines fehlenden Werkzeugs und planst die Arbeit auf dem Agenten mit Bildverarbeitungsfähigkeit ein. Beginne in Photo Desk.
Die Sammlung Garden Stories zeigt Lavendel, einen Gartenweg und eine Gießkanne. Öffne jede Fotografie, untersuche ihr vollständiges Original und kehre mit der Browseraktion Back zum Desk zurück. Wähle Download original für die Lavendelfotografie und bewahre sie zum Vergleich auf. Die Originale sind 1536 Pixel breit und müssen unverändert bleiben. Der Desk zeigt anfangs No completed collection yet.
Wechsle zu Jenkins. Der Jenkins-Controller hält die Jobkonfiguration vor und koordiniert Builds. Ein Agent ist ein verbundener Prozess, der Buildarbeit ausführt. Ein Node ist sein konfigurierter Eintrag in Jenkins. Ein Executor ist ein verfügbarer Arbeitsausführungsplatz auf diesem Node. Hier hat jeder Agent einen Executor und kann daher jeweils einen zugewiesenen Arbeitsblock ausführen.
Wähle auf dem Dashboard Manage Jenkins und dann Nodes. Untersuche nacheinander image-studio und pack-studio. Beide sind verbunden. Ihre Fähigkeitslabels heißen photo-imaging und photo-packing; beide haben außerdem linux. Ein Label ist eine Bedingung für die Einplanung, kein Softwareinstallationsprogramm. Das Bildwerkzeug gibt es nur auf image-studio, das Verpackungswerkzeug nur auf pack-studio. Dies sind tatsächlich separate Agentenprozesse und Container.
Kehre über das Logo Jenkins oben links zum Dashboard zurück und öffne dann preview-photos. Wähle Configure und anschließend den Abschnitt Pipeline. Der Editor Script enthält den vorbereiteten Job. Lies seine Struktur, bevor du etwas änderst:
agent noneam Anfang bedeutet, dass die gesamte Pipeline keinen einzelnen Agenten reserviert. Die Stage wählt ihren eigenen Agenten.stage('Prepare photos')benennt die Arbeit. Ihragent { label 'photo-packing' }fordert derzeit die Verpackungsfähigkeit an.stepsenthält Operationen.shführt den Befehl in Anführungszeichen in der Shell des ausgewählten Agenten aus. Das bereitgestellte Programm/opt/fieldlight/prepare-photoserstellt Vorschaubilder;--width 480fordert eine Breite von 480 Pixeln an und erhält das ursprüngliche Seitenverhältnis. Einfache Anführungszeichen halten diesen Befehl als eine Groovy-Zeichenkette zusammen.deleteDir()leert das zugewiesene Arbeitsverzeichnis dieses Jobs, also das temporäre Verzeichnis seiner Builddateien. Der erste Aufruf sorgt für einen sauberen Anfang. Im Abschnittpostleert der Aufruf unteralwaysdas Arbeitsverzeichnis nach der Stage, auch nach einem Fehler. Er entfernt nicht die Originale unter/opt/fieldlight/originals.archiveArtifactsbewahrt passende Dateien vor der Bereinigung in Jenkins auf. Beiprepared/**schließt**Dateien in verschachtelten Verzeichnissen ein.fingerprint: truezeichnet ihre Dateiidentitäten zur Nachverfolgung auf; dies ist weder eine Kundenfreigabe noch eine Signatur.
Kehre zur Jobseite zurück, ohne das Skript zu bearbeiten. Wähle einmal Build Now. Öffne den neuen nummerierten Build in Build History und wähle dann Console Output. Warte auf den Abschluss. Dieser erste Fehler ist zu erwarten: Die Konsole nennt pack-studio, meldet dann, dass /opt/fieldlight/prepare-photos not found war, und endet mit FAILURE. Der angeforderte Agent ist verbunden, ihm fehlt aber das Werkzeug für diese Rolle. Das unterscheidet sich vom endlosen Warten auf einen nicht verbundenen oder zu keinem Label passenden Agenten.
Kehre zu preview-photos zurück, wähle Configure und öffne erneut Pipeline. Ändere nur das Label der Stage von photo-packing auf photo-imaging. Für eine vollständig kopierbare Fassung klicke in Script, markiere alles mit Ctrl+A unter Windows/Linux oder Command+A unter macOS und ersetze den Inhalt durch:
pipeline {
agent none
stages {
stage('Prepare photos') {
agent { label 'photo-imaging' }
steps {
deleteDir()
sh '/opt/fieldlight/prepare-photos --width 480'
archiveArtifacts artifacts: 'prepared/**', fingerprint: true
}
post {
always { deleteDir() }
}
}
}
}
Behalte den Werkzeugbefehl, die Originale, die Archivierung und beide Bereinigungsaufrufe bei. Wähle Save und dann Build Now. Öffne Console Output des neuen Builds und warte auf Finished: SUCCESS. Die Ausgabe sollte image-studio nennen, 3 previews at 480 pixels wide melden und dann Archiving artifacts, Recording fingerprints sowie das abschließende deleteDir zeigen. Dies weist tatsächliche Arbeit auf dem fähigen Agenten nach, nicht nur eine umbenannte Meldung.
Falls du einen Groovy-Syntaxfehler siehst, kehre zu Configure zurück, stelle das vollständige Skript oben wieder her, speichere und starte einen neuen Build. Falls ein falsch geschriebenes Label einen Build in der Warteschlange lässt, brich diesen Eintrag über sein Abbruchsymbol ab, wähle im Bestätigungsdialog Yes, korrigiere das Label und baue erneut. Ein Schreibfehler im Befehl erscheint in der Konsole als fehlender Befehl; stelle den bereitgestellten Pfad wieder her, statt ein anderes Werkzeug zu installieren. Behalte den ursprünglichen fehlgeschlagenen Build und den gesamten späteren Verlauf bei. Gewöhnliche Fehler lassen sich mit einem weiteren gespeicherten Skript und Build korrigieren; setze die VM nicht zurück.
Wechsle zu Photo Desk und lade die Seite neu. Wähle Open prepared collection. Die drei kleinen Vorschaubilder müssen dieselben Gartenmotive wie die Originale zeigen. Wähle Open contact sheet, um alle drei gemeinsam zu sehen; kehre mit der Browseraktion Back zurück. Öffne Caption table und Image details und kehre jeweils mit Back zurück. captions.csv ist eine reine Texttabelle mit kommagetrennten Werten: Die erste Zeile benennt die Spalten, und jede folgende Zeile beschreibt ein Bild. Sie ordnet jede Bildunterschrift ihrer Datei unter images/ zu und erfasst die Breite 480 und die Höhe 320; preparation.json bezeichnet garden und die Breite 480.
Kehre zu Jenkins zurück und öffne die Seite des erfolgreichen Builds. Unter Build Artifacts öffnen die einzelnen PNG-Dateinamenlinks die Bilder im Browser. Wähle für einen vollständigen Download die Überschrift Build Artifacts und dann (all files in zip) auf der Dateibrowserseite. Speichere archive.zip in einem Ordner für deine 480-Pixel-Version und entpacke dort die gesamte ZIP-Datei. Ihre sechs Dateien befinden sich unter archive/prepared/, einschließlich des Unterverzeichnisses images/. Öffne archive/prepared/images/garden-01.png und archive/prepared/contact-sheet.png im Browser oder Bildbetrachter und lies archive/prepared/captions.csv in einem Texteditor. Ihr sichtbarer Inhalt muss zur Sammlung passen. Das Lavendelvorschaubild hat 480 × 320 Pixel, während das heruntergeladene Original 1536 × 1024 behält. Bewahre die Nummer dieses erfolgreichen Builds und den vollständig entpackten Ordner für den nächsten Schritt auf. Diese aufbewahrten Dateien bleiben verfügbar, nachdem das Arbeitsverzeichnis geleert wurde.

Die vorbereitete Sammlung zeigt dieselben Lavendel-, Gartenweg- und Gießkannenmotive wie die Originale. Untersuche mit dem Kontaktbogen und den Dateilinks die tatsächlich aufbewahrte Ausgabe.
Liefere einen kleineren Vorschaubildsatz aus
In diesem Schritt erfüllst du eine Auslieferungsanforderung von 320 Pixeln und bewahrst den früheren 480-Pixel-Satz zum Vergleich auf. Beginne in Photo Desk und kehre mit Back to originals zu den Originalen zurück. Prüfe, ob alle drei vollständigen Originale verfügbar bleiben.
Der Kunde benötigt jetzt Vorschaubilder mit einer Breite von genau 320 Pixeln. Das bereitgestellte Programm nimmt diese Anforderung über seine vorhandene Option --width entgegen; du bearbeitest oder ersetzt das Bildprogramm nicht. Wechsle zu Jenkins, kehre zu preview-photos zurück und wähle Configure → Pipeline. Ändere --width 480 auf --width 320 im Befehl sh. Das vollständige Skript sollte jetzt so aussehen:
pipeline {
agent none
stages {
stage('Prepare photos') {
agent { label 'photo-imaging' }
steps {
deleteDir()
sh '/opt/fieldlight/prepare-photos --width 320'
archiveArtifacts artifacts: 'prepared/**', fingerprint: true
}
post {
always { deleteDir() }
}
}
}
}
Wähle Save und dann Build Now. Warte, bis der neue Build mit SUCCESS abgeschlossen ist. Prüfe in Console Output, ob image-studio die Arbeit ausgeführt hat, das Programm 320 pixels wide gemeldet hat und Archivierung sowie Bereinigung ausgeführt wurden. Falls die Konsole noch 480 zeigt, prüfe, ob du das geänderte Skript gespeichert und den neuen Build statt des früheren geöffnet hast.
Wähle auf der Seite dieses Builds Build Artifacts und dann (all files in zip). Speichere und entpacke diese neue archive.zip vollständig in einen anderen Ordner als deine 480-Pixel-Version. Öffne die Dateien unter ihrem Verzeichnis archive/prepared/. Alle drei Vorschaubilder sollten jetzt 320 × 213 Pixel haben. Die Höhe von 213 Pixeln ist das gerundete Ergebnis beim Erhalten des Seitenverhältnisses des Originals mit 1536 × 1024 Pixeln. Der Kontaktbogen enthält weiterhin alle drei Motive in derselben Reihenfolge; er ist eine separate Übersicht, kein viertes verkleinertes Original. In captions.csv müssen Dateiname, Bildunterschrift und Abmessungen jedes Bildes übereinstimmen. preparation.json muss garden und die Breite 320 angeben.
Wechsle zu Photo Desk, lade die Seite neu und wähle Open prepared collection. Untersuche alle drei neuen Vorschaubilder, den Kontaktbogen und beide Metadatendateien. Kehre zu den Originalen zurück und prüfe, ob ihr Inhalt in voller Größe unverändert ist. Wechsle dann zu Jenkins, öffne die notierte frühere erfolgreiche Buildnummer und lade deren vollständige ZIP-Datei erneut über Build Artifacts → (all files in zip) herunter. Entpacke sie in einen weiteren neuen Ordner: Ihr Lavendelvorschaubild muss weiterhin 480 × 320 Pixel haben. Das Erstellen einer neuen Version sollte kein altes Archiv umschreiben.
Falls ein Download eine unerwartete Größe oder ein unerwartetes Motiv hat, prüfe die Buildnummer und die gespeicherte Breitenoption, korrigiere dann das Skript und starte einen neuen Build. Erhalte die Originalfotografien, bereitgestellten Werkzeuge, verbundenen Agenten, Fähigkeitslabels und den vollständigen Buildverlauf. Kopiere keine Dateien zwischen Agentendateisystemen, entferne die Bereinigung nicht und ersetze das Archiv nicht durch eines aus einem anderen Durchlauf. Schließe mit einem tatsächlich erfolgreichen Build des gespeicherten Skripts ab. Du hast einen kleineren nutzbaren Satz, eine unveränderte frühere Version und unveränderte Originale.
Zusammenfassung
Du hast eine tatsächliche Bildverarbeitungsfähigkeit dem passenden Label eines Jenkins-Agenten zugeordnet, einen erwarteten Fehler wegen eines fehlenden Werkzeugs verstanden und nutzbare Vorschaubilder erzeugt. Durch Ändern der Breitenoption entstand eine kleinere Auslieferung, ohne die Originale oder das frühere Archiv zu ändern. Die systemeigenen Artefakte blieben nach dem Leeren des Arbeitsverzeichnisses erhalten; das nächste unabhängige Lab verwendet zwei separate Arbeitsverzeichnisse und eine temporäre Übergabe innerhalb desselben Durchlaufs.



