Adds rpm/deb package building option

This commit is contained in:
torsten committed 2026-10-08 10:29:51 +00:00
1 parent 44b97d7750
commit f5349810fd
2 files changed
+160 -1

No files matched your search

+159
View File
@@ -0,0 +1,159 @@
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:
1. 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.
2. Ausgabe-Mountpunkt hinzufügen
- Füge eine Option hinzu, z. B.:
--package-output-dir <path>
- 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
3. 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
4. Docker-Ausführung
- Wenn `--run-jenkins-builder` gesetzt 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 `.rpm` und `.deb` Dateien auf dem Host sichtbar sind
Zusätzliche Anforderungen zu Umgebungsvariablen:
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-builder` sind alle oben genannten Variablen im Container gesetzt.
- `PROJECT`, `GUEZ_MODE` und `PROJECT_BASE_DIR` haben 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.
5. Robustheit
- Prüfe, ob Script B existiert und ausführbar ist.
- Falls nötig, setze executable permissions oder rufe es explizit mit `bash` auf.
- 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.
6. Dokumentation
- Aktualisiere ggf. vorhandene README- oder Hilfetexte.
- Die Usage-Ausgabe von Script A soll die neuen Optionen beschreiben.
7. 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.