-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathJenkinsfile
More file actions
125 lines (112 loc) · 3.68 KB
/
Jenkinsfile
File metadata and controls
125 lines (112 loc) · 3.68 KB
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
pipeline {
agent {
label 'gcloud-build--rocky-linux-8--x64'
}
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
timeout(time: 1, unit: 'HOURS')
timestamps()
disableConcurrentBuilds()
}
environment {
JAVA_HOME = '/opt/corretto_java17'
PATH = "${JAVA_HOME}/bin:${env.PATH}"
VOLTDB_IMAGE = "${params.VOLTDB_IMAGE ?: 'voltdb/voltdb-enterprise:15.1.0'}"
}
parameters {
string(
name: 'VOLTDB_IMAGE',
defaultValue: 'voltdb/voltdb-enterprise:15.1.0',
description: 'VoltDB Docker image to use for integration tests'
)
booleanParam(
name: 'SKIP_INTEGRATION_TESTS',
defaultValue: false,
description: 'Skip integration tests'
)
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'mvn clean compile test-compile -DskipTests'
}
}
stage('Unit Tests') {
steps {
sh 'mvn test'
}
post {
always {
junit testResults: '**/target/surefire-reports/*.xml', allowEmptyResults: true
}
}
}
stage('Package') {
steps {
sh 'mvn package -DskipTests'
}
post {
success {
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true, allowEmptyArchive: true
}
}
}
stage('Integration Tests') {
when {
expression { return !params.SKIP_INTEGRATION_TESTS }
}
steps {
withCredentials([
usernamePassword(credentialsId: 'dockerhub', usernameVariable: 'DOCKER_CREDS_USR', passwordVariable: 'DOCKER_CREDS_PSW'),
string(credentialsId: 'VOLTDB_LICENSE1', variable: 'VOLTDB_LICENSE_CONTENT')
]) {
sh '''
# Login to Docker Hub
echo "${DOCKER_CREDS_PSW}" | docker login -u "${DOCKER_CREDS_USR}" --password-stdin
# Ensure Docker is available
docker info
# Pull VoltDB image
echo "Using VoltDB image: ${VOLTDB_IMAGE}"
docker pull ${VOLTDB_IMAGE}
# Write license to file (decode base64)
echo "${VOLTDB_LICENSE_CONTENT}" | base64 -d > license.xml
'''
// Run integration tests with license
sh '''
export PATH="${JAVA_HOME}/bin:${PATH}"
export VOLTDB_LICENSE="${WORKSPACE}/license.xml"
mvn verify -DskipUTs
'''
}
}
post {
always {
junit testResults: '**/target/failsafe-reports/*.xml', allowEmptyResults: true
sh 'rm -f license.xml || true'
sh 'docker logout || true'
}
}
}
}
post {
always {
// Clean up Docker containers
sh '''
docker ps -q --filter "ancestor=${VOLTDB_IMAGE}" | xargs -r docker stop || true
docker container prune -f || true
'''
cleanWs()
}
success {
echo 'Build completed successfully!'
}
failure {
echo 'Build failed!'
}
}
}