Some checks are pending
Build Multiarch Container Image / call-reusable-workflow (push) Waiting to run
68 lines
3 KiB
Groovy
68 lines
3 KiB
Groovy
pipeline {
|
|
agent any
|
|
environment {
|
|
CONTAINER_REGISTRY = credentials("container_registry")
|
|
REGISTRY_NAMESPACE = credentials("registry_namespace")
|
|
REPO_NAME = env.GIT_URL.replaceFirst(/^.*\/([^\/]+?).git$/, '$1')
|
|
}
|
|
stages {
|
|
stage("Build") {
|
|
when { tag "*" }
|
|
steps {
|
|
script {
|
|
def architectures = ["aarch64", "x86_64"]
|
|
def parallelStages = [:]
|
|
|
|
for (arch in architectures) {
|
|
def nodeLabel = arch
|
|
|
|
parallelStages[arch] = {
|
|
node(nodeLabel) {
|
|
checkout scm
|
|
|
|
sh "podman build -t ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${env.BRANCH_NAME}-${nodeLabel}-${env.BUILD_NUMBER} ."
|
|
sh "podman save -o ${nodeLabel}-${env.BUILD_NUMBER}.tar ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${env.BRANCH_NAME}-${nodeLabel}-${env.BUILD_NUMBER}"
|
|
stash includes: "${nodeLabel}-${env.BUILD_NUMBER}.tar", name: "${nodeLabel}-image"
|
|
}
|
|
}
|
|
}
|
|
|
|
parallel parallelStages
|
|
|
|
env.ARCHITECTURES = architectures.join(',')
|
|
}
|
|
}
|
|
}
|
|
stage("Combine and Push") {
|
|
when { tag "*" }
|
|
agent any
|
|
steps {
|
|
script {
|
|
def architectures = env.ARCHITECTURES.split(',')
|
|
|
|
for (arch in architectures) {
|
|
unstash "${arch}-image"
|
|
sh "podman load -i ${arch}-${env.BUILD_NUMBER}.tar"
|
|
}
|
|
|
|
def manifestImages = architectures.collect { arch ->
|
|
return "${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${env.BRANCH_NAME}-${arch}-${env.BUILD_NUMBER}"
|
|
}.join(' ')
|
|
|
|
sh """
|
|
podman manifest rm ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME} || true
|
|
podman manifest create ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME} ${manifestImages}
|
|
"""
|
|
|
|
withCredentials([usernamePassword(credentialsId: "dockerhub", usernameVariable: "REG_USERNAME", passwordVariable: "REG_PASSWORD")]) {
|
|
sh """
|
|
podman login ${CONTAINER_REGISTRY} -u ${REG_USERNAME} -p ${REG_PASSWORD}
|
|
podman manifest push ${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME} \
|
|
docker://${CONTAINER_REGISTRY}/${REGISTRY_NAMESPACE}/${REPO_NAME}:${BRANCH_NAME}
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|