Skip to content

Commit fcc5cc0

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

File tree

2 files changed

+179
-3
lines changed

2 files changed

+179
-3
lines changed

Jenkinsfile

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

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)