-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJenkinsfile
97 lines (88 loc) · 4.47 KB
/
Jenkinsfile
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
pipeline{
agent any
tools{
maven 'maven-3.8.6'
}
environment{
registryCredential = 'aws_credential'
projectName = 'shopping'
imageRegistry = '959241342292.dkr.ecr.ap-southeast-2.amazonaws.com'
imageRegistryZone = 'ecr:ap-southeast-2'
}
stages{
// stage('increment version'){
// steps{
// script{
// echo 'incrementing app version..'
// for(service_name in service_names.tokenize(',')){
// sh "cd ${service_name} && mvn build-helper:parse-version versions:set \
// -DnewVersion=\\\${parsedVersion.majorVersion}.\\\${parsedVersion.minorVersion}.\\\${parsedVersion.nextIncrementalVersion}-\${parsedVersion.qualifier} versions:commit"
// }
// }
// }
// }
stage('Maven build for services'){
steps{
script{
sh 'mvn clean install -Dmaven.test.skip=true'
sh 'mvn -f common clean install -Dmaven.test.skip=true'
sh 'mvn -f common/common-util clean install -Dmaven.test.skip=true'
sh 'mvn -f common/service-util clean install -Dmaven.test.skip=true'
sh 'mvn -f model clean install -Dmaven.test.skip=true'
sh 'mvn -f service clean install -Dmaven.test.skip=true'
for(service_name in service_names.tokenize(',')){
def service_real_name = service_name
if(service_name.contains('/')){
//for example, service/deal-service -> deal-service
service_real_name=service.tokenize('/')[1]
}
sh "mvn -f ${service_name} clean package -Dmaven.test.skip=true"
}
}
}
}
stage("Image build and upload"){
steps{
script{
for(service_name in service_names.tokenize(',')){
def service_real_name = service_name
if(service_name.contains('/')){
service_real_name=service.tokenize('/')[1]
}
def pom = readMavenPom file: "${service_name}/pom.xml"
// def matcher = readFile(service_name+'/pom.xml') =~ '<version>(.+)</version>'
// def IMAGE_VERSION = matcher[0][1]
// matcher=null
sh "~/docker_rm.sh ${service_real_name}"
sh "cd ${service_name} && docker build -t ${imageRegistry}/${projectName}-${service_real_name}:${pom.version} ."
docker.withRegistry("https://${imageRegistry}", "${imageRegistryZone}:${registryCredential}") {
docker.image("${imageRegistry}/${projectName}-${service_real_name}:${pom.version}").push()
}
}
}
}
}
stage("deploy to EC2"){
steps{
script{
for(service_name in service_names.tokenize(',')){
def service_real_name = service_name
if(service_name.contains('/')){
service_real_name=service.tokenize('/')[1]
}
def pom = readMavenPom file: "${service_name}/pom.xml"
def yaml = readYaml file: "${service_name}/src/main/resources/application.yml"
def port = yaml.server.port
def dockerCmd = "docker run -p ${port}:${port} -d --name ${service_real_name} ${imageRegistry}/${projectName}-${service_real_name}:${pom.version}"
def clearContainerImageCmd = "./docker_rm.sh ${service_real_name}"
def ecrLoginCmd="aws ecr get-login-password --region ${imageRegistryZone}| docker login --username AWS --password-stdin ${imageRegistry}"
sshagent(['ec2-server-key-sydney']) {
//sh "scp server-cmds.sh [email protected]:/home/ec2-user"
sh "ssh -o StrictHostKeyChecking=no [email protected] \"${ecrLoginCmd}; ${clearContainerImageCmd}; ${dockerCmd}\""
}
}
}
}
}
}
}