String cron_string = BRANCH_NAME == "master" ? "@daily" : "" pipeline { agent any options { parallelsAlwaysFailFast() } triggers { cron(cron_string) } environment { PROJECT = 'transmission-hacks' IMAGE_NAME = "docker.io/chn2guevara/$PROJECT" } stages { stage('Prepare') { steps { sh 'apt-get update && apt-get install -y buildah' } } stage('Manifest') { steps { sh "buildah manifest create $PROJECT" } } stage('Build') { parallel { stage('arm64/v8') { steps { sh""" buildah build --arch arm64/v8 --network host \ --tag $IMAGE_NAME:latest --manifest $PROJECT . """ } } stage('amd64') { steps { sh""" buildah build --arch amd64 --network host \ --tag $IMAGE_NAME:latest --manifest $PROJECT . """ } } } } stage('docker.io login') { when { branch 'master' } steps { withCredentials([string( credentialsId: 'dockerhub-personal', variable: 'CREDENTIALS') ]) { sh '''#!/bin/bash IFS=" " read -r username password <<<"$CREDENTIALS" buildah login \ --username "$username" \ --password-stdin <<< "$password" docker.io ''' } } } stage('Push latest') { when { branch 'master' } steps { sh "buildah manifest push --all $PROJECT docker://$IMAGE_NAME:latest" } } stage('Push tag') { when { branch 'master' } steps { script { tag = sh( returnStdout: true, script: "git name-rev --name-only --tags HEAD" ).trim() if(tag == 'undefined') { return } sh "buildah manifest push --all $PROJECT docker://$IMAGE_NAME:$tag" } } } } }