pipeline { agent any environment { DOCKER_REGISTRY='git.massivebox.net' BUILDER_NAME='mbuilder' SERVICE='ecodash/ecodash' } stages { stage('Run linter and build') { agent { docker { image 'golang' } } steps { checkout scm sh 'curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin' sh 'go mod tidy' sh 'golangci-lint run' sh 'env GOOS=linux GOARCH=amd64 go build -o ecodash_x86 src/main/main.go' stash includes: 'ecodash_x86', name: 'ecodash_x86' sh 'env GOOS=linux GOARCH=arm go build -o ecodash_arm src/main/main.go' stash includes: 'ecodash_arm', name: 'ecodash_arm' stash includes: 'jenkins/Dockerfile', name: 'dockerfile' stash includes: 'templates/**', name: 'templates' } } stage('Prepare container build') { steps { sh """ docker buildx create --name $BUILDER_NAME docker buildx use $BUILDER_NAME docker buildx inspect --bootstrap cp jenkins/Dockerfile ./Dockerfile """ withCredentials([usernamePassword(credentialsId: 'gitea-credentials', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh 'docker login -u $USERNAME -p $PASSWORD $DOCKER_REGISTRY' } unstash 'dockerfile' unstash 'ecodash_x86' unstash 'ecodash_arm' unstash 'templates' } } stage('Build and push container on push to master') { when { anyOf { branch 'master' buildingTag() } } steps { sh 'docker buildx build --platform linux/amd64,linux/arm64 --push -t $DOCKER_REGISTRY/$SERVICE:latest .' } } stage('Build and push container on tag') { when { buildingTag() } steps { script { def formattedTag = env.TAG_NAME.replaceFirst(/^v/, '') sh 'docker buildx build --platform linux/amd64,linux/arm64 --push -t $DOCKER_REGISTRY/$SERVICE:$formattedTag .' } } } stage('Publish build artifacts on tag') { when { buildingTag() } steps { sh 'mv ecodash_x86 ecodash; zip -r ecodash-x86.zip templates ecodash' archiveArtifacts artifacts: "ecodash-x86.zip" sh 'mv ecodash_arm ecodash; zip -r ecodash-arm.zip templates ecodash' archiveArtifacts artifacts: "ecodash-arm.zip" } } } post { always { // cleanup sh 'docker buildx rm $BUILDER_NAME' } } }