|
|
|
#!/usr/bin/env groovy
|
|
|
|
|
|
|
|
import java.util.regex.Matcher
|
|
|
|
|
|
|
|
void tryAddKnownHost(String hostUrl){
|
|
|
|
// ssh-keygen -F ${hostUrl} will fail (in bash that means status code != 0) if ${hostUrl} is not yet a known host
|
|
|
|
def statusCode = sh script:"ssh-keygen -F ${hostUrl}", returnStatus:true
|
|
|
|
if(statusCode != 0){
|
|
|
|
sh "mkdir -p ~/.ssh"
|
|
|
|
sh "ssh-keyscan ${hostUrl} >> ~/.ssh/known_hosts"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonCPS
|
|
|
|
String getShortVersion(String version) {
|
|
|
|
def regexCheck = (version =~ /^(\d+)\.(\d+)\.\d+.*$/)
|
|
|
|
def shortReleaseVersion = (regexCheck.size() > 0) ? "${regexCheck[0][1]}.${regexCheck[0][2]}" : ""
|
|
|
|
return shortReleaseVersion
|
|
|
|
}
|
|
|
|
|
|
|
|
pipeline {
|
|
|
|
agent {
|
|
|
|
docker { image 'pegasyseng/pantheon-build:0.0.7-jdk11' }
|
|
|
|
}
|
|
|
|
parameters {
|
|
|
|
string(name: 'BRANCH_NAME', defaultValue: 'master', description: '[MANDATORY] The name of the branch to create the release from')
|
|
|
|
string(name: 'RELEASE_VERSION', defaultValue: 'x.y.z', description: '[MANDATORY] The version you are deploying')
|
|
|
|
string(name: 'NEXT_VERSION', defaultValue: '', description: '[OPTIONAL] When empty: defaults to next patch version after current project version')
|
|
|
|
}
|
|
|
|
|
|
|
|
stages {
|
|
|
|
stage('Release') {
|
|
|
|
steps {
|
|
|
|
sshagent(
|
|
|
|
credentials: ['pegasys-admin-github-ssh-private-key']
|
|
|
|
) {
|
|
|
|
withCredentials([
|
|
|
|
usernamePassword(
|
|
|
|
credentialsId: 'pegasys-bintray',
|
|
|
|
usernameVariable: 'BINTRAY_USER',
|
|
|
|
passwordVariable: 'BINTRAY_KEY'
|
|
|
|
)
|
|
|
|
]) {
|
|
|
|
withEnv([
|
|
|
|
'GIT_COMMITTER_NAME="PegaSys Admin"',
|
|
|
|
'GIT_COMMITTER_EMAIL="pegasys.manager@gmail.com"',
|
|
|
|
'GIT_AUTHOR_NAME="PegaSys Admin"',
|
|
|
|
'GIT_AUTHOR_EMAIL="pegasys.manager@gmail.com"'
|
|
|
|
]) {
|
|
|
|
tryAddKnownHost('github.com')
|
|
|
|
|
|
|
|
script{
|
|
|
|
releaseVersion = ''
|
|
|
|
if( params.RELEASE_VERSION?.trim() ){
|
|
|
|
releaseVersion = "-Prelease.releaseVersion=${params.RELEASE_VERSION}"
|
|
|
|
}
|
|
|
|
|
|
|
|
nextVersion = ''
|
|
|
|
if( params.NEXT_VERSION?.trim() ){
|
|
|
|
nextVersion = "-Prelease.newVersion=${params.NEXT_VERSION}"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sh "./gradlew release -Prelease.useAutomaticVersion=true -Prelease.branch=${params.BRANCH_NAME} ${releaseVersion} ${nextVersion}"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
stage('Docker') {
|
|
|
|
steps {
|
|
|
|
script {
|
|
|
|
|
|
|
|
def docker_folder = 'docker'
|
|
|
|
def reports_folder = docker_folder + '/reports'
|
|
|
|
def pantheon = "pegasyseng/pantheon:develop"
|
|
|
|
def releaseVersion = "${params.RELEASE_VERSION.trim()}"
|
|
|
|
def shortReleaseVersion = getShortVersion(releaseVersion)
|
|
|
|
def additionalTags = [releaseVersion]
|
|
|
|
|
|
|
|
stage(stage_name + 'Build image') {
|
|
|
|
sh "echo Building docker image for release ${releaseVersion} with short version ${shortReleaseVersion}"
|
|
|
|
sh "./gradlew distDocker -x test -Prelease.releaseVersion=${releaseVersion} "
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
stage(stage_name + 'Test image') {
|
|
|
|
sh "mkdir -p ${reports_folder}"
|
|
|
|
sh "cd ${docker_folder} && bash test.sh ${pantheon}"
|
|
|
|
}
|
|
|
|
} finally {
|
|
|
|
junit "${reports_folder}/*.xml"
|
|
|
|
sh "rm -rf ${reports_folder}"
|
|
|
|
}
|
|
|
|
|
|
|
|
stage(stage_name + 'Push image') {
|
|
|
|
|
|
|
|
def dockerImage = docker.image(pantheon)
|
|
|
|
docker.withRegistry('https://registry.hub.docker.com', 'dockerhub-pegasysengci') {
|
|
|
|
dockerImage.push()
|
|
|
|
|
|
|
|
// if this is a stable release add extra docker image tags
|
|
|
|
if (!releaseVersion.contains('-')) {
|
|
|
|
additionalTags.add('latest')
|
|
|
|
if (shortReleaseVersion != "") {
|
|
|
|
additionalTags.add(shortReleaseVersion)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
additionalTags.each { tag ->
|
|
|
|
dockerImage.push tag.trim()
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|