pipeline { agent any environment { QT_VERSION = '6.10.2' QT_MODULES = 'qtmultimedia qtserialport qtimageformats qtwebsockets qtwebengine qtpdf qtwebview qt5compat qtwebchannel qtpositioning qtlocation qtsensors' HARBOR_REGISTRY = 'harbor.sl.defence-elec.de/proxydockerhub' IMAGE_NAME = 'qt6-framework' IMAGE_TAG = "${QT_VERSION}" } options { timeout(time: 30, unit: 'MINUTES') buildDiscarder(logRotator(numToKeepStr: '10')) } stages { stage('Checkout') { steps { checkout scm } } stage('Build Qt6 Container') { steps { script { dir('external-dependencies/qt6-framework') { sh """ docker build \ --build-arg QT_VERSION=${QT_VERSION} \ --build-arg QT_MODULES='${QT_MODULES}' \ -t ${HARBOR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} \ -t ${HARBOR_REGISTRY}/${IMAGE_NAME}:latest \ . """ } } } } stage('Verify Qt6') { steps { script { sh """ docker run --rm ${HARBOR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} bash -c ' echo "Qt6 Version:" && qmake6 --version && qmake6 --version | grep -q "${QT_VERSION}" ' """ } } } stage('Generate SBOM') { steps { script { dir('external-dependencies/qt6-framework') { sh """ mkdir -p sbom # Set environment variables for SBOM generation export GIT_URL="${env.GIT_URL}" export GIT_COMMIT="${env.GIT_COMMIT}" export BUILD_NUMBER="${env.BUILD_NUMBER}" export DOCKERFILE_PATH="external-dependencies/qt6-framework/Dockerfile" # Generate CycloneDX SBOM, SLSA provenance, and license report bash ../scripts/generate-sbom.sh qt6-framework ${QT_VERSION} ./sbom """ } } } } stage('Push to Registry') { steps { script { withCredentials([usernamePassword( credentialsId: 'harbor-credentials', usernameVariable: 'HARBOR_USER', passwordVariable: 'HARBOR_PASSWORD' )]) { sh """ echo ${HARBOR_PASSWORD} | docker login ${HARBOR_REGISTRY} -u ${HARBOR_USER} --password-stdin docker push ${HARBOR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} docker push ${HARBOR_REGISTRY}/${IMAGE_NAME}:latest docker logout ${HARBOR_REGISTRY} """ } } } } } post { always { cleanWs() } } }