Jenkins
Platform: Jenkins
Declarative Pipeline
pipeline {
agent any
environment {
VERSION = ''
}
stages {
stage('Get Version') {
steps {
script {
sh 'go install github.com/benjaminabbitt/versionator@latest'
env.VERSION = sh(script: 'versionator output version', returnStdout: true).trim()
}
}
}
stage('Build') {
steps {
sh "go build -ldflags '-X main.VERSION=${env.VERSION}' -o app"
}
}
}
}
Scripted Pipeline
node {
def version = ''
stage('Checkout') {
checkout scm
}
stage('Get Version') {
sh 'go install github.com/benjaminabbitt/versionator@latest'
version = sh(script: 'versionator output version', returnStdout: true).trim()
echo "Building version: ${version}"
}
stage('Build') {
sh "go build -ldflags '-X main.VERSION=${version}' -o app"
}
stage('Archive') {
archiveArtifacts artifacts: 'app', fingerprint: true
}
}
Full Pipeline with Release
pipeline {
agent any
environment {
VERSION = ''
GOPATH = "${WORKSPACE}/go"
PATH = "${GOPATH}/bin:${env.PATH}"
}
stages {
stage('Setup') {
steps {
sh 'go install github.com/benjaminabbitt/versionator@latest'
script {
env.VERSION = sh(script: 'versionator output version', returnStdout: true).trim()
}
echo "Version: ${env.VERSION}"
}
}
stage('Build') {
steps {
sh "go build -ldflags '-X main.VERSION=${env.VERSION}' -o app"
}
}
stage('Test') {
steps {
sh 'go test ./...'
}
}
stage('Release') {
when {
tag pattern: "v\\d+\\.\\d+\\.\\d+", comparator: "REGEXP"
}
steps {
echo "Releasing ${env.TAG_NAME}"
archiveArtifacts artifacts: 'app', fingerprint: true
}
}
}
post {
always {
cleanWs()
}
}
}