Begriff
Artifact
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Wenn du einen Kuchen backst, hast du am Anfang Zutaten (Mehl, Eier = Source Code). Am Ende hast du einen fertigen Kuchen. In der Softwareentwicklung ist der "Kuchen" das Artefakt. Es ist das Ergebnis des Bau-Prozesses (Build). Das Artefakt ist das, was der Kunde bekommt oder was auf dem Server installiert wird. Beispiele:
- Eine
.exeDatei (Windows). - Eine
.apkDatei (Android App). - Ein Docker Image.
Merksatz: Ein greifbares Nebenerzeugnis oder Endergebnis des Softwareentwicklungsprozesses, meist eine kompilierte Binärdatei, ein Paket oder ein Dokument, das deployt werden kann.
In einer Pipeline (CI/CD):
- Source: Entwickler checkt Code ein (
main.c). - Build: Der Compiler macht daraus
app.exe. - Upload: Die
app.exewird als "Build Artifact" gespeichert (z. B. in GitHub Actions oder Jenkins). - Deploy: Der Server lädt genau dieses Artefakt herunter. Wichtig: Du deployst niemals den Source Code auf den Server, sondern immer das getestete Artefakt.
1. Reproducible Builds
Ein Artefakt sollte reproduzierbar sein.
Wenn ich den gleichen Source Code mit den gleichen Tools baue, sollte bit-genau das gleiche Artefakt herauskommen.
Das ist extrem schwer (Zeitstempel, Pfade im Binary, Compiler-Randomness).
Warum? Sicherheit. Nur so kann man beweisen, dass die bank.exe wirklich aus dem geprüften Quellcode stammt und keine Backdoor enthält (Supply Chain Security).
2. Transitive Artifacts
Nicht nur das Endprodukt ist ein Artefakt.
Auch Zwischenschritte (Object Files .o, Libraries .dll, Test Reports .xml) sind Artefakte.
Man unterscheidet:
- Release Artifacts: Permanent gespeichert (für Kunden).
- Snapshot/Build Artifacts: Temporär, werden nach 30 Tagen gelöscht.
3. Signing (Code Signing)
Ein Artefakt ist wertlos, wenn man ihm nicht vertraut. Deshalb werden Artefakte kryptografisch signiert (mit einem Private Key). Windows warnt: "Unbekannter Herausgeber", wenn die Signatur fehlt. In Containern nutzt man Cosign oder Docker Content Trust, um sicherzustellen: "Dieses Image kommt wirklich von unserer Firma."
1. Artifact Registry (Nexus / Artifactory)
Wo speichern Firmen Terabytes an Artefakten? Git ist dafür (wegen der Git Database History) der falsche Ort.
Man nutzt Server wie JFrog Artifactory oder Sonatype Nexus.
Sie fungieren als riesige Schubladen für .jar, .npm oder Docker-Images. Sie cachen auch offizielle Public Repos (wie Maven Central).
Vorteil: Wenn npmjs.com ausfällt (oder ein Entwickler wie beim left-pad Skandal seinen Code löscht), baut die interne Pipeline weiterhin erfolgreich, weil Artifactory einen lokalen Cache-Klon bereitstellt.
2. SBOM (Software Bill of Materials)
Mit Supply Chain Angriffen (wie SolarWinds) reicht die .exe allein nicht mehr. Regierungen und Konzerne fordern zunehmend eine SBOM.
Das ist ein Meta-Artefakt (meist in JSON, Formate: SPDX oder CycloneDX), das dem fertigen Produkt beiliegt.
Es ist die "Zutatenliste". Es listet exakt auf: "Dieses Artefakt enthält die Bibliothek log4j in Version 2.14."
Wird in log4j eine Lücke gefunden, müssen Admins nicht raten, ob ihr Server betroffen ist, sondern scannen einfach alle SBOMs.
3. Die OCI Image Specification
Bei Docker ist das Artefakt das "Image".
Unter der Haube definiert die OCI (Open Container Initiative), wie dieses Artefakt physisch auf der Festplatte aussieht. Es ist eigentlich nur ein Tarball (ein .tar-Archiv) voller Layer, kombiniert mit einer JSON (JavaScript Object Notation)-Manifest-Datei.
Die Manifest-Datei ist das Herzstück: Sie listet zusammenhängende Hash-Werte (SHA256) der einzelnen Dateisystem-Schichten (Layer) auf, sodass die Container-Runtime weiß, wie sie den "Kuchen" aus dem Dateisystem stapeln muss.
Quick-Check
Ist ein Word-Dokument ein Artefakt?
Im Projektmanagement (Scrum) ja ("Design Artifact"). In DevOps eher nein, dort meint man ausführbaren Code.Warum speichert man Artefakte nicht in Git?
Git ist "Delta-basiert" (speichert nur Zeilen-Änderungen). Binärdateien ändern sich komplett bei jedem Build. Das Repo würde nach 1 Woche 50 GB groß sein ("Repo Bloat").Was ist ein "Fat Jar"?
Ein Java-Artefakt, das alle Abhängigkeiten (Libraries) in einer einzigen riesigen Datei enthält. Vorteile: Einfaches Deployment (java -jar app.jar). Nachteile: Groß und schwer zu patchen.