From b29421c1eb12cdd5fc46cf55285401807755a361 Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Thu, 17 Jul 2025 12:03:11 +0300 Subject: [PATCH 01/12] Update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 38bc7a1..916fee9 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -20,7 +20,7 @@ pipeline { } } } - stage('BUILD') { + stage('BUILD') { steps { script { reportiumPipeline.buildCode() From d22cca7d07146498b79eaf07e923f6775afc8e24 Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Thu, 17 Jul 2025 12:14:12 +0300 Subject: [PATCH 02/12] Update Jenkinsfile --- Jenkinsfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 916fee9..f4d79ac 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -45,5 +45,12 @@ pipeline { } } } + } + post { + always { + script { + reportiumPipeline.buildStatusNotification() + } + } } } From ddeb0fe9fee655fdb1751a560ca9c31fad3ae44d Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Thu, 17 Jul 2025 12:21:01 +0300 Subject: [PATCH 03/12] Update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index f4d79ac..e7b456c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -33,7 +33,7 @@ pipeline { script { reportiumSdkVersion = "${artifactTag}" jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ - string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: false, wait: true + string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: true, wait: true } } From b98b1f47ecbd0d7545efa5bcfbccfa0c472d6953 Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Mon, 5 Jan 2026 12:23:11 +0200 Subject: [PATCH 04/12] Refactor build stage and add buildCode function Replaces reportiumPipeline.buildCode() with a new local buildCode() function in Jenkinsfile. The new function handles Maven build, versioning, conditional deployment to Nexus based on branch, tagging, and pushing tags, with error handling and Slack notifications. --- Jenkinsfile | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index e7b456c..93be5ad 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -23,7 +23,7 @@ pipeline { stage('BUILD') { steps { script { - reportiumPipeline.buildCode() + buildCode() echo "artifactTag - is ${artifactTag}" } } @@ -54,3 +54,48 @@ pipeline { } } } +// ...existing code above unchanged... + +def buildCode() { + dir("$WORKSPACE/source") { + try { + withMaven( + maven: 'Maven latest', + mavenOpts: '-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/temp/dump.hprof', + mavenLocalRepo: '/home/ubuntu/.m2/repository') { + + sh(script: "mvn build-helper:parse-version versions:set -DnewVersion=${artifactTag}"); + sh(script: 'mvn clean install -Pcode-coverage-validation'); + + // Determine PR vs master + boolean isPrBuild = (env.CHANGE_ID?.trim()) || (BRANCH_NAME != 'master') + echo "isPrBuild = ${isPrBuild}" + + + // Conditional deploy target + def deployCmd = 'mvn deploy -DskipTests -Ppackage-stuff' + if (isPrBuild) { + def prRepo = 'snapshots::default::http://reporting-new-nexus.aws-dev.perfectomobile.com/repository/maven-snapshots' + deployCmd += " -DaltDeploymentRepository=${prRepo}" + echo "PR/non-master build -> deploying to new Nexus: ${prRepo}" + } else { + echo "Master build -> using distributionManagement from pom.xml" + } + + sh(script: deployCmd) + + } + + sh(script: "git tag ${artifactTag} ${commitHash}"); + withCredentials([usernamePassword(credentialsId: '2cb048f3-6369-4220-bbb7-2668527a8c22', passwordVariable: 'GIT_TOKEN', usernameVariable: 'GIT_USERNAME')]) { + sh "git push https://${GIT_USERNAME}:${GIT_TOKEN}@${repositoryUrl} --tags" + } + } catch (error) { + echo "Current build currentResult (buildCode - catch): ${currentBuild.currentResult}" + reportiumSlack.sendSlackMessage("${slackChannel}", "failed to compile the code, build aborted", "#e02814"); + throw error; + } + } + echo "Current build currentResult (buildCode): ${currentBuild.currentResult}" +} +// ...existing code after unchanged... \ No newline at end of file From 48c747acbf4399cd20210a2b1ccd55f1faf662bf Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Mon, 5 Jan 2026 12:23:49 +0200 Subject: [PATCH 05/12] Comment out test and Whitesource scan stages in Jenkinsfile The 'Test' and 'WHITESOURCE SCAN' stages in Jenkinsfile have been commented out, disabling their execution. Additionally, a new 'Jenkinsfile copy' has been added, which includes enhanced build, test, and Whitesource scan logic, parameter handling, and error notifications. --- Jenkinsfile | 32 ++++++------ Jenkinsfile copy | 129 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+), 16 deletions(-) create mode 100644 Jenkinsfile copy diff --git a/Jenkinsfile b/Jenkinsfile index 93be5ad..16e51c1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -28,23 +28,23 @@ pipeline { } } } - stage('Test') { - steps { - script { - reportiumSdkVersion = "${artifactTag}" - jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ - string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: true, wait: true + // stage('Test') { + // steps { + // script { + // reportiumSdkVersion = "${artifactTag}" + // jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ + // string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: true, wait: true - } - } - } - stage('WHITESOURCE SCAN') { - steps { - script { - reportiumPipeline.trigger_whitesource_scan() - } - } - } + // } + // } + // } + // stage('WHITESOURCE SCAN') { + // steps { + // script { + // reportiumPipeline.trigger_whitesource_scan() + // } + // } + // } } post { always { diff --git a/Jenkinsfile copy b/Jenkinsfile copy new file mode 100644 index 0000000..31e3339 --- /dev/null +++ b/Jenkinsfile copy @@ -0,0 +1,129 @@ +library 'aws-access-keys@master' + +pipeline { + agent { label 'ubuntu-build-slave-java17' } + parameters { + string(name: 'SDK_RELEASE_TAG', defaultValue: '', description: 'SDK Release Tag', trim: true) + } + options { + disableConcurrentBuilds() + buildDiscarder(logRotator(numToKeepStr: '20', artifactNumToKeepStr: '20')) + } + stages { + + stage('CLEAN UP') { + steps { + cleanWs() + } + } + stage('SETUP BUILD') { + steps { + script { + setupBuild() + } + } + } + stage('BUILD') { + steps { + script { + buildCode() + echo "artifactTag - is ${artifactTag}" + } + } + } + stage('Test') { + steps { + script { + // Pick provided SDK_RELEASE_TAG if non-empty, else fallback to artifactTag + def reportiumSdkVersion = params.SDK_RELEASE_TAG?.trim() ? params.SDK_RELEASE_TAG.trim() : artifactTag + echo "Using reportiumSdkVersion=${reportiumSdkVersion}" + + jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ + string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: true, wait: true + + } + } + } + stage('WHITESOURCE SCAN') { + steps { + script { + reportiumPipeline.trigger_whitesource_scan() + } + } + } + } + post { + always { + script { + reportiumPipeline.buildStatusNotification() + } + } + } +} + + +def buildCode() { + dir("$WORKSPACE/source") { + try { + withMaven( + maven: 'Maven latest', + mavenOpts: '-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/temp/dump.hprof', + mavenLocalRepo: '/home/ubuntu/.m2/repository') { + sh(script: "mvn build-helper:parse-version versions:set -DnewVersion=${artifactTag}"); + sh(script: 'mvn clean install -Pcode-coverage-validation'); + switch (BRANCH_NAME) { + case 'master': + /* Disbale Whitesource + sh(''' + #!/bin/bash + aws s3 cp s3://unified-agent/wss-unified-agent-20.10.1.jar . + java -jar wss-unified-agent-20.10.1.jar -detect -c wss-generated-file.config + java -jar wss-unified-agent-20.10.1.jar -wss.url https://saas-eu.whitesourcesoftware.com/agent -apiKey e1ebdc4fe28549e5a71bd790288ca2c27f88543eac8e4a6e9f4bedc1763b3810 -product Perfecto -project ${project} -c wss-generated-file.config + ''') */ + break; + default: + break; + } + sh(script: 'mvn deploy -DskipTests -Ppackage-stuff -X'); + } + sh(script: "git tag ${artifactTag} ${commitHash}"); + withCredentials([usernamePassword(credentialsId: '2cb048f3-6369-4220-bbb7-2668527a8c22 ', passwordVariable: 'GIT_TOKEN', usernameVariable: 'GIT_USERNAME')]) { + sh "git push https://${GIT_USERNAME}:${GIT_TOKEN}@${repositoryUrl} --tags" + } + } catch (error) { + echo "Current build currentResult (buildCode - catch): ${currentBuild.currentResult}" + reportiumSlack.sendSlackMessage("${slackChannel}", "failed to compile the code, build aborted", "#e02814"); + throw error; + } + } + echo "Current build currentResult (buildCode): ${currentBuild.currentResult}" +} + + +def setupBuild() { + dir("$WORKSPACE/source") { + checkout scm; + env.repositoryUrl = sh(script: 'git config --get remote.origin.url', returnStdout: true).trim().split('://')[1]; + env.project = sh(script: 'basename -s .git `git config --get remote.origin.url`', returnStdout: true).trim(); + env.commitHash = sh(script: 'git rev-parse HEAD', returnStdout: true).trim(); + env.PREFIX = sh(script: "echo $commitHash", returnStdout: true).take(9) + env.commiterMail = sh(script: 'git --no-pager show -s --format=\'%ae\'', returnStdout: true).trim(); + env.committerName = sh(script: 'git log -1 --pretty=format:\'%an\'', returnStdout: true).trim(); + env.slackChannel = reportiumSlack.getSlackChannel(commiterMail); + switch (BRANCH_NAME) { + case 'master': + if (params.SDK_RELEASE_TAG?.trim()) { + env.artifactTag = params.SDK_RELEASE_TAG.trim() + } else { + env.artifactTag = "1.1.${BUILD_NUMBER}"; + } + break; + default: + env.artifactTag = "1.1.${JOB_BASE_NAME}.${BUILD_NUMBER}-SNAPSHOT"; // JOB_BASE_NAME is usually "PR-XXX" + reportiumSlack.sendSlackMessage("${slackChannel}", "Build ${JOB_NAME}: STARTED :star:", "#14e028"); + break; + } + } + sh 'env' + echo "Current build currentResult (setupBuild): ${currentBuild.currentResult}" +} \ No newline at end of file From 350f336756527ec85cf40220a1d75b844b11d181 Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Mon, 5 Jan 2026 12:52:46 +0200 Subject: [PATCH 06/12] Enable 'Test' stage in Jenkinsfile Uncommented and activated the 'Test' stage to trigger the 'reportium-sdk-java-test/master' job with the appropriate parameters. Also removed a redundant echo statement from the build stage. --- Jenkinsfile | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 16e51c1..57ea215 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -24,20 +24,19 @@ pipeline { steps { script { buildCode() - echo "artifactTag - is ${artifactTag}" } } } - // stage('Test') { - // steps { - // script { - // reportiumSdkVersion = "${artifactTag}" - // jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ - // string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: true, wait: true + stage('Test') { + steps { + script { + reportiumSdkVersion = "${artifactTag}" + jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ + string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: true, wait: true - // } - // } - // } + } + } + } // stage('WHITESOURCE SCAN') { // steps { // script { From f29e55ae84e5120246c4c662e63104433c1a19e4 Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Tue, 6 Jan 2026 10:33:40 +0200 Subject: [PATCH 07/12] Add SDK_RELEASE_TAG param and refine deployment logic Introduces the SDK_RELEASE_TAG parameter to control version deployment to Nexus. Refines deployment logic to distinguish between PR, master, and test-pr builds, ensuring only master releases with a supplied tag are deployed and tagged, while other builds deploy snapshots or skip deployment as appropriate. --- Jenkinsfile | 59 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 57ea215..d74f260 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,6 +2,9 @@ library 'aws-access-keys@master' pipeline { agent { label 'ubuntu-build-slave-java17' } + parameters { + string(name: 'SDK_RELEASE_TAG', defaultValue: '', description: 'Supply version to deploy to Nexus (e.g., 4.4.100). Leave empty to skip deployment.') + } options { disableConcurrentBuilds() buildDiscarder(logRotator(numToKeepStr: '20', artifactNumToKeepStr: '20')) @@ -17,6 +20,15 @@ pipeline { steps { script { reportiumPipeline.setupBuild() + // Override version for this project only + if (BRANCH_NAME == 'master') { + if (params.SDK_RELEASE_TAG?.trim()) { + env.artifactTag = params.SDK_RELEASE_TAG + echo "Using supplied release version: ${artifactTag}" + } else { + echo "Master build without SDK_RELEASE_TAG -> build-only mode (no deployment)" + } + } } } } @@ -53,7 +65,6 @@ pipeline { } } } -// ...existing code above unchanged... def buildCode() { dir("$WORKSPACE/source") { @@ -63,31 +74,38 @@ def buildCode() { mavenOpts: '-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/temp/dump.hprof', mavenLocalRepo: '/home/ubuntu/.m2/repository') { - sh(script: "mvn build-helper:parse-version versions:set -DnewVersion=${artifactTag}"); - sh(script: 'mvn clean install -Pcode-coverage-validation'); + sh(script: "mvn build-helper:parse-version versions:set -DnewVersion=${artifactTag}") + sh(script: 'mvn clean install -Pcode-coverage-validation') - // Determine PR vs master - boolean isPrBuild = (env.CHANGE_ID?.trim()) || (BRANCH_NAME != 'master') - echo "isPrBuild = ${isPrBuild}" + // Deployment logic: PR builds deploy snapshots, master releases deploy via pom.xml + boolean isMasterRelease = (BRANCH_NAME == 'test-pr') && (params.SDK_RELEASE_TAG?.trim()) + boolean isPrBuild = (env.CHANGE_ID?.trim()) || (BRANCH_NAME != 'master') || (BRANCH_NAME != 'test-pr') + echo "Deployment decision: isMasterRelease=${isMasterRelease}, isPrBuild=${isPrBuild}, artifactTag=${artifactTag}" - // Conditional deploy target - def deployCmd = 'mvn deploy -DskipTests -Ppackage-stuff' - if (isPrBuild) { - def prRepo = 'snapshots::default::http://reporting-new-nexus.aws-dev.perfectomobile.com/repository/maven-snapshots' - deployCmd += " -DaltDeploymentRepository=${prRepo}" - echo "PR/non-master build -> deploying to new Nexus: ${prRepo}" + if (isPrBuild || isMasterRelease) { + def deployCmd = 'mvn deploy -DskipTests -Ppackage-stuff' + + if (isPrBuild) { + def snapshotRepo = 'snapshots::default::http://reporting-new-nexus.aws-dev.perfectomobile.com/repository/maven-snapshots' + deployCmd += " -DaltDeploymentRepository=${snapshotRepo}" + echo "PR/non-master build -> deploying SNAPSHOT to ${snapshotRepo}" + } else { + echo "Master release -> deploying version ${artifactTag} via pom.xml distributionManagement" + } + + sh(script: deployCmd) } else { - echo "Master build -> using distributionManagement from pom.xml" + echo "Master build without SDK_RELEASE_TAG -> skipping deployment" } - - sh(script: deployCmd) - } - sh(script: "git tag ${artifactTag} ${commitHash}"); - withCredentials([usernamePassword(credentialsId: '2cb048f3-6369-4220-bbb7-2668527a8c22', passwordVariable: 'GIT_TOKEN', usernameVariable: 'GIT_USERNAME')]) { - sh "git push https://${GIT_USERNAME}:${GIT_TOKEN}@${repositoryUrl} --tags" + // Only tag if it's a master release + if ((BRANCH_NAME == 'master') && (params.SDK_RELEASE_TAG?.trim())) { + sh(script: "git tag ${artifactTag} ${commitHash}"); + withCredentials([usernamePassword(credentialsId: '2cb048f3-6369-4220-bbb7-2668527a8c22', passwordVariable: 'GIT_TOKEN', usernameVariable: 'GIT_USERNAME')]) { + sh "git push https://${GIT_USERNAME}:${GIT_TOKEN}@${repositoryUrl} --tags" + } } } catch (error) { echo "Current build currentResult (buildCode - catch): ${currentBuild.currentResult}" @@ -96,5 +114,4 @@ def buildCode() { } } echo "Current build currentResult (buildCode): ${currentBuild.currentResult}" -} -// ...existing code after unchanged... \ No newline at end of file +} \ No newline at end of file From 53b77137d041f70cd501ad9f2c23c222f4798515 Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Tue, 6 Jan 2026 10:45:41 +0200 Subject: [PATCH 08/12] Update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index d74f260..c6d53ce 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -79,7 +79,7 @@ def buildCode() { // Deployment logic: PR builds deploy snapshots, master releases deploy via pom.xml boolean isMasterRelease = (BRANCH_NAME == 'test-pr') && (params.SDK_RELEASE_TAG?.trim()) - boolean isPrBuild = (env.CHANGE_ID?.trim()) || (BRANCH_NAME != 'master') || (BRANCH_NAME != 'test-pr') + boolean isPrBuild = (env.CHANGE_ID?.trim()) || (BRANCH_NAME != 'test-pr') echo "Deployment decision: isMasterRelease=${isMasterRelease}, isPrBuild=${isPrBuild}, artifactTag=${artifactTag}" From 85331a2e9a913343464d9c589a2465782ff4b8df Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Tue, 6 Jan 2026 11:25:20 +0200 Subject: [PATCH 09/12] Update Jenkinsfile --- Jenkinsfile | 59 ++++++++++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c6d53ce..98c0217 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -20,14 +20,11 @@ pipeline { steps { script { reportiumPipeline.setupBuild() - // Override version for this project only - if (BRANCH_NAME == 'master') { - if (params.SDK_RELEASE_TAG?.trim()) { - env.artifactTag = params.SDK_RELEASE_TAG - echo "Using supplied release version: ${artifactTag}" - } else { - echo "Master build without SDK_RELEASE_TAG -> build-only mode (no deployment)" - } + if (params.SDK_RELEASE_TAG?.trim()) { + env.artifactTag = params.SDK_RELEASE_TAG + echo "Using supplied release version: ${artifactTag}" + } else { + echo "${BRANCH_NAME} build without SDK_RELEASE_TAG -> build-only mode (no deployment/test)" } } } @@ -40,24 +37,22 @@ pipeline { } } stage('Test') { + when { + expression { + ((BRANCH_NAME == 'test-pr')) && params.SDK_RELEASE_TAG?.trim() + } + } steps { script { - reportiumSdkVersion = "${artifactTag}" - jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ - string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: true, wait: true - + reportiumSdkVersion = "${artifactTag}" + jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ + string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}") + ], propagate: true, wait: true } } } - // stage('WHITESOURCE SCAN') { - // steps { - // script { - // reportiumPipeline.trigger_whitesource_scan() - // } - // } - // } } - post { + post { always { script { reportiumPipeline.buildStatusNotification() @@ -77,11 +72,11 @@ def buildCode() { sh(script: "mvn build-helper:parse-version versions:set -DnewVersion=${artifactTag}") sh(script: 'mvn clean install -Pcode-coverage-validation') - // Deployment logic: PR builds deploy snapshots, master releases deploy via pom.xml - boolean isMasterRelease = (BRANCH_NAME == 'test-pr') && (params.SDK_RELEASE_TAG?.trim()) - boolean isPrBuild = (env.CHANGE_ID?.trim()) || (BRANCH_NAME != 'test-pr') + // Deployment logic: test-pr mimics master for testing, PRs deploy snapshots + boolean isMasterRelease = ((BRANCH_NAME == 'master') || (BRANCH_NAME == 'test-pr')) && (params.SDK_RELEASE_TAG?.trim()) + boolean isPrBuild = (env.CHANGE_ID?.trim()) - echo "Deployment decision: isMasterRelease=${isMasterRelease}, isPrBuild=${isPrBuild}, artifactTag=${artifactTag}" + echo "Deployment decision: branch=${BRANCH_NAME}, isMasterRelease=${isMasterRelease}, isPrBuild=${isPrBuild}, artifactTag=${artifactTag}" if (isPrBuild || isMasterRelease) { def deployCmd = 'mvn deploy -DskipTests -Ppackage-stuff' @@ -89,28 +84,28 @@ def buildCode() { if (isPrBuild) { def snapshotRepo = 'snapshots::default::http://reporting-new-nexus.aws-dev.perfectomobile.com/repository/maven-snapshots' deployCmd += " -DaltDeploymentRepository=${snapshotRepo}" - echo "PR/non-master build -> deploying SNAPSHOT to ${snapshotRepo}" + echo "PR build -> deploying SNAPSHOT to ${snapshotRepo}" } else { - echo "Master release -> deploying version ${artifactTag} via pom.xml distributionManagement" + echo "Release build (${BRANCH_NAME}) -> deploying version ${artifactTag} via pom.xml distributionManagement" } sh(script: deployCmd) } else { - echo "Master build without SDK_RELEASE_TAG -> skipping deployment" + echo "${BRANCH_NAME} build without SDK_RELEASE_TAG -> skipping deployment" } } - // Only tag if it's a master release - if ((BRANCH_NAME == 'master') && (params.SDK_RELEASE_TAG?.trim())) { - sh(script: "git tag ${artifactTag} ${commitHash}"); + // Git tag for master or test-pr releases (remove test-pr before merge) + if (((BRANCH_NAME == 'master') || (BRANCH_NAME == 'test-pr')) && (params.SDK_RELEASE_TAG?.trim())) { + sh(script: "git tag ${artifactTag} ${commitHash}") withCredentials([usernamePassword(credentialsId: '2cb048f3-6369-4220-bbb7-2668527a8c22', passwordVariable: 'GIT_TOKEN', usernameVariable: 'GIT_USERNAME')]) { sh "git push https://${GIT_USERNAME}:${GIT_TOKEN}@${repositoryUrl} --tags" } } } catch (error) { echo "Current build currentResult (buildCode - catch): ${currentBuild.currentResult}" - reportiumSlack.sendSlackMessage("${slackChannel}", "failed to compile the code, build aborted", "#e02814"); - throw error; + reportiumSlack.sendSlackMessage("${slackChannel}", "failed to compile the code, build aborted", "#e02814") + throw error } } echo "Current build currentResult (buildCode): ${currentBuild.currentResult}" From edba0df0880858b22ee86dddc97cee97ff62409d Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Tue, 6 Jan 2026 11:28:36 +0200 Subject: [PATCH 10/12] Update Jenkinsfile --- Jenkinsfile | 58 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 98c0217..2a83559 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -20,12 +20,13 @@ pipeline { steps { script { reportiumPipeline.setupBuild() - if (params.SDK_RELEASE_TAG?.trim()) { - env.artifactTag = params.SDK_RELEASE_TAG - echo "Using supplied release version: ${artifactTag}" - } else { - echo "${BRANCH_NAME} build without SDK_RELEASE_TAG -> build-only mode (no deployment/test)" - } + // Override version for this project only + if (params.SDK_RELEASE_TAG?.trim()) { + env.artifactTag = params.SDK_RELEASE_TAG + echo "Using supplied release version: ${artifactTag}" + } else { + echo "Master build without SDK_RELEASE_TAG -> build-only mode (no deployment)" + } } } } @@ -37,22 +38,29 @@ pipeline { } } stage('Test') { - when { + when { expression { - ((BRANCH_NAME == 'test-pr')) && params.SDK_RELEASE_TAG?.trim() + ((BRANCH_NAME == 'master') || (BRANCH_NAME == 'test-pr')) && params.SDK_RELEASE_TAG?.trim() } } steps { script { - reportiumSdkVersion = "${artifactTag}" - jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ - string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}") - ], propagate: true, wait: true + reportiumSdkVersion = "${artifactTag}" + jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ + string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: true, wait: true + } } } + // stage('WHITESOURCE SCAN') { + // steps { + // script { + // reportiumPipeline.trigger_whitesource_scan() + // } + // } + // } } - post { + post { always { script { reportiumPipeline.buildStatusNotification() @@ -72,11 +80,11 @@ def buildCode() { sh(script: "mvn build-helper:parse-version versions:set -DnewVersion=${artifactTag}") sh(script: 'mvn clean install -Pcode-coverage-validation') - // Deployment logic: test-pr mimics master for testing, PRs deploy snapshots - boolean isMasterRelease = ((BRANCH_NAME == 'master') || (BRANCH_NAME == 'test-pr')) && (params.SDK_RELEASE_TAG?.trim()) - boolean isPrBuild = (env.CHANGE_ID?.trim()) + // Deployment logic: PR builds deploy snapshots, master releases deploy via pom.xml + boolean isMasterRelease = (BRANCH_NAME == 'test-pr') && (params.SDK_RELEASE_TAG?.trim()) + boolean isPrBuild = (env.CHANGE_ID?.trim()) || (BRANCH_NAME != 'test-pr') - echo "Deployment decision: branch=${BRANCH_NAME}, isMasterRelease=${isMasterRelease}, isPrBuild=${isPrBuild}, artifactTag=${artifactTag}" + echo "Deployment decision: isMasterRelease=${isMasterRelease}, isPrBuild=${isPrBuild}, artifactTag=${artifactTag}" if (isPrBuild || isMasterRelease) { def deployCmd = 'mvn deploy -DskipTests -Ppackage-stuff' @@ -84,28 +92,28 @@ def buildCode() { if (isPrBuild) { def snapshotRepo = 'snapshots::default::http://reporting-new-nexus.aws-dev.perfectomobile.com/repository/maven-snapshots' deployCmd += " -DaltDeploymentRepository=${snapshotRepo}" - echo "PR build -> deploying SNAPSHOT to ${snapshotRepo}" + echo "PR/non-master build -> deploying SNAPSHOT to ${snapshotRepo}" } else { - echo "Release build (${BRANCH_NAME}) -> deploying version ${artifactTag} via pom.xml distributionManagement" + echo "Master release -> deploying version ${artifactTag} via pom.xml distributionManagement" } sh(script: deployCmd) } else { - echo "${BRANCH_NAME} build without SDK_RELEASE_TAG -> skipping deployment" + echo "Master build without SDK_RELEASE_TAG -> skipping deployment" } } - // Git tag for master or test-pr releases (remove test-pr before merge) - if (((BRANCH_NAME == 'master') || (BRANCH_NAME == 'test-pr')) && (params.SDK_RELEASE_TAG?.trim())) { - sh(script: "git tag ${artifactTag} ${commitHash}") + // Only tag if it's a master release + if ((BRANCH_NAME == 'master') && (params.SDK_RELEASE_TAG?.trim())) { + sh(script: "git tag ${artifactTag} ${commitHash}"); withCredentials([usernamePassword(credentialsId: '2cb048f3-6369-4220-bbb7-2668527a8c22', passwordVariable: 'GIT_TOKEN', usernameVariable: 'GIT_USERNAME')]) { sh "git push https://${GIT_USERNAME}:${GIT_TOKEN}@${repositoryUrl} --tags" } } } catch (error) { echo "Current build currentResult (buildCode - catch): ${currentBuild.currentResult}" - reportiumSlack.sendSlackMessage("${slackChannel}", "failed to compile the code, build aborted", "#e02814") - throw error + reportiumSlack.sendSlackMessage("${slackChannel}", "failed to compile the code, build aborted", "#e02814"); + throw error; } } echo "Current build currentResult (buildCode): ${currentBuild.currentResult}" From 6d3541a9e8bf1b63bd2bd9a95950ba1cf1a63317 Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Tue, 6 Jan 2026 13:00:30 +0200 Subject: [PATCH 11/12] Update Jenkinsfile --- Jenkinsfile | 89 ++++++++++++++++++++++++----------------------------- 1 file changed, 41 insertions(+), 48 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2a83559..cae6f9a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,7 +3,7 @@ library 'aws-access-keys@master' pipeline { agent { label 'ubuntu-build-slave-java17' } parameters { - string(name: 'SDK_RELEASE_TAG', defaultValue: '', description: 'Supply version to deploy to Nexus (e.g., 4.4.100). Leave empty to skip deployment.') + string(name: 'SDK_RELEASE_TAG', defaultValue: '', description: 'Supply version to deploy to repo1 (e.g., 4.4.100). Leave empty for snapshot deployment.') } options { disableConcurrentBuilds() @@ -20,13 +20,8 @@ pipeline { steps { script { reportiumPipeline.setupBuild() - // Override version for this project only - if (params.SDK_RELEASE_TAG?.trim()) { - env.artifactTag = params.SDK_RELEASE_TAG - echo "Using supplied release version: ${artifactTag}" - } else { - echo "Master build without SDK_RELEASE_TAG -> build-only mode (no deployment)" - } + // Echo final artifactTag for traceability (instruction #5) + echo "Build: branch=${BRANCH_NAME}, artifactTag=${artifactTag}, SDK_RELEASE_TAG=${params.SDK_RELEASE_TAG}" } } } @@ -38,29 +33,24 @@ pipeline { } } stage('Test') { - when { + when { expression { - ((BRANCH_NAME == 'master') || (BRANCH_NAME == 'test-pr')) && params.SDK_RELEASE_TAG?.trim() + env.CHANGE_ID?.trim() || ((BRANCH_NAME == 'master') && params.SDK_RELEASE_TAG?.trim()) } } steps { script { - reportiumSdkVersion = "${artifactTag}" - jobBuild = build job: "reportium-sdk-java-test/master", parameters: [ - string(name: "reportiumSdkVersion", value: "${reportiumSdkVersion}")],propagate: true, wait: true - + def testSdkVersion = env.CHANGE_ID ? artifactTag : (params.SDK_RELEASE_TAG ?: artifactTag) + echo "Triggering SDK tests with version: ${testSdkVersion}" + build job: "reportium-sdk-java-test/master", + parameters: [string(name: "reportiumSdkVersion", value: "${testSdkVersion}")], + propagate: true, + wait: true } } } - // stage('WHITESOURCE SCAN') { - // steps { - // script { - // reportiumPipeline.trigger_whitesource_scan() - // } - // } - // } } - post { + post { always { script { reportiumPipeline.buildStatusNotification() @@ -80,40 +70,43 @@ def buildCode() { sh(script: "mvn build-helper:parse-version versions:set -DnewVersion=${artifactTag}") sh(script: 'mvn clean install -Pcode-coverage-validation') - // Deployment logic: PR builds deploy snapshots, master releases deploy via pom.xml - boolean isMasterRelease = (BRANCH_NAME == 'test-pr') && (params.SDK_RELEASE_TAG?.trim()) - boolean isPrBuild = (env.CHANGE_ID?.trim()) || (BRANCH_NAME != 'test-pr') + // Deployment logic per instruction #5: echo for traceability + boolean isReleaseBuild = (BRANCH_NAME == 'master') && (params.SDK_RELEASE_TAG?.trim()) + boolean isPrBuild = (env.CHANGE_ID?.trim()) + boolean isMasterSnapshot = (BRANCH_NAME == 'master') && !params.SDK_RELEASE_TAG?.trim() - echo "Deployment decision: isMasterRelease=${isMasterRelease}, isPrBuild=${isPrBuild}, artifactTag=${artifactTag}" + echo "Deployment decision: branch=${BRANCH_NAME}, isRelease=${isReleaseBuild}, isPR=${isPrBuild}, isMasterSnapshot=${isMasterSnapshot}" - if (isPrBuild || isMasterRelease) { - def deployCmd = 'mvn deploy -DskipTests -Ppackage-stuff' - - if (isPrBuild) { - def snapshotRepo = 'snapshots::default::http://reporting-new-nexus.aws-dev.perfectomobile.com/repository/maven-snapshots' - deployCmd += " -DaltDeploymentRepository=${snapshotRepo}" - echo "PR/non-master build -> deploying SNAPSHOT to ${snapshotRepo}" - } else { - echo "Master release -> deploying version ${artifactTag} via pom.xml distributionManagement" - } + if (isPrBuild) { + // PR: deploy snapshot to reporting-new-nexus + def snapshotRepo = 'snapshots::default::http://reporting-new-nexus.aws-dev.perfectomobile.com/repository/maven-snapshots' + sh(script: "mvn deploy -DskipTests -Ppackage-stuff -DaltDeploymentRepository=${snapshotRepo}") + echo "PR build -> deployed SNAPSHOT ${artifactTag} to ${snapshotRepo}" + + } else if (isMasterSnapshot) { + // Master without SDK_RELEASE_TAG: deploy snapshot to reporting-new-nexus + def snapshotRepo = 'snapshots::default::http://reporting-new-nexus.aws-dev.perfectomobile.com/repository/maven-snapshots' + sh(script: "mvn deploy -DskipTests -Ppackage-stuff -DaltDeploymentRepository=${snapshotRepo}") + echo "Master snapshot build -> deployed ${artifactTag} to ${snapshotRepo}" + + } else if (isReleaseBuild) { + // Master with SDK_RELEASE_TAG: deploy release to repo1 via distributionManagement + sh(script: 'mvn deploy -DskipTests -Ppackage-stuff') + echo "Master release build -> deployed version ${artifactTag} to repo1 via pom.xml distributionManagement" - sh(script: deployCmd) + // Git tag release (instruction #5: artifact flow) + sh(script: "git tag ${artifactTag} ${commitHash}") + withCredentials([usernamePassword(credentialsId: '2cb048f3-6369-4220-bbb7-2668527a8c22', passwordVariable: 'GIT_TOKEN', usernameVariable: 'GIT_USERNAME')]) { + sh "git push https://${GIT_USERNAME}:${GIT_TOKEN}@${repositoryUrl} --tags" + } } else { - echo "Master build without SDK_RELEASE_TAG -> skipping deployment" - } - } - - // Only tag if it's a master release - if ((BRANCH_NAME == 'master') && (params.SDK_RELEASE_TAG?.trim())) { - sh(script: "git tag ${artifactTag} ${commitHash}"); - withCredentials([usernamePassword(credentialsId: '2cb048f3-6369-4220-bbb7-2668527a8c22', passwordVariable: 'GIT_TOKEN', usernameVariable: 'GIT_USERNAME')]) { - sh "git push https://${GIT_USERNAME}:${GIT_TOKEN}@${repositoryUrl} --tags" + echo "No deployment: branch=${BRANCH_NAME}, no release tag" } } } catch (error) { echo "Current build currentResult (buildCode - catch): ${currentBuild.currentResult}" - reportiumSlack.sendSlackMessage("${slackChannel}", "failed to compile the code, build aborted", "#e02814"); - throw error; + reportiumSlack.sendSlackMessage("${slackChannel}", "failed to compile the code, build aborted", "#e02814") + throw error } } echo "Current build currentResult (buildCode): ${currentBuild.currentResult}" From 67a7f49dfc5df8668fae226223ed525cf1ec7c8d Mon Sep 17 00:00:00 2001 From: bmikler17 Date: Tue, 6 Jan 2026 13:01:41 +0200 Subject: [PATCH 12/12] Remove conditional execution from Test stage The 'when' condition for the Test stage has been removed, allowing the stage to always execute regardless of branch or parameters. --- Jenkinsfile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index cae6f9a..d7e2bc8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -33,11 +33,6 @@ pipeline { } } stage('Test') { - when { - expression { - env.CHANGE_ID?.trim() || ((BRANCH_NAME == 'master') && params.SDK_RELEASE_TAG?.trim()) - } - } steps { script { def testSdkVersion = env.CHANGE_ID ? artifactTag : (params.SDK_RELEASE_TAG ?: artifactTag)