diff --git a/Jenkinsfile b/Jenkinsfile index 1c8ea01..e7e7182 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,28 +1,51 @@ pipeline { - agent { label 'linux-aarch64' } + agent none environment { - GIT_REF = """${sh( - returnStdout: true, - script: 'git describe --tags --exact-match 2>/dev/null || git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --short HEAD' - ).trim()}""" - CONTAINER_REGISTRY = credentials('container_registry') - REGISTRY_NAMESPACE = credentials('registry_namespace') + CONTAINER_REGISTRY = credentials("container_registry") + REGISTRY_NAMESPACE = credentials("registry_namespace") REPO_NAME = env.GIT_URL.replaceFirst(/^.*\/([^\/]+?).git$/, '$1') } stages { - stage('Build') { + stage("Build") { when { tag "*" } - steps { - sh "podman build -t ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${env.BRANCH_NAME} ." + parallel { + stage("aarch64") { + agent { label "aarch64" } + steps { + sh "podman build -t ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${env.BRANCH_NAME}-aarch64 ." + sh "podman save -o aarch64.tar ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${env.BRANCH_NAME}-aarch64" + stash includes: "aarch64.tar", name: 'aarch64-image' + } + } + stage("x86_64") { + agent { label "x86_64" } + steps { + sh "podman build -t ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${env.BRANCH_NAME}-x86_64 ." + sh "podman save -o x86_64.tar ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${env.BRANCH_NAME}-x86_64" + stash includes: "x86_64.tar", name: 'x86_64-image' + } + } } } - stage('Push') { + stage("Combine and Push") { when { tag "*" } + agent any steps { - withCredentials([usernamePassword(credentialsId: 'dockerhub', usernameVariable: 'REG_USERNAME', passwordVariable: 'REG_PASSWORD')]) { + unstash 'aarch64-image' + unstash 'x86_64-image' + + sh "podman load -i aarch64.tar" + sh "podman load -i x86_64.tar" + + podman manifest create ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME} \ + ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME}-aarch64 \ + ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME}-x86_64 + + withCredentials([usernamePassword(credentialsId: "dockerhub", usernameVariable: "REG_USERNAME", passwordVariable: "REG_PASSWORD")]) { sh ''' podman login ${CONTAINER_REGISTRY} -u ${REG_USERNAME} -p ${REG_PASSWORD} - podman push ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME} + podman manifest push ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME} \ + docker://${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME} ''' } }