-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathJenkinsfile
140 lines (140 loc) · 4.45 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
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
def runtests(){
sh label:'mlsetup', script: '''#!/bin/bash
cd $WORKSPACE/flux;
sudo /usr/local/sbin/mladmin stop;
sudo /usr/local/sbin/mladmin remove;
mkdir -p $WORKSPACE/flux/docker/sonarqube;
docker-compose up -d --build;
sleep 30s;
curl "http://localhost:8008/api/pull" -d '{"model":"all-minilm"}'
'''
script{
timeout(time: 60, unit: 'SECONDS') {
waitUntil(initialRecurrencePeriod: 20000) {
try{
sh 'curl --anyauth --user admin:admin -X GET http://localhost:8000/v1/ping'
return true
}catch(exception){
return false
}
}
}
}
sh label:'runtests', script: '''#!/bin/bash
export JAVA_HOME=`eval echo "$JAVA_HOME_DIR"`;
export GRADLE_USER_HOME=$WORKSPACE$GRADLE_DIR;
export PATH=$JAVA_HOME/bin:$GRADLE_USER_HOME:$PATH;
cd $WORKSPACE/flux;
./gradlew -i mlDeploy;
wget https://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip;
unzip dvdrental.zip -d docker/postgres/ ;
docker exec -i flux-postgres-1 psql -U postgres -c "CREATE DATABASE dvdrental";
docker exec -i flux-postgres-1 pg_restore -U postgres -d dvdrental /opt/dvdrental.tar;
cd $WORKSPACE/flux/;
./gradlew --refresh-dependencies clean test || true;
'''
junit '**/*.xml'
}
def postCleanup(){
sh label:'mlcleanup', script: '''#!/bin/bash
cd $WORKSPACE/flux;
sudo /usr/local/sbin/mladmin delete $WORKSPACE/flux/docker/marklogic/logs/;
docker exec -i --privileged --user root flux-caddy-load-balancer-1 /bin/sh -c "chmod -R 777 /data" || true;
docker exec -i --privileged --user root flux-sonarqube-1 /bin/sh -c "chmod -R 777 /opt/sonarqube" || true;
docker-compose rm -fsv || true;
echo "y" | docker volume prune --filter all=1 || true;
'''
}
def runSonarScan(String javaVersion){
sh label:'test', script: '''#!/bin/bash
export JAVA_HOME=$'''+javaVersion+'''
export GRADLE_USER_HOME=$WORKSPACE/$GRADLE_DIR
export PATH=$GRADLE_USER_HOME:$JAVA_HOME/bin:$PATH
cd flux
./gradlew sonar -Dsonar.projectKey='ML-DevExp-marklogic-flux' -Dsonar.projectName='ML-DevExp-marklogic-flux' || true
'''
}
pipeline{
agent none
options {
checkoutToSubdirectory 'flux'
buildDiscarder logRotator(artifactDaysToKeepStr: '7', artifactNumToKeepStr: '', daysToKeepStr: '30', numToKeepStr: '')
}
environment{
JAVA_HOME_DIR="/home/builder/java/jdk-11.0.2"
JAVA17_HOME_DIR="/home/builder/java/jdk-17.0.2"
GRADLE_DIR =".gradle"
DMC_USER = credentials('MLBUILD_USER')
DMC_PASSWORD = credentials('MLBUILD_PASSWORD')
}
stages{
stage('tests'){
environment{
scannerHome = tool 'SONAR_Progress'
}
agent{ label 'devExpLinuxPool'}
steps{
runtests()
withSonarQubeEnv('SONAR_Progress') {
runSonarScan('JAVA17_HOME_DIR')
}
}
post{
always{
postCleanup()
}
}
}
stage('publish'){
agent{ label 'devExpLinuxPool'}
when {
branch 'develop'
}
steps{
script{
sh label:'publish', script: '''#!/bin/bash
export JAVA_HOME=`eval echo "$JAVA_HOME_DIR"`;
export GRADLE_USER_HOME=$WORKSPACE$GRADLE_DIR;
export PATH=$JAVA_HOME/bin:$GRADLE_USER_HOME:$PATH;
cd $WORKSPACE/flux;
./gradlew clean;
./gradlew distZip;
'''
archiveArtifacts artifacts: '**/build/**/*.zip', followSymlinks: false
def artifactory = Artifactory.newServer(url: 'https://bed-artifactory.bedford.progress.com:443/artifactory/', credentialsId: 'builder-credentials-artifactory')
def uploadSpec = """{
"files": [
{
"pattern": "${WORKSPACE}/**/build/**/*.zip",
"target": "ml-generic-dev-tierpoint/flux/",
"props": "build.number=${BUILD_NUMBER};build.name=${JOB_NAME}"
}
]
}"""
artifactory.upload(uploadSpec)
echo "${uploadSpec}"
}
}
}
stage('regressions'){
when{
allOf{
branch 'develop'
}
}
environment{
JAVA_HOME_DIR="/home/builder/java/jdk-17.0.2"
GRADLE_DIR =".gradle"
}
agent{ label 'devExpLinuxPool'}
steps{
runtests()
}
post{
always{
postCleanup()
}
}
}
}
}