atuin/Jenkinsfile

73 lines
2.8 KiB
Text
Raw Normal View History

2025-03-06 16:03:07 +01:00
pipeline {
2025-06-04 09:50:08 +02:00
agent any
2025-06-03 18:52:56 +02:00
environment {
2025-06-04 09:46:39 +02:00
CONTAINER_REGISTRY = credentials("container_registry")
REGISTRY_NAMESPACE = credentials("registry_namespace")
2025-06-04 08:28:49 +02:00
REPO_NAME = env.GIT_URL.replaceFirst(/^.*\/([^\/]+?).git$/, '$1')
2025-06-04 12:42:01 +02:00
IMAGE_NAME = "${env.CONTAINER_REGISTRY}/${env.REGISTRY_NAMESPACE}/${env.REPO_NAME}:${env.BRANCH_NAME}"
2025-06-03 18:52:56 +02:00
}
2025-03-06 16:03:07 +01:00
stages {
2025-06-04 09:46:39 +02:00
stage("Build") {
2025-06-03 19:17:12 +02:00
when { tag "*" }
2025-06-04 10:31:57 +02:00
steps {
script {
def architectures = ["aarch64", "x86_64"]
def parallelStages = [:]
for (arch in architectures) {
def nodeLabel = arch
parallelStages[arch] = {
node(nodeLabel) {
2025-06-04 10:39:41 +02:00
checkout scm
2025-06-04 12:42:01 +02:00
def run_name = "${nodeLabel}-${env.BUILD_NUMBER}"
2025-06-04 12:44:25 +02:00
def image_run_name = "${IMAGE_NAME}-${nodeLabel}-${env.BUILD_NUMBER}"
2025-06-04 12:42:01 +02:00
sh "podman build -t ${image_run_name} ."
2025-06-04 12:44:25 +02:00
sh "podman save -o ${run_name}.tar ${image_run_name}"
2025-06-04 12:42:01 +02:00
stash includes: "${run_name}.tar", name: "${nodeLabel}-image"
2025-06-04 10:31:57 +02:00
}
}
2025-06-04 09:46:39 +02:00
}
2025-06-04 10:31:57 +02:00
parallel parallelStages
2025-06-04 12:20:43 +02:00
env.ARCHITECTURES = architectures.join(',')
2025-06-04 09:46:39 +02:00
}
2025-03-06 16:03:07 +01:00
}
}
2025-06-04 09:46:39 +02:00
stage("Combine and Push") {
2025-06-03 19:32:22 +02:00
when { tag "*" }
2025-06-04 09:46:39 +02:00
agent any
2025-06-03 19:32:22 +02:00
steps {
2025-06-04 12:23:37 +02:00
script {
def architectures = env.ARCHITECTURES.split(',')
2025-06-04 12:20:43 +02:00
2025-06-04 12:23:37 +02:00
for (arch in architectures) {
unstash "${arch}-image"
sh "podman load -i ${arch}-${env.BUILD_NUMBER}.tar"
}
2025-06-04 09:46:39 +02:00
2025-06-04 12:23:37 +02:00
def manifestImages = architectures.collect { arch ->
2025-06-04 12:42:01 +02:00
return "${IMAGE_NAME}-${arch}-${env.BUILD_NUMBER}"
2025-06-04 12:23:37 +02:00
}.join(' ')
2025-06-04 12:28:34 +02:00
2025-06-04 12:32:12 +02:00
sh """
2025-06-04 12:42:01 +02:00
podman manifest rm ${IMAGE_NAME} || true
podman manifest create ${IMAGE_NAME} ${manifestImages}
2025-06-04 12:32:12 +02:00
"""
2025-06-04 12:23:37 +02:00
withCredentials([usernamePassword(credentialsId: "dockerhub", usernameVariable: "REG_USERNAME", passwordVariable: "REG_PASSWORD")]) {
2025-06-04 12:32:12 +02:00
sh """
2025-06-04 12:23:37 +02:00
podman login ${CONTAINER_REGISTRY} -u ${REG_USERNAME} -p ${REG_PASSWORD}
2025-06-04 12:42:01 +02:00
podman manifest push ${IMAGE_NAME} \
docker://${IMAGE_NAME}
2025-06-04 12:32:12 +02:00
"""
2025-06-04 12:23:37 +02:00
}
2025-06-03 19:32:22 +02:00
}
}
}
2025-03-06 16:03:07 +01:00
}
2025-06-03 18:38:40 +02:00
}