arches = ['amd64', 'arm64v8', 'ppc64le'] as Set imagepushorg = 'quay.io/centos' manifestpushrepo = 'quay.io/centos/centos' imagetags = ['stream', 'stream8'] as Set for (arch in arches) { node(arch){ stage(arch) { stage('Checkout') { checkout( scm: [ $class: 'GitSCM', userRemoteConfigs: [[ url: 'https://github.com/CentOS/sig-cloud-instance-images' ]], extensions: [ [$class: 'SparseCheckoutPaths', sparseCheckoutPaths:[[$class:'SparseCheckoutPath', path:'docker/']]], [$class: 'CleanBeforeCheckout'], [$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true, timeout: 10] ], branches: [[ name: '*/CentOS-8-Stream']], ], ) } stage('Pull UBI') { sh '''sudo podman pull registry.access.redhat.com/ubi8:latest''' } stage('Build') { sh '''sudo podman build --format docker -t localhost/centos-stream:latest docker/''' } stage('Tag') { for (tag in imagetags) { withEnv(['TAG='+tag, 'ARCH='+arch, 'IMAGEPUSHORG='+imagepushorg]){ sh '''sudo podman tag localhost/centos-stream:latest ${IMAGEPUSHORG}/${ARCH}:${TAG}''' } } } stage('Taginfo') { for (tag in imagetags) { withEnv(['TAG='+tag, 'ARCH='+arch, 'IMAGEPUSHORG='+imagepushorg]){ sh '''#!/usr/bin/env bash set -Eeuo pipefail mkdir -p build-info/image-ids sudo podman inspect --format '{{ .Digest }}' ${IMAGEPUSHORG}/${ARCH}:${TAG} | tee build-info/${ARCH}-${TAG}.txt ''' } } archiveArtifacts 'build-info/**' } stage('Push') { for (tag in imagetags) { withEnv(['TAG='+tag, 'ARCH='+arch, 'IMAGEPUSHORG='+imagepushorg]){ withCredentials([usernamePassword(credentialsId: 'QUAY_PUSH', passwordVariable: 'QUAY_PUSH_PASS', usernameVariable: 'QUAY_PUSH_USERNAME')]){ sh '''sudo podman login -u=${QUAY_PUSH_USERNAME} -p ${QUAY_PUSH_PASS} quay.io''' sh '''sudo podman push ${IMAGEPUSHORG}/${ARCH}:${TAG}''' } } } } } } } node('amd64'){ stage('Create Manifests'){ for (tag in imagetags) { withEnv(['MANIFESTPUSHREPO='+manifestpushrepo, 'TAG='+tag, 'IMAGEPUSHORG='+imagepushorg]){ withCredentials([usernamePassword(credentialsId: 'QUAY_PUSH', passwordVariable: 'QUAY_PUSH_PASS', usernameVariable: 'QUAY_PUSH_USERNAME')]){ sh '''sudo podman login -u=${QUAY_PUSH_USERNAME} -p ${QUAY_PUSH_PASS} quay.io''' try{ sh '''sudo podman rmi ${MANIFESTPUSHREPO}:${TAG}''' } catch (err) { } sh '''sudo podman manifest create ${MANIFESTPUSHREPO}:${TAG}''' } } } } stage('Annotate Manifests'){ for (tag in imagetags) { for (arch in arches) { withEnv(['MANIFESTPUSHREPO='+manifestpushrepo, 'TAG='+tag, 'ARCH='+arch, 'IMAGEPUSHORG='+imagepushorg]){ sh '''sudo podman manifest add ${MANIFESTPUSHREPO}:${TAG} docker://${IMAGEPUSHORG}/${ARCH}:${TAG}''' } } } } stage('Push Manifests'){ for (tag in imagetags) { withEnv(['MANIFESTPUSHREPO='+manifestpushrepo, 'TAG='+tag]){ sh '''sudo podman manifest push -f v2s2 --purge --all ${MANIFESTPUSHREPO}:${TAG} docker://${MANIFESTPUSHREPO}:${TAG}''' } } } }