This repository has been archived by the owner on Sep 26, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 130
/
Copy pathJenkinsfile.release
124 lines (104 loc) · 4.95 KB
/
Jenkinsfile.release
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/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()
}
}
}
}
}
}
}
}