- stage('Build & Push Image') {
- when { expression { return params.DO_DOCKERPUSH } }
- steps {
- script {
- def moduleName = (env.MDG ?: DEFAULT_MODULE_NAME).toLowerCase()
-
- if (!params.GERRIT_BRANCH) {
- error 'GERRIT_BRANCH is required to tag the Docker image'
- }
- def sanitizedBranchName = params.GERRIT_BRANCH
- .toLowerCase()
- .replaceAll('[^a-z0-9._-]', '-')
- def baseTagPrefix = "osm-${sanitizedBranchName}"
- def buildNumber = env.BUILD_NUMBER ?: '0'
- def isMergeJob = env.JOB_NAME?.contains('merge')
- // Remove promotion logic from this stage
- def moduleTags = []
- if (isMergeJob) {
- moduleTags << "${baseTagPrefix}-merge"
- } else {
- moduleTags << "${baseTagPrefix}-patchset-${buildNumber}"
- }
-
- def imageName = params.IMAGENAME ?: "opensourcemano/${moduleName}"
- def primaryLocalImage = "${imageName}:${moduleTags[0]}"
-
- withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'gitlab-registry',
- usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
- sh """
- docker build -f Dockerfile -t ${primaryLocalImage} .
- """
- sh "docker login ${env.DOCKER_REGISTRY.split('/')[0]} -u ${USERNAME} -p ${PASSWORD}"
- // Push build-scope tag(s) only. Promotion happens after tests.
- moduleTags.each { tag ->
- def localImage = "${imageName}:${tag}"
- def remoteImage = "${env.DOCKER_REGISTRY}${imageName}:${tag}"
- sh "docker tag ${localImage} ${remoteImage}"
- sh "docker push ${remoteImage}"
- }
- // Stash the built image id for later promotion without rebuild
- env.BUILT_IMAGE = primaryLocalImage
- env.BUILT_TAG = moduleTags[0]
- }
- }
- }
- }
-