Jenkinsfile: Build Docker image locally when not present
qt-migration-copilot-demo/pipeline/pr-main Something is wrong with the build of this commit

- Add Docker Image stage that checks if image exists and builds if needed
- Fix nested stages structure in Build and Test stage
- Docker image built on Jenkins host instead of pulling from registry
- Resolves 'pull access denied' error when image not in registry

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 443ea4c1ce1c
This commit is contained in:
torstenandCopilot committed 2026-10-22 19:45:37 +02:00
1 parent 0162466168
commit 7d7adf5a54
1 file changed
+28 -8
Vendored
+28 -8
View File
@@ -1,10 +1,5 @@
pipeline { pipeline {
agent { agent none
docker {
image 'lifemaps/ci-cpp:latest'
reuseNode true
}
}
options { options {
timestamps() timestamps()
@@ -19,14 +14,38 @@ pipeline {
QT_QPA_PLATFORM = "offscreen" QT_QPA_PLATFORM = "offscreen"
LANG = "C.UTF-8" LANG = "C.UTF-8"
LC_ALL = "C.UTF-8" LC_ALL = "C.UTF-8"
DOCKER_IMAGE = "lifemaps/ci-cpp:latest"
} }
stages {
stage('Docker Image') {
agent { label 'any' }
steps {
script {
echo "Checking if Docker image exists locally..."
def imageExists = sh(script: "docker inspect ${DOCKER_IMAGE} >/dev/null 2>&1", returnStatus: true) == 0
if (!imageExists) {
echo "Docker image not found. Building from ci/Dockerfile.ci..."
sh 'docker build -t ${DOCKER_IMAGE} -f ci/Dockerfile.ci .'
} else {
echo "Docker image ${DOCKER_IMAGE} found locally."
}
}
}
}
stage('Build and Test') {
agent {
docker {
image 'lifemaps/ci-cpp:latest'
reuseNode true
}
}
stages { stages {
stage('Cleanup') { stage('Cleanup') {
steps { steps {
script { script {
echo "Cleaning workspace to avoid corruption issues..." echo "Cleaning workspace to avoid corruption issues..."
// Use shell command with chmod to handle permission issues
sh ''' sh '''
if [ -d "${WORKSPACE}/${BUILD_DIR}" ]; then if [ -d "${WORKSPACE}/${BUILD_DIR}" ]; then
echo "Removing build directory with permission fix..." echo "Removing build directory with permission fix..."
@@ -124,12 +143,13 @@ pipeline {
} }
} }
} }
}
}
post { post {
always { always {
script { script {
if (getContext(hudson.FilePath)) { if (getContext(hudson.FilePath)) {
// Use shell command with chmod to handle permission issues
sh ''' sh '''
if [ -d "${WORKSPACE}/${BUILD_DIR}" ]; then if [ -d "${WORKSPACE}/${BUILD_DIR}" ]; then
echo "Final cleanup: Removing build directory..." echo "Final cleanup: Removing build directory..."