Skip to content

Commit 1dd50f5

Browse files
CLD-678 Automate HC tests in Kubernetes pipeline (#138)
* update email list * Add HC e2e tests to the pipeline * disable HC tests by default * add cleanup * fix minikube cleanup * test specific tls version * java fix * update dependencies for Jenkins * update log redirect * enable full e2e suite * change step sequence * add comment about test duration * - Add a new stage and option to execute HC e2e tests - Add a helper shell script to handle the execution and background tasks - Update notification email list - CLD-789 fix minikube cleanup step * Add HC tests to nightly runs * remove forgotten 'date' * Add Romain to the mailing list
1 parent c8d9631 commit 1dd50f5

File tree

3 files changed

+88
-7
lines changed

3 files changed

+88
-7
lines changed

Jenkinsfile

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
@Library('[email protected]')
66
import groovy.json.JsonSlurperClassic
77

8-
8+
emailList = 'vitaly.korolev@marklogic.com, [email protected], [email protected], [email protected], barkha.choithani@marklogic.com, romain.winieski@marklogic.com'
99
gitCredID = '550650ab-ee92-4d31-a3f4-91a11d5388a3'
1010
JIRA_ID = ''
1111
JIRA_ID_PATTERN = /CLD-\d{3,4}/
@@ -164,7 +164,7 @@ pipeline {
164164
skipStagesAfterUnstable()
165165
}
166166
triggers {
167-
parameterizedCron( env.BRANCH_NAME == 'develop' ? '''00 04 * * *''' : '')
167+
parameterizedCron( env.BRANCH_NAME == 'develop' ? '''00 04 * * *%HC_TESTS=true''' : '')
168168
}
169169
environment {
170170
timeStamp = sh(returnStdout: true, script: "date +%Y%m%d -d '-5 hours'").trim()
@@ -180,6 +180,7 @@ pipeline {
180180
string(name: 'emailList', defaultValue: emailList, description: 'List of email for build notification', trim: true)
181181
choice(name: 'ML_VERSION', choices: '11.1\n12.0\n10.0\n9.0', description: 'MarkLogic version. used to pick appropriate docker image')
182182
booleanParam(name: 'KUBERNETES_TESTS', defaultValue: true, description: 'Run kubernetes tests')
183+
booleanParam(name: 'HC_TESTS', defaultValue: false, description: 'Run Hub Central E2E UI tests (takes about 3 hours)')
183184
string(name: 'dockerReleaseVer', defaultValue: '1.0.2', description: 'Current Docker version. (e.g. 1.0.1)', trim: true)
184185
choice(name: 'PREV_ML_VERSION', choices: '10.0\n9.0', description: 'Previous MarkLogic version for MarkLogic upgrade tests')
185186
string(name: 'prevDockerReleaseVer', defaultValue: '1.0.2', description: 'Previous Docker version for MarkLogic upgrade tests. (e.g. 1.0.1)', trim: true)
@@ -211,11 +212,22 @@ pipeline {
211212
}
212213
steps {
213214
sh """
214-
export MINIKUBE_HOME=/space;
215+
export MINIKUBE_HOME=/space
215216
make test dockerImage=${dockerRepository}:${dockerVersion} prevDockerImage=${dockerRepository}:${prevDockerVersion} kubernetesVersion=${params.K8_VERSION} saveOutput=true
216217
"""
217218
}
218219
}
220+
stage('Kubernetes-Run-HC-Tests') {
221+
when {
222+
expression { return params.HC_TESTS }
223+
}
224+
steps {
225+
sh """
226+
export MINIKUBE_HOME=/space;
227+
make hc-test dockerImage=${dockerRepository}:${dockerVersion} kubernetesVersion=${params.K8_VERSION}
228+
"""
229+
}
230+
}
219231
}
220232

221233
post {
@@ -224,7 +236,7 @@ pipeline {
224236
docker system prune --force --filter "until=720h"
225237
docker volume prune --force
226238
docker image prune --force --all
227-
minikube delete --all --purge
239+
export MINIKUBE_HOME=/space; minikube delete --all --purge
228240
'''
229241
publishTestResults()
230242
}

makefile

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
dockerImage?=ml-docker-dev.marklogic.com/marklogic/marklogic-server-centos:11.1.20230329-centos-1.0.2
2-
prevDockerImage?=ml-docker-dev.marklogic.com/marklogic/marklogic-server-centos:10.0-20230307-centos-1.0.2
1+
dockerImage?=ml-docker-dev.marklogic.com/marklogic/marklogic-server-centos:11.1.20230522-centos-1.0.2
2+
prevDockerImage?=ml-docker-dev.marklogic.com/marklogic/marklogic-server-centos:10.0-20230522-centos-1.0.2
33
kubernetesVersion?=v1.25.8
44
## System requirement:
55
## - Go
@@ -85,7 +85,7 @@ lint:
8585
## * [kubernetesVersion] optional. Default is v1.25.8. Used for testing kubernetes version compatibility
8686
## * [saveOutput] optional. Save the output to a xml file. Example: saveOutput=true
8787
.PHONY: e2e-test
88-
e2e-test: prepare
88+
e2e-test: prepare
8989
@echo "=====Delete if there are existing minikube cluster"
9090
minikube delete
9191

@@ -104,6 +104,45 @@ lint:
104104
@echo "=====Delete minikube cluster"
105105
minikube delete
106106

107+
#***************************************************************************
108+
# hc-test
109+
#***************************************************************************
110+
## Run all HC tests
111+
## Options:
112+
## * [some option]
113+
.PHONY: hc-test
114+
hc-test:
115+
116+
@echo "=====Delete if there are existing minikube cluster"
117+
minikube delete
118+
119+
@echo "=====Installing minikube cluster"
120+
minikube start --driver=docker --kubernetes-version=$(kubernetesVersion) -n=1 --cpus 2 --memory 10000
121+
122+
@echo "=====Loading marklogc image $(dockerImage) to minikube cluster"
123+
minikube image load $(dockerImage)
124+
125+
@echo "=====Deploy helm with a single MarkLogic node"
126+
helm install hc charts --set auth.adminUsername=admin --set auth.adminPassword=admin --set persistence.enabled=false --wait
127+
kubectl wait -l statefulset.kubernetes.io/pod-name=hc-marklogic-0 --for=condition=ready pod --timeout=30m
128+
129+
@echo "=====Clone Data Hub repository"
130+
rm -rf marklogic-data-hub; git clone https://github.com/marklogic/marklogic-data-hub
131+
132+
@echo "=====Run HC tests with a shell script (~3 hours)"
133+
./test/hc_e2e.sh
134+
135+
@echo "=====Finalize test report"
136+
mkdir -p ./test/test_results
137+
cp ./marklogic-data-hub/marklogic-data-hub-central/ui/e2e/results/* ./test/test_results/
138+
rm -rf marklogic-data-hub
139+
140+
@echo "=====Uninstall helm"
141+
helm uninstall hc
142+
143+
@echo "=====Delete minikube cluster"
144+
minikube delete
145+
107146
#***************************************************************************
108147
# template-test
109148
#***************************************************************************

test/hc_e2e.sh

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/bin/bash
2+
#This helper script will run E2E UI tests for Hub Central (https://github.com/marklogic/marklogic-data-hub/tree/develop/marklogic-data-hub-central/ui/e2e)
3+
4+
#override java and node version for Jenkins
5+
[[ $USER = 'builder' ]] && { export PATH=/home/builder/java/jdk1.8.0_201/bin:/home/builder/nodeJs/node-v16.19.1-linux-x64/bin/:$PATH; unset JAVA_HOME; }
6+
7+
echo "---- start port forwarding ----"
8+
kubectl port-forward hc-marklogic-0 8000 8001 8002 8010 8011 8013 &> /dev/null &
9+
forwarderPID=$!
10+
11+
echo "---- configure environment ----"
12+
cd marklogic-data-hub/
13+
./gradlew clean build -x test
14+
./gradlew publishToMavenLocal -PskipWeb=true
15+
cd marklogic-data-hub-central/ui/e2e
16+
./setup.sh dhs=false mlHost=localhost mlSecurityUsername=admin mlSecurityPassword=admin
17+
18+
echo "---- start Hub Central application ----"
19+
cd ../../..
20+
./gradlew bootRun -PhubUseLocalDefaults=true &
21+
bootRunPID=$!
22+
23+
sleep 10
24+
25+
echo "---- start UI sanity tests on HC ----"
26+
cd marklogic-data-hub-central/ui/e2e
27+
npm run cy:run --reporter junit --reporter-options "toConsole=false"
28+
29+
echo "---- cleanup background processes ----"
30+
kill $bootRunPID $forwarderPID

0 commit comments

Comments
 (0)