From b0025f589d0a198731fb31df884a7fc66a393879 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Mon, 12 May 2025 16:39:58 +0200 Subject: [PATCH 1/5] ci(Jenkinsfile): refs #8766 buildx --- Jenkinsfile | 79 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 18 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 59bf09e22..e97618230 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -108,7 +108,6 @@ pipeline { } stage('E2E') { environment { - CREDS = credentials('docker-registry') COMPOSE_PROJECT = "${PROJECT_NAME}-${env.BUILD_ID}" COMPOSE_PARAMS = "-p ${env.COMPOSE_PROJECT} -f test/cypress/docker-compose.yml --project-directory ." } @@ -120,13 +119,16 @@ pipeline { def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs') - sh 'docker login --username $CREDS_USR --password $CREDS_PSW $REGISTRY' - sh "docker-compose ${env.COMPOSE_PARAMS} pull back" - sh "docker-compose ${env.COMPOSE_PARAMS} pull db" - sh "docker-compose ${env.COMPOSE_PARAMS} up -d" + sh "docker compose ${env.COMPOSE_PARAMS} pull back" + sh "docker compose ${env.COMPOSE_PARAMS} pull db" + sh "docker compose ${env.COMPOSE_PARAMS} up -d" - def modules = sh(script: "node test/cypress/docker/find/find.js ${env.COMPOSE_TAG}", returnStdout: true).trim() + def modules = sh( + script: "node test/cypress/docker/find/find.js ${env.COMPOSE_TAG}", + returnStdout: true + ).trim() echo "E2E MODULES: ${modules}" + image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ --init") { sh "sh test/cypress/docker/cypressParallel.sh 1 '${modules}'" } @@ -134,7 +136,7 @@ pipeline { } post { always { - sh "docker-compose ${env.COMPOSE_PARAMS} down -v" + sh "docker compose ${env.COMPOSE_PARAMS} down -v" archiveArtifacts artifacts: 'test/cypress/screenshots/**/*', allowEmptyArchive: true junit( testResults: 'junit/e2e-*.xml', @@ -153,17 +155,8 @@ pipeline { VERSION = readFile 'VERSION.txt' } steps { - script { - sh 'quasar build' - - def baseImage = "salix-frontend:${env.VERSION}" - def image = docker.build(baseImage, ".") - docker.withRegistry("https://${env.REGISTRY}", 'docker-registry') { - image.push() - image.push(env.BRANCH_NAME) - if (IS_LATEST) image.push('latest') - } - } + sh 'quasar build' + dockerBuild 'salix-frontend', '.' } } stage('Deploy') { @@ -186,3 +179,53 @@ pipeline { } } +def dockerBuild(imageName, context, dockerfile = null) { + if (dockerfile == null) + dockerfile = "${context}/Dockerfile" + + def certDir = '/home/jenkins/.buildkit/certs' + def buildxArgs = [ + "--name=buildkitd", + "--driver=remote", + "--driver-opt=" + + "cacert=${certDir}/ca.pem," + + "cert=${certDir}/cert.pem," + + "key=${certDir}/key.pem," + + "servername=buildkitd", + "tcp://buildkitd:1234" + ] + + def cacheImage = "${env.REGISTRY_CACHE}/${imageName}" + def pushImage = "${env.REGISTRY}/${imageName}" + def baseImage = "${pushImage}:${env.VERSION}" + + def buildArgs = [ + context, + "--push", + "--builder=buildkitd", + "--file=${dockerfile}", + "--cache-from=type=registry,ref=${cacheImage}:cache-${env.BRANCH_NAME}", + "--cache-from=type=registry,ref=${cacheImage}:cache-dev", + "--cache-to=type=registry,ref=${cacheImage}:cache-${env.BRANCH_NAME},mode=max", + "--tag=${pushImage}:${env.BRANCH_NAME}" + ] + + def isLatest = ['master', 'main'].contains(env.BRANCH_NAME) + if (isLatest) + buildArgs.push("--tag=${pushImage}:latest") + + // FIXME: Nested docker.withRegistry() does not work + // https://issues.jenkins.io/browse/JENKINS-59777 + withCredentials([usernamePassword( + credentialsId: 'registry-cache', + usernameVariable: 'CACHE_USR', + passwordVariable: 'CACHE_PSW') + ]) { + docker.withRegistry("https://${env.REGISTRY}", 'docker-registry') { + sh 'echo "$CACHE_PSW" | docker login --username "$CACHE_USR" --password-stdin "http://$REGISTRY_CACHE"' + sh "docker buildx create ${buildxArgs.join(' ')}" + docker.build(baseImage, buildArgs.join(' ')) + } + } +} + From fea550b904d201b5d93270eab2bab9ed4e4d3173 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Mon, 12 May 2025 21:27:57 +0200 Subject: [PATCH 2/5] ci(Jenkinsfile): refs #8766 compose fixes --- Jenkinsfile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index e97618230..197590f33 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -117,20 +117,20 @@ pipeline { sh 'rm -rf test/cypress/screenshots' env.COMPOSE_TAG = PROTECTED_BRANCH.contains(env.CHANGE_TARGET) ? env.CHANGE_TARGET : 'dev' - def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs') - - sh "docker compose ${env.COMPOSE_PARAMS} pull back" - sh "docker compose ${env.COMPOSE_PARAMS} pull db" - sh "docker compose ${env.COMPOSE_PARAMS} up -d" - def modules = sh( script: "node test/cypress/docker/find/find.js ${env.COMPOSE_TAG}", returnStdout: true ).trim() echo "E2E MODULES: ${modules}" - image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ --init") { - sh "sh test/cypress/docker/cypressParallel.sh 1 '${modules}'" + script { + if (modules != '') { + sh "docker compose ${env.COMPOSE_PARAMS} up -d" + def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs') + image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ --init") { + sh "sh test/cypress/docker/cypressParallel.sh 1 '${modules}'" + } + } } } } From 2d59d189be93a82f8f4459cee10ed658dc67fad0 Mon Sep 17 00:00:00 2001 From: alexm Date: Tue, 13 May 2025 07:50:39 +0200 Subject: [PATCH 3/5] fix: refs #8766 simplify E2E module execution in Jenkinsfile --- Jenkinsfile | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 197590f33..ec3f1a267 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -124,12 +124,10 @@ pipeline { echo "E2E MODULES: ${modules}" script { - if (modules != '') { - sh "docker compose ${env.COMPOSE_PARAMS} up -d" - def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs') - image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ --init") { - sh "sh test/cypress/docker/cypressParallel.sh 1 '${modules}'" - } + sh "docker compose ${env.COMPOSE_PARAMS} up -d" + def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs') + image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ --init") { + sh "sh test/cypress/docker/cypressParallel.sh 1 '${modules}'" } } } From c1edabd49a30370b44069f9c67a7e0b8c1c9066d Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Tue, 13 May 2025 12:03:05 +0200 Subject: [PATCH 4/5] ci(Jenkinsfile): refs #8766 obsolete compose version removed --- test/cypress/docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/test/cypress/docker-compose.yml b/test/cypress/docker-compose.yml index 8d70c5248..d4093680d 100644 --- a/test/cypress/docker-compose.yml +++ b/test/cypress/docker-compose.yml @@ -1,4 +1,3 @@ -version: '3.7' services: back: image: 'registry.verdnatura.es/salix-back:${COMPOSE_TAG:-dev}' From 47273fcef60c1a5a5fd0d428530931ee1e18df18 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Wed, 14 May 2025 08:51:17 +0200 Subject: [PATCH 5/5] ci(Jenkinsfile): refs #8766 build before compose up --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index ec3f1a267..27bf4f82f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -124,8 +124,8 @@ pipeline { echo "E2E MODULES: ${modules}" script { - sh "docker compose ${env.COMPOSE_PARAMS} up -d" def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs') + sh "docker compose ${env.COMPOSE_PARAMS} up -d" image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ --init") { sh "sh test/cypress/docker/cypressParallel.sh 1 '${modules}'" }