6.6 KiB
Passe das Script
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh
so an, dass es das Script
./jenkins-ci-rme/jenkins_builder_ubuntu26.sh
innerhalb des von new_docker_build.sh gebauten bzw. verwendeten Docker-Images ausführt.
Kontext:
-
Script A: ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh
-
Script B: ./jenkins-ci-rme/jenkins_builder_ubuntu26.sh
-
Script C: ./rpmbuild/make_rpm_ubuntu26.py
-
Script B ruft Script C auf, um RPM- und DEB-Pakete zu erzeugen.
-
Das Docker-Image, das von Script A gebaut oder verwendet wird, soll alle notwendigen Tools enthalten, damit Script B und Script C erfolgreich laufen.
-
Die erzeugten RPM-/DEB-Pakete sollen nach dem Docker-Lauf auf dem ausführenden Host verfügbar sein, z. B. über einen bind mount / Ausgabe-Mountpunkt.
Gewünschte Änderungen:
-
Neue Option in Script A hinzufügen
-
Füge eine neue CLI-Option hinzu, z. B.:
--run-jenkins-builder
-
Wenn diese Option gesetzt ist, soll Script A nach dem Docker-Image-Build bzw. beim Docker-Run das Script B innerhalb des Docker-Containers ausführen.
-
-
Ausgabe-Mountpunkt hinzufügen
-
Füge eine Option hinzu, z. B.:
--package-output-dir
-
Dieser Pfad liegt auf dem Host.
-
Der Pfad soll beim Docker-Run in den Container gemountet werden.
-
Die von Script B/C erzeugten RPM-/DEB-Pakete sollen anschließend dort verfügbar sein.
-
Falls kein Pfad angegeben wird, verwende einen sinnvollen Default, z. B.:
./packages-out
-
-
Docker-Image erweitern
- Stelle sicher, dass im Docker-Image alle Tools installiert sind, die für Script B und C benötigt werden.
- Analysiere dazu:
- ./jenkins-ci-rme/jenkins_builder_ubuntu26.sh
- ./rpmbuild/make_rpm_ubuntu26.py
- ggf. vorhandene Dockerfiles oder Paketlisten
- Installiere fehlende Tools im Image, z. B. je nach Bedarf:
- python3
- python3-pip
- rpm/rpmbuild
- debhelper
- dpkg-dev
- fakeroot
- build-essential
- git
- cmake
- ninja-build
- qt6-related packages
- sonstige tatsächlich benötigte Abhängigkeiten
-
Docker-Ausführung
- Wenn
--run-jenkins-buildergesetzt ist, soll Script A den Container so starten, dass:- das Repository bzw. der relevante Workspace im Container verfügbar ist
- Script B im Container ausgeführt wird
- der Paket-Ausgabeordner vom Host in den Container gemountet wird
- am Ende die erzeugten
.rpmund.debDateien auf dem Host sichtbar sind Zusätzliche Anforderungen zu Umgebungsvariablen:
- Wenn
Script A benötigt für den neuen Ablauf folgende Variablen:
PROJECT LTS flavor: qatar | ahtc | guez (cmake -D_pname) OS_VERSION Ubuntu version, e.g. 26.04 LTS_VERSION Major.minor LTS version, e.g. 1.0 GUEZ_MODE ON | OFF — cmake -DGUEZ_MODE WORKSPACE Jenkins workspace path, normally set automatically by Jenkins PROJECT_BASE_DIR Path used by make_rpm_ubuntu26.py as the source tree BUILD_NUMBER Jenkins build number, used as release in DEB version BUILD_TAG Jenkins build tag
Für den Docker-Aufruf aus Script A sollen mindestens diese Werte gesetzt bzw. in den Container übergeben werden:
PROJECT=guez GUEZ_MODE=ON PROJECT_BASE_DIR="${MIGRATE_PIPELINE_ROOT}/qt-migration-legatus/qt6-after/qt6-migrated-legatus"
Die übrigen benötigten Variablen sollen robust bestimmt oder sinnvoll gesampelt werden, falls sie außerhalb von Jenkins nicht gesetzt sind:
OS_VERSION: - wenn möglich aus dem Docker-Image bzw. Container bestimmen, z. B. über /etc/os-release - erwarteter Wert für Ubuntu 26.04: 26.04
LTS_VERSION: - falls nicht gesetzt, sinnvollen Default verwenden, z. B. 1.0 - optional als CLI-Option überschreibbar machen
WORKSPACE: - falls nicht gesetzt, auf den Repository-/Arbeitsverzeichnis-Pfad im Container setzen
BUILD_NUMBER: - falls nicht gesetzt, auf einen lokalen Default setzen, z. B. 0 oder 1 - wichtig: Wert muss für make_rpm_ubuntu26.py verwendbar sein
BUILD_TAG: - falls nicht gesetzt, aus PROJECT, BUILD_NUMBER und lokalem Kontext erzeugen, z. B. local-${PROJECT}-${BUILD_NUMBER}
Die Variablen sollen beim Docker-Run explizit mit -e in den Container übergeben werden, damit jenkins_builder_ubuntu26.sh und make_rpm_ubuntu26.py dieselbe Umgebung sehen wie in Jenkins.
Beispielhafte Übergabe:
-e PROJECT=guez -e GUEZ_MODE=ON -e OS_VERSION="${OS_VERSION}" -e LTS_VERSION="${LTS_VERSION}" -e WORKSPACE="${CONTAINER_WORKSPACE}" -e PROJECT_BASE_DIR="${PROJECT_BASE_DIR}" -e BUILD_NUMBER="${BUILD_NUMBER}" -e BUILD_TAG="${BUILD_TAG}"
Akzeptanzkriterium zusätzlich:
- Beim neuen Ablauf mit
--run-jenkins-buildersind alle oben genannten Variablen im Container gesetzt. PROJECT,GUEZ_MODEundPROJECT_BASE_DIRhaben die vorgegebenen Werte.- Die restlichen Werte werden entweder aus der vorhandenen Umgebung übernommen, aus dem Docker-Image/Container bestimmt oder mit nachvollziehbaren lokalen Defaults gesetzt.
-
Robustheit
- Prüfe, ob Script B existiert und ausführbar ist.
- Falls nötig, setze executable permissions oder rufe es explizit mit
bashauf. - Prüfe, ob der Ausgabeordner existiert; falls nicht, erstelle ihn.
- Verwende absolute Pfade für Docker volume mounts.
- Brich bei Fehlern mit aussagekräftigen Fehlermeldungen ab.
- Verwende
set -euo pipefail, sofern passend und noch nicht vorhanden. - Bestehendes Verhalten von Script A darf ohne die neue Option nicht verändert werden.
-
Dokumentation
- Aktualisiere ggf. vorhandene README- oder Hilfetexte.
- Die Usage-Ausgabe von Script A soll die neuen Optionen beschreiben.
-
Tests / Validierung
-
Führe soweit möglich ShellCheck oder eine vergleichbare Prüfung für geänderte Shell-Scripts aus.
-
Prüfe mindestens syntaktisch:
- Script A
- Script B
-
Wenn möglich, teste den neuen Ablauf mit:
./qt-migration-legatus/qt6-after/qt6-migrated-legatusnew_docker_build.sh --run-jenkins-builder --package-output-dir ./packages-out
-
Akzeptanzkriterien:
- Script A hat eine neue Option zum Ausführen von Script B im Docker-Container.
- Script B läuft innerhalb des Docker-Images D, das durch Script A gebaut/verwendet wird.
- Script C wird über Script B ausgeführt.
- Das Docker-Image enthält alle notwendigen Build- und Packaging-Tools.
- Die erzeugten RPM-/DEB-Pakete sind nach Ende des Laufs auf dem Host unter dem angegebenen Ausgabeordner verfügbar.
- Ohne neue Option bleibt das bisherige Verhalten von Script A unverändert.
- Änderungen sind nachvollziehbar, robust und dokumentiert.