160 lines
6.6 KiB
Markdown
160 lines
6.6 KiB
Markdown
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.
|