Praxis: Build-Ergebnisse aufbewahren, veröffentlichen und versionieren
Artefaktverwaltung
Ein Job-Artefakt überträgt ein Build-Ergebnis zwischen Jobs. Ein versioniertes Paket bietet eine bestimmte Version zum Download, auch nachdem temporäre Job-Artefakte abgelaufen sind.
Ein kleines Build-Ergebnis erzeugen und aufbewahren
Für die Übung wird ein separates, geklontes Projekt mit aktivierter Package Registry, Berechtigung zum Pushen von Tags und einem Docker- oder Kubernetes-Runner benötigt. Veröffentlichung und Download finden innerhalb dieses Projekts statt. Ersetzen Sie dessen .gitlab-ci.yml durch:
stages:
- build
- test
- publish
build:
stage: build
image: alpine:3.22
script:
- mkdir -p build dist
- printf '%s\n' "$CI_COMMIT_SHA" > build/commit.txt
- tar -czf dist/build.tar.gz -C build commit.txt
- cd dist && sha256sum build.tar.gz > SHA256SUMS
artifacts:
name: "build-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA"
paths:
- dist/
expire_in: 1 day
access: developer
verify:
stage: test
image: alpine:3.22
needs:
- job: build
artifacts: true
script:
- cd dist && sha256sum -c SHA256SUMS
- tar -xzf build.tar.gz
- test "$(cat commit.txt)" = "$CI_COMMIT_SHA"
publish:
stage: publish
image: alpine:3.22
needs:
- job: build
artifacts: true
- job: verify
artifacts: false
rules:
- if: '$CI_COMMIT_TAG'
before_script:
- apk add --no-cache curl
script:
- |
for file in build.tar.gz SHA256SUMS; do
curl --fail-with-body \
--header "JOB-TOKEN: $CI_JOB_TOKEN" \
--upload-file "dist/$file" \
"$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/generic/course-build/$CI_COMMIT_TAG/$file"
done
- Die Konfiguration committen und auf einen Branch pushen. Prüfen, ob
buildundverifyerfolgreich sind undpublishfehlt. - Das Artefaktarchiv des Jobs
buildherunterladen. Darindist/build.tar.gzunddist/SHA256SUMSsuchen. Der Jobverifyprüft die Prüfsumme und den Quell-Commit im Tarball. - Die Ablaufangabe auf der Jobseite ablesen. Unter
Settings > CI/CD > Artifactsdie Keep-latest-Einstellung prüfen. Sie kann Artefakte überexpire_inhinaus erhalten, ebenso die AuswahlKeepauf einer Jobseite.
Erwartetes Ergebnis sind ein benanntes Artefakt mit Ablaufregel und eine erfolgreiche Prüfsummenprüfung. Die Regel wird jetzt geprüft; die Löschung erfolgt später und asynchron.
Zwei Versionen veröffentlichen und herunterladen
Versehen Sie im Projektklon den geprüften Commit mit einem Tag und pushen Sie diesen:
git tag v0.1.0
git push origin v0.1.0
- Die Tag-Pipeline öffnen und prüfen, ob alle drei Jobs erfolgreich sind.
- Unter
Deploy > Package registrydas Paketcourse-build, Versionv0.1.0, öffnen. build.tar.gzundSHA256SUMSüber die Paketseite in ein neues, leeres Verzeichnis herunterladen. Darin ausführen:
sha256sum -c SHA256SUMS
tar -xzf build.tar.gz
cat commit.txt
Unter macOS lautet der erste Befehl shasum -a 256 -c SHA256SUMS. Erwartet wird build.tar.gz: OK. Vergleichen Sie commit.txt mit der vollständigen Commit-SHA für v0.1.0 unter Code > Tags.
Wechseln Sie zurück in den Projektklon. Erzeugen Sie einen zweiten Commit ohne Änderung an der Anwendung und veröffentlichen Sie ihn unter einem neuen Tag:
git commit --allow-empty -m "chore: prepare v0.2.0"
git push
git tag v0.2.0
git push origin v0.2.0
Wiederholen Sie Download und Prüfung für v0.2.0 in einem weiteren leeren Verzeichnis. Beide Versionen müssen verfügbar bleiben, die Prüfsummenprüfung bestehen und unterschiedliche Commit-SHAs enthalten, die ihren Tags entsprechen.
Der Upload verwendet das vordefinierte CI_JOB_TOKEN. Verwenden Sie jedes Versionstag für genau eine Veröffentlichung. Paketbereinigung und Ablauf von Job-Artefakten haben getrennte Regeln.
Die GitLab-Dokumentationen zu Job-Artefakten und der Generic Package Registry erläutern Aufbewahrung und Authentifizierung.
Nutzen Sie Job-Artefakte für temporäre Übergaben in der Pipeline. Veröffentlichen Sie Ergebnisse mit Quell-Commit und Prüfsumme, wenn eine stabile Version benötigt wird.