Adds rpm/deb package building option
This commit is contained in:
2 files changed
+160
-1
No files matched your search
@@ -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.
|
||||
+1
-1
Submodule qt-migration-legatus updated: d7f58c558d...88902aa572.
Reference in new issue
Block a user