Skip to content

Commit ff016e1

Browse files
committed
PDP-817 Modifying Jenkinsfile to run ARM tests in regressions
1 parent aa66563 commit ff016e1

File tree

2 files changed

+183
-3
lines changed

2 files changed

+183
-3
lines changed

Jenkinsfile

Lines changed: 181 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ def getJavaHomePath() {
88
}
99
}
1010

11+
def getJavaHomePathForARM() {
12+
def version = (env.JAVA_VERSION == "JAVA21") ? "21" : "17"
13+
return "/usr/lib/jvm/java-${version}-amazon-corretto.aarch64"
14+
}
15+
1116
def setupDockerMarkLogic(String image) {
1217
cleanupDocker()
1318
sh label: 'mlsetup', script: '''#!/bin/bash
@@ -24,7 +29,6 @@ def setupDockerMarkLogic(String image) {
2429
export GRADLE_USER_HOME=$WORKSPACE/$GRADLE_DIR
2530
export PATH=$JAVA_HOME/bin:$PATH
2631
./gradlew -i mlWaitTillReady
27-
sleep 3
2832
./gradlew -i mlWaitTillReady
2933
./gradlew mlTestConnections
3034
./gradlew -i mlDeploy mlReloadSchemas
@@ -133,6 +137,8 @@ pipeline {
133137
GRADLE_DIR = ".gradle"
134138
DMC_USER = credentials('MLBUILD_USER')
135139
DMC_PASSWORD = credentials('MLBUILD_PASSWORD')
140+
PLATFORM = "linux/amd64"
141+
MARKLOGIC_INSTALL_CONVERTERS = "true"
136142
}
137143

138144
stages {
@@ -223,5 +229,179 @@ pipeline {
223229
}
224230
}
225231
}
232+
233+
stage('provisionInfrastructure') {
234+
when {
235+
allOf {
236+
branch 'develop'
237+
expression { return params.regressions }
238+
}
239+
}
240+
agent { label 'javaClientLinuxPool' }
241+
242+
steps {
243+
script {
244+
withCredentials([
245+
string(credentialsId: 'aws-region-us-west', variable: 'AWS_REGION'),
246+
string(credentialsId: 'aws-role-headless-testing', variable: 'AWS_ROLE'),
247+
string(credentialsId: 'aws-role-account-headless', variable: 'AWS_ROLE_ACCOUNT')
248+
]) {
249+
def deploymentResult = deployAWSInstance([
250+
instanceName : "java-client-instance-${BUILD_NUMBER}",
251+
region : env.AWS_REGION,
252+
credentialsId: 'headlessDbUserEC2',
253+
role : env.AWS_ROLE,
254+
roleAccount : env.AWS_ROLE_ACCOUNT,
255+
branch : 'master'
256+
])
257+
258+
echo "✅ Instance deployed: ${deploymentResult.privateIp}"
259+
echo "✅ Terraform directory: ${deploymentResult.terraformDir}"
260+
echo "✅ Workspace: ${deploymentResult.workspace}"
261+
echo "✅ Status: ${deploymentResult.status}"
262+
263+
// Store deployment info for cleanup
264+
env.DEPLOYMENT_INSTANCE_NAME = deploymentResult.instanceName
265+
env.DEPLOYMENT_REGION = deploymentResult.region
266+
env.DEPLOYMENT_TERRAFORM_DIR = deploymentResult.terraformDir
267+
env.EC2_PRIVATE_IP = deploymentResult.privateIp
268+
269+
def nodeName = "java-client-agent-${BUILD_NUMBER}"
270+
def remoteFS = "/space/jenkins_home"
271+
def labels = "java-client-agent-${BUILD_NUMBER}"
272+
def instanceIp = env.EC2_PRIVATE_IP
273+
274+
// Attach volumes
275+
def volumeResult = attachInstanceVolumes([
276+
instanceIp: instanceIp,
277+
remoteFS : remoteFS,
278+
branch : 'master'
279+
])
280+
281+
echo "✅ Volume attachment completed: ${volumeResult.volumeAttached}"
282+
echo "✅ Java installed: ${volumeResult.javaInstalled}"
283+
284+
//Install dependencies AND run init scripts
285+
def depsResult = installDependenciesAndInitScripts([
286+
instanceIp : instanceIp,
287+
packageFile : 'Packagedependencies',
288+
packageDir : 'terraform-templates/java-client-api',
289+
initScriptsDir : 'terraform-templates/java-client-api/scripts',
290+
initScriptsFile: 'terraform-templates/java-client-api/initscripts'
291+
])
292+
293+
echo "✅ Dependencies installed: ${depsResult.dependenciesInstalled}"
294+
if (depsResult.initScriptsExecuted) {
295+
echo "✅ Init scripts executed: ${depsResult.initScriptsCount} scripts"
296+
} else {
297+
echo "ℹ️ No init scripts configured or executed"
298+
}
299+
300+
// Use shared library to create Jenkins agent
301+
def agentResult = createJenkinsAgent([
302+
nodeName : nodeName,
303+
instanceIp : instanceIp,
304+
remoteFS : remoteFS,
305+
labels : labels,
306+
timeoutMinutes: 5,
307+
credentialsId : 'qa-builder-aws'
308+
])
309+
310+
echo "✅ Jenkins agent created: ${agentResult.nodeName}"
311+
echo "✅ Agent status: ${agentResult.status}"
312+
}
313+
}
314+
}
315+
}
316+
317+
stage('regressions-11 arm infrastructure') {
318+
when {
319+
allOf {
320+
beforeAgent true
321+
branch 'develop'
322+
expression { return params.regressions }
323+
expression { return env.EC2_PRIVATE_IP != null }
324+
}
325+
}
326+
agent { label "java-client-agent-${BUILD_NUMBER}" }
327+
environment {
328+
JAVA_HOME_DIR = getJavaHomePathForARM()
329+
PLATFORM = "linux/arm64"
330+
MARKLOGIC_INSTALL_CONVERTERS = "false"
331+
}
332+
steps {
333+
checkout([$class : 'GitSCM',
334+
branches : scm.branches,
335+
doGenerateSubmoduleConfigurations: false,
336+
extensions : [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'java-client-api']],
337+
submoduleCfg : [],
338+
userRemoteConfigs : scm.userRemoteConfigs])
339+
340+
runTests("ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-ubi9-arm:latest-11")
341+
}
342+
post {
343+
always {
344+
archiveArtifacts artifacts: 'java-client-api/**/build/reports/**/*.html'
345+
junit '**/build/**/TEST*.xml'
346+
updateWorkspacePermissions()
347+
tearDownDocker()
348+
}
349+
}
350+
}
351+
}
352+
353+
post {
354+
always {
355+
script {
356+
echo "🧹 Starting cleanup process..."
357+
358+
try {
359+
// Cleanup Terraform infrastructure
360+
if (env.EC2_PRIVATE_IP) {
361+
echo "🗑️ Cleaning up Terraform resources..."
362+
node('javaClientLinuxPool') {
363+
try {
364+
//`sleep 60` allows AWS resources to stabilize before Terraform destroys them, preventing "resource in use" errors
365+
sleep 60
366+
unstash "terraform-${BUILD_NUMBER}"
367+
withCredentials([
368+
string(credentialsId: 'aws-region-us-west', variable: 'AWS_REGION'),
369+
string(credentialsId: 'aws-role-headless-testing', variable: 'AWS_ROLE'),
370+
string(credentialsId: 'aws-role-account-headless', variable: 'AWS_ROLE_ACCOUNT')
371+
]) {
372+
withAWS(credentials: 'headlessDbUserEC2', region: env.AWS_REGION, role: env.AWS_ROLE, roleAccount: env.AWS_ROLE_ACCOUNT, duration: 3600) {
373+
sh '''#!/bin/bash
374+
export PATH=/home/builder/terraform:$PATH
375+
cd ${WORKSPACE}/${DEPLOYMENT_TERRAFORM_DIR}
376+
terraform workspace select dev
377+
terraform destroy -auto-approve
378+
'''
379+
}
380+
}
381+
echo "✅ Terraform resources destroyed successfully."
382+
// Cleanup Jenkins agent using shared library function
383+
def nodeName = "java-client-agent-${BUILD_NUMBER}"
384+
echo "🗑️ Cleaning up Jenkins agent: ${nodeName}"
385+
try {
386+
def cleanupResult = cleanupJenkinsAgent(nodeName)
387+
echo "✅ Cleanup result: ${cleanupResult.status} for node: ${cleanupResult.nodeName}"
388+
} catch (Exception jenkinsCleanupException) {
389+
echo "⚠️ Warning: Jenkins agent cleanup failed: ${jenkinsCleanupException.message}"
390+
}
391+
echo "✅ Pipeline cleanup completed successfully."
392+
} catch (Exception terraformException) {
393+
echo "⚠️ Warning: Terraform cleanup failed: ${terraformException.message}"
394+
}
395+
}
396+
} else {
397+
echo "ℹ️ No EC2 instance IP found, skipping Terraform cleanup"
398+
}
399+
} catch (Exception cleanupException) {
400+
echo "⚠️ Warning: Cleanup encountered an error: ${cleanupException.message}"
401+
echo "📋 Continuing with pipeline completion despite cleanup issues..."
402+
}
403+
}
404+
}
226405
}
227406
}
407+

docker-compose.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ services:
44

55
marklogic:
66
image: "${MARKLOGIC_IMAGE}"
7-
platform: linux/amd64
7+
platform: "${PLATFORM:-linux/amd64}"
88
environment:
9-
- INSTALL_CONVERTERS=true
9+
- INSTALL_CONVERTERS=${MARKLOGIC_INSTALL_CONVERTERS:-true}
1010
- MARKLOGIC_INIT=true
1111
- MARKLOGIC_ADMIN_USERNAME=admin
1212
- MARKLOGIC_ADMIN_PASSWORD=admin

0 commit comments

Comments
 (0)