From 3706db63dd222f6fe0a3116294f7c37d2c94769d Mon Sep 17 00:00:00 2001 From: radtriste Date: Mon, 5 Dec 2022 13:43:43 +0100 Subject: [PATCH 1/2] Build-chain deploy capability --- .ci/jenkins/Jenkinsfile.buildchain | 46 ++++- .ci/jenkins/Jenkinsfile.nightly | 160 ++++++++++-------- .ci/jenkins/Jenkinsfile.setup-branch | 15 ++ .ci/jenkins/dsl/jobs.groovy | 2 + .ci/pull-request-config.yaml | 49 +++--- .../kie/jenkins/jobdsl/KogitoJobUtils.groovy | 66 +++++++- .../org/kie/jenkins/jobdsl/Utils.groovy | 8 + 7 files changed, 242 insertions(+), 104 deletions(-) diff --git a/.ci/jenkins/Jenkinsfile.buildchain b/.ci/jenkins/Jenkinsfile.buildchain index 3db93163e..6d63c17f6 100644 --- a/.ci/jenkins/Jenkinsfile.buildchain +++ b/.ci/jenkins/Jenkinsfile.buildchain @@ -8,6 +8,11 @@ timeoutValue = env.ADDITIONAL_TIMEOUT?.trim() ?: '180' jdkTool = env.BUILD_JDK_TOOL mavenTool = env.BUILD_MAVEN_TOOL +mavenDeployArtifacts = env.ENABLE_DEPLOY +mavenDeployRepository = env.MAVEN_DEPLOY_REPOSITORY ?: '' +mavenDeployRepositoryCredsId = env.MAVEN_DEPLOY_REPOSITORY_CREDS_ID ?: '' +mavenDeployLocalDir = env.MAVEN_DEPLOY_LOCAL_DIR ?: '' + buildChainType = env.BUILDCHAIN_TYPE?.trim() ?: 'pr' buildChainProject = env.BUILDCHAIN_PROJECT?.trim() defaultSettingsXmlId = isPRBuildChainType() || isFDBBuildChainType() ? 'kogito_pr_settings' : 'kogito_release_settings' @@ -58,13 +63,22 @@ pipeline { script { sh 'printenv > env_props' archiveArtifacts artifacts: 'env_props' + + if (mavenDeployArtifacts) { + assert mavenDeployRepository : 'Please provide the maven deploy repository' + assert mavenDeployRepositoryCredsId : 'Please provide the maven deploy repository credentials' + } } } } stage('check space before build') { steps { script { - util.spaceLeft() + try { + util.spaceLeft() + } catch (err) { + echo "Error when checking the space on node ... ${err}" + } } } } @@ -131,14 +145,17 @@ pipeline { } steps { script { - env.BUILD_MVN_OPTS = "${env.BUILD_MVN_OPTS ?: ''} -Dmaven.wagon.http.ssl.insecure=true -Dmaven.test.failure.ignore=true" env.BUILD_MVN_OPTS_CURRENT = "${env.BUILD_MVN_OPTS_CURRENT ?: ''} ${getBuildMavenOptsCurrent()}" + echo "BUILD_MVN_OPTS_CURRENT = ${BUILD_MVN_OPTS_CURRENT}" + if (mavenDeployArtifacts) { + env.DEPLOY_MVN_OPTS = "${env.DEPLOY_MVN_OPTS ?: ''} -DaltDeploymentRepository=local::default::file://${getMavenDeployLocalDir()}" + echo "DEPLOY_MVN_OPTS = ${DEPLOY_MVN_OPTS}" + } configFileProvider([configFile(fileId: settingsXmlId, variable: 'MAVEN_SETTINGS_FILE')]) { withCredentials([string(credentialsId: 'kie-ci3-token', variable: 'GITHUB_TOKEN')]) { - env.BUILD_MVN_OPTS = "${env.BUILD_MVN_OPTS} -s ${MAVEN_SETTINGS_FILE}" + env.BUILD_MVN_OPTS = "${env.BUILD_MVN_OPTS ?: ''} -s ${MAVEN_SETTINGS_FILE} -Dmaven.wagon.http.ssl.insecure=true -Dmaven.test.failure.ignore=true" echo "BUILD_MVN_OPTS = ${BUILD_MVN_OPTS}" - echo "BUILD_MVN_OPTS_CURRENT = ${BUILD_MVN_OPTS_CURRENT}" sh "${getBuildChainCommandline(true)}" } @@ -176,6 +193,22 @@ pipeline { } } } + stage('Upload artifacts to repository') { + when { + expression { return mavenDeployArtifacts } + } + tools { + jdk jdkTool + maven mavenTool + } + steps { + script { + // Upload to specific repository with credentials + String mavenDeployRepositoryZipUrl = "${mavenDeployRepository.replaceAll('/content/', '/service/local/').replaceFirst('/*$', '')}/content-compressed" + maven.uploadLocalArtifacts(mavenDeployRepositoryCredsId, getMavenDeployLocalDir(), mavenDeployRepositoryZipUrl) + } + } + } stage('check space after build') { steps { script { @@ -255,7 +288,6 @@ String getReproducer() { ${BUILD_MVN_OPTS_CURRENT ? "export BUILD_MVN_OPTS_CURRENT=${BUILD_MVN_OPTS_CURRENT}" : '\n'} ${getBuildChainCommandline()} - NOTE: To install the build-chain tool, please refer to https://github.com/kiegroup/github-action-build-chain#local-execution ``` """ @@ -265,3 +297,7 @@ String getRepoNameCamelCase(String repo) { List words = repo.split('-') as List return words.collect { it.isEmpty() ? it : it.substring(0, 1).toUpperCase() + it.substring(1).toLowerCase() }.join(' ') } + +String getMavenDeployLocalDir() { + return mavenDeployLocalDir ?: "${WORKSPACE}/maven_deploy_dir" +} diff --git a/.ci/jenkins/Jenkinsfile.nightly b/.ci/jenkins/Jenkinsfile.nightly index 070d724ca..3f78fd553 100644 --- a/.ci/jenkins/Jenkinsfile.nightly +++ b/.ci/jenkins/Jenkinsfile.nightly @@ -1,11 +1,12 @@ import org.jenkinsci.plugins.workflow.libs.Library + @Library('jenkins-pipeline-shared-libraries')_ // Deploy jobs -DROOLS_DEPLOY = 'drools-deploy' -RUNTIMES_DEPLOY = 'kogito-runtimes-deploy' -APPS_DEPLOY = 'kogito-apps-deploy' -EXAMPLES_DEPLOY = 'kogito-examples-deploy' +DROOLS_DEPLOY = 'drools.build-and-deploy' +RUNTIMES_DEPLOY = 'kogito-runtimes.build-and-deploy' +APPS_DEPLOY = 'kogito-apps.build-and-deploy' +EXAMPLES_DEPLOY = 'kogito-examples.build-and-deploy' IMAGES_DEPLOY = 'kogito-images-deploy' EXAMPLES_IMAGES_DEPLOY = 'kogito-examples-images-deploy' OPERATOR_DEPLOY = 'kogito-operator-deploy' @@ -28,7 +29,7 @@ promoteImageParamsPrefix = 'PROMOTE_IMAGE' // Should be multibranch pipeline pipeline { agent { - label 'kie-rhel7 && !built-in' + label 'kie-rhel8 && !built-in' } options { @@ -51,7 +52,7 @@ pipeline { returnStdout: true, script: 'date -u "+%Y-%m-%d"' ).trim()}""" - } +} stages { stage('Initialize') { @@ -64,83 +65,92 @@ pipeline { } } - stage('Build & Deploy Drools') { + stage('Build & Deploy artifacts') { when { expression { return isArtifactsDeploy() } } - steps { - script { - def buildParams = getDefaultBuildParams() - addSkipTestsParam(buildParams) + parallel { + stage('Build & Deploy Drools') { + steps { + script { + def buildParams = getDefaultBuildParams() + addSkipTestsParam(buildParams) + addSkipIntegrationTestsParam(buildParams) - // images and operator deploy testing will use older working artifacts if that one fails - buildJob(DROOLS_DEPLOY, buildParams) - } - } - post { - failure { - addFailedStage(DROOLS_DEPLOY) + // images and operator deploy testing will use older working artifacts if that one fails + buildJob(DROOLS_DEPLOY, buildParams) + } + } + post { + failure { + addFailedStage(DROOLS_DEPLOY) + } + } } - } - } - stage('Build & Deploy Kogito Runtimes') { - when { - expression { return isArtifactsDeploy() } - } - steps { - script { - def buildParams = getDefaultBuildParams() - addSkipTestsParam(buildParams) + stage('Build & Deploy Kogito Runtimes') { + steps { + script { + def buildParams = getDefaultBuildParams() + addSkipTestsParam(buildParams) + addSkipIntegrationTestsParam(buildParams) - // images and operator deploy testing will use older working artifacts if that one fails - buildJob(RUNTIMES_DEPLOY, buildParams) - } - } - post { - failure { - addFailedStage(RUNTIMES_DEPLOY) + // images and operator deploy testing will use older working artifacts if that one fails + buildJob(RUNTIMES_DEPLOY, buildParams) + } + } + post { + failure { + addFailedStage(RUNTIMES_DEPLOY) + } + } } - } - } - stage('Build & Deploy Kogito Apps') { - when { - expression { return isArtifactsDeploy() } - } - steps { - script { - def buildParams = getDefaultBuildParams() - addSkipTestsParam(buildParams) + stage('Build & Deploy Kogito Apps') { + steps { + script { + def buildParams = getDefaultBuildParams() + addSkipTestsParam(buildParams) + addSkipIntegrationTestsParam(buildParams) - // images and operator deploy testing will use older working artifacts if that one fails - buildJob(APPS_DEPLOY, buildParams) - } - } - post { - failure { - addFailedStage(APPS_DEPLOY) + // images and operator deploy testing will use older working artifacts if that one fails + buildJob(APPS_DEPLOY, buildParams) + } + } + post { + failure { + addFailedStage(APPS_DEPLOY) + } + } } - } - } - stage('Build & Deploy Kogito Examples') { - when { - expression { return isArtifactsDeploy() } - } - steps { - script { - def buildParams = getDefaultBuildParams() - addSkipTestsParam(buildParams) - addBooleanParam(buildParams, 'UPDATE_NIGHTLY_BRANCH', true) - - // images and operator deploy testing will use older working artifacts if that one fails - buildJob(EXAMPLES_DEPLOY, buildParams) - } - } - post { - failure { - addFailedStage(EXAMPLES_DEPLOY) + stage('Build & Deploy Kogito Examples') { + steps { + script { + def buildParams = getDefaultBuildParams() + addSkipTestsParam(buildParams) + addSkipIntegrationTestsParam(buildParams) + + // images and operator deploy testing will use older working artifacts if that one fails + buildJob(EXAMPLES_DEPLOY, buildParams) + + if (isJobSucceeded(EXAMPLES_DEPLOY) || isJobUnstable(EXAMPLES_DEPLOY)) { + // Update examples nightly branch + dir('kogito-examples') { + deleteDir() + checkout(githubscm.resolveRepository('kogito-examples', getGitAuthor(), getBuildBranch(), false)) + String nightlyBranch = "nightly-${getBuildBranch()}" + githubscm.createBranch(nightlyBranch) + githubscm.pushObject('origin', nightlyBranch, getGitAuthorCredsID()) + } + } + } + } + post { + failure { + addFailedStage(EXAMPLES_DEPLOY) + } + } } } } @@ -354,6 +364,10 @@ boolean isJobSucceeded(String jobKey) { return getJob(jobKey)?.result == 'SUCCESS' } +boolean isJobUnstable(String jobKey) { + return getJob(jobKey)?.result == 'UNSTABLE' +} + String getMandrelJobKey(String jobName) { return "${jobName}-mandrel" } @@ -457,6 +471,10 @@ String getGitAuthor() { return env.GIT_AUTHOR } +String getGitAuthorCredsID() { + return env.GIT_AUTHOR_CREDS_ID +} + boolean isDeployImagesLatestTag() { return getBuildBranch() == env.BRANCH_FOR_LATEST } diff --git a/.ci/jenkins/Jenkinsfile.setup-branch b/.ci/jenkins/Jenkinsfile.setup-branch index 9006a13b3..c5a5d29de 100644 --- a/.ci/jenkins/Jenkinsfile.setup-branch +++ b/.ci/jenkins/Jenkinsfile.setup-branch @@ -106,6 +106,17 @@ pipeline { addDroolsVersionParam(buildParams) addKogitoVersionParam(buildParams) buildJob('kogito-examples', buildParams) + + if (isJobSucceeded('kogito-examples') || isJobUnstable('kogito-examples')) { + // Update examples nightly branch + dir('kogito-examples') { + deleteDir() + checkout(githubscm.resolveRepository('kogito-examples', getGitAuthor(), getBuildBranch(), false)) + String nightlyBranch = "nightly-${getBuildBranch()}" + githubscm.createBranch(nightlyBranch) + githubscm.pushObject('origin', nightlyBranch, getGitAuthorCredsID()) + } + } } } post { @@ -303,6 +314,10 @@ String getGitAuthor() { return env.GIT_AUTHOR } +String getGitAuthorCredsID() { + return env.GIT_AUTHOR_CREDS_ID +} + String getDroolsVersion() { return params.DROOLS_VERSION ?: getVersionFromReleaseBranch(util.calculateTargetReleaseBranch(getBuildBranch(), 7)) } diff --git a/.ci/jenkins/dsl/jobs.groovy b/.ci/jenkins/dsl/jobs.groovy index d57839f90..a46ca378b 100644 --- a/.ci/jenkins/dsl/jobs.groovy +++ b/.ci/jenkins/dsl/jobs.groovy @@ -100,6 +100,7 @@ void createSetupBranchJob() { GIT_BRANCH_NAME: "${GIT_BRANCH}", GIT_AUTHOR: "${GIT_AUTHOR_NAME}", + GIT_AUTHOR_CREDS_ID: "${GIT_AUTHOR_CREDENTIALS_ID}", IMAGE_REGISTRY_CREDENTIALS: "${CLOUD_IMAGE_REGISTRY_CREDENTIALS_NIGHTLY}", IMAGE_REGISTRY: "${CLOUD_IMAGE_REGISTRY}", @@ -123,6 +124,7 @@ void setupNightlyJob() { GIT_BRANCH_NAME: "${GIT_BRANCH}", GIT_AUTHOR: "${GIT_AUTHOR_NAME}", + GIT_AUTHOR_CREDS_ID: "${GIT_AUTHOR_CREDENTIALS_ID}", IMAGE_REGISTRY_CREDENTIALS: "${CLOUD_IMAGE_REGISTRY_CREDENTIALS_NIGHTLY}", IMAGE_REGISTRY: "${CLOUD_IMAGE_REGISTRY}", diff --git a/.ci/pull-request-config.yaml b/.ci/pull-request-config.yaml index 8319e088c..f94693e91 100644 --- a/.ci/pull-request-config.yaml +++ b/.ci/pull-request-config.yaml @@ -8,6 +8,7 @@ pre: | export BUILD_MVN_OPTS_CURRENT="${{ env.BUILD_MVN_OPTS_CURRENT }} dependency:tree" echo "BUILD_MVN_OPTS_CURRENT=${{ env.BUILD_MVN_OPTS_CURRENT }}" echo "QUARKUS_VERSION=${{ env.QUARKUS_VERSION }}" + echo "ENABLE_DEPLOY=${{ env.ENABLE_DEPLOY }}" default: build-command: @@ -24,15 +25,16 @@ build: build-command: before: current: | - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f drools/pom.xml versions:compare-dependencies -pl :drools-build-parent -DremotePom=io.quarkus:quarkus-bom:${{ env.QUARKUS_VERSION }} -DupdatePropertyVersions=true -DupdateDependencies=true -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.DROOLS_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f drools/pom.xml versions:set-property -pl :drools-build-parent -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.DROOLS_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f drools/pom.xml versions:compare-dependencies -pl :drools-build-parent -DremotePom=io.quarkus:quarkus-bom:${{ env.QUARKUS_VERSION }} -DupdatePropertyVersions=true -DupdateDependencies=true -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.DROOLS_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f drools/pom.xml versions:set-property -pl :drools-build-parent -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.DROOLS_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" bash -c "cd drools && if which git; then git diff; fi" upstream: | - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn versions:compare-dependencies -pl :drools-build-parent -DremotePom=io.quarkus:quarkus-bom:${{ env.QUARKUS_VERSION }} -DupdatePropertyVersions=true -DupdateDependencies=true -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.DROOLS_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn versions:set-property -pl :drools-build-parent -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.DROOLS_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn versions:compare-dependencies -pl :drools-build-parent -DremotePom=io.quarkus:quarkus-bom:${{ env.QUARKUS_VERSION }} -DupdatePropertyVersions=true -DupdateDependencies=true -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.DROOLS_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn versions:set-property -pl :drools-build-parent -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.DROOLS_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" bash -c "if which git; then git diff; fi" current: | - mvn -f drools/pom.xml clean install -Dfull ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.DROOLS_BUILD_MVN_OPTS }} + export MVN_CMD=`bash -c "if [ '${{ env.ENABLE_DEPLOY }}' = 'true' ]; then printf 'deploy ${{ env.DEPLOY_MVN_OPTS }} ${{ env.DROOLS_DEPLOY_MVN_OPTS }}'; else printf 'install'; fi"` + mvn -f drools/pom.xml clean ${{ env.MVN_CMD }} -Dfull ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.DROOLS_BUILD_MVN_OPTS }} upstream: | mvn clean install -Dquickly ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_UPSTREAM }} ${{ env.DROOLS_BUILD_MVN_OPTS_UPSTREAM }} clone: @@ -42,15 +44,16 @@ build: build-command: before: current: | - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f kogito-runtimes/pom.xml versions:compare-dependencies -pl :kogito-dependencies-bom -pl :kogito-build-parent -pl :kogito-quarkus-bom -pl :kogito-build-no-bom-parent -DremotePom=io.quarkus:quarkus-bom:${{ env.QUARKUS_VERSION }} -DupdatePropertyVersions=true -DupdateDependencies=true -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f kogito-runtimes/pom.xml versions:set-property -pl :kogito-dependencies-bom -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f kogito-runtimes/pom.xml versions:compare-dependencies -pl :kogito-dependencies-bom -pl :kogito-build-parent -pl :kogito-quarkus-bom -pl :kogito-build-no-bom-parent -DremotePom=io.quarkus:quarkus-bom:${{ env.QUARKUS_VERSION }} -DupdatePropertyVersions=true -DupdateDependencies=true -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f kogito-runtimes/pom.xml versions:set-property -pl :kogito-dependencies-bom -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" bash -c "cd kogito-runtimes && if which git; then git diff; fi" upstream: | - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn versions:compare-dependencies -pl :kogito-dependencies-bom -pl :kogito-build-parent -pl :kogito-quarkus-bom -pl :kogito-build-no-bom-parent -DremotePom=io.quarkus:quarkus-bom:${{ env.QUARKUS_VERSION }} -DupdatePropertyVersions=true -DupdateDependencies=true -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn versions:set-property -pl :kogito-dependencies-bom -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn versions:compare-dependencies -pl :kogito-dependencies-bom -pl :kogito-build-parent -pl :kogito-quarkus-bom -pl :kogito-build-no-bom-parent -DremotePom=io.quarkus:quarkus-bom:${{ env.QUARKUS_VERSION }} -DupdatePropertyVersions=true -DupdateDependencies=true -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn versions:set-property -pl :kogito-dependencies-bom -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" bash -c "if which git; then git diff; fi" current: | - mvn -f kogito-runtimes/pom.xml clean install -Dvalidate-formatting ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS }} + export MVN_CMD=`bash -c "if [ '${{ env.ENABLE_DEPLOY }}' = 'true' ]; then printf 'deploy ${{ env.DEPLOY_MVN_OPTS }} ${{ env.KOGITO_RUNTIMES_DEPLOY_MVN_OPTS }}'; else printf 'install'; fi"` + mvn -f kogito-runtimes/pom.xml clean ${{ env.MVN_CMD }} -Dvalidate-formatting ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS }} upstream: | mvn clean install -Dquickly ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_UPSTREAM }} ${{ env.KOGITO_RUNTIMES_BUILD_MVN_OPTS_UPSTREAM }} clone: @@ -59,7 +62,8 @@ build: - project: kiegroup/kogito-apps build-command: current: | - mvn -f kogito-apps/pom.xml clean install -Dvalidate-formatting ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_APPS_BUILD_MVN_OPTS }} + export MVN_CMD=`bash -c "if [ '${{ env.ENABLE_DEPLOY }}' = 'true' ]; then printf 'deploy ${{ env.DEPLOY_MVN_OPTS }} ${{ env.KOGITO_APPS_DEPLOY_MVN_OPTS }}'; else printf 'install'; fi"` + mvn -f kogito-apps/pom.xml clean ${{ env.MVN_CMD }} -Dvalidate-formatting ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_APPS_BUILD_MVN_OPTS }} upstream: | mvn clean install -Dquickly ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_UPSTREAM }} ${{ env.KOGITO_APPS_BUILD_MVN_OPTS_UPSTREAM }} clone: @@ -76,28 +80,29 @@ build: current: | echo "KOGITO_EXAMPLES_SUBFOLDER_POM=${{ env.KOGITO_EXAMPLES_SUBFOLDER_POM }}" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f kogito-examples/pom.xml versions:set-property -Dproperty=quarkus.platform.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f kogito-examples/pom.xml versions:set-property -Dproperty=quarkus-plugin.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f kogito-examples/pom.xml versions:set-property -Dproperty=quarkus.platform.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f kogito-examples/pom.xml versions:set-property -Dproperty=quarkus-plugin.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" bash -c "cd kogito-examples && if which git; then git diff; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f kogito-examples-persistence/pom.xml versions:set-property -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f kogito-examples-persistence/pom.xml versions:set-property -Dproperty=quarkus.platform.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f kogito-examples-persistence/pom.xml versions:set-property -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f kogito-examples-persistence/pom.xml versions:set-property -Dproperty=quarkus.platform.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" bash -c "cd kogito-examples-persistence && if which git; then git diff; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f kogito-examples-events/pom.xml versions:set-property -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn -f kogito-examples-events/pom.xml versions:set-property -Dproperty=quarkus.platform.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f kogito-examples-events/pom.xml versions:set-property -Dproperty=version.io.quarkus -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn -f kogito-examples-events/pom.xml versions:set-property -Dproperty=quarkus.platform.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_QUARKUS_UPDATE }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS_QUARKUS_UPDATE }}; fi" bash -c "cd kogito-examples-events && if which git; then git diff; fi" upstream: | - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn versions:set-property -Dproperty=quarkus.platform.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }}; fi" - bash -c "if [ ! -z \"${{ env.QUARKUS_VERSION }}\" ]; then mvn versions:set-property -Dproperty=quarkus-plugin.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn versions:set-property -Dproperty=quarkus.platform.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }}; fi" + bash -c "if [ ! -z '${{ env.QUARKUS_VERSION }}' ]; then mvn versions:set-property -Dproperty=quarkus-plugin.version -DnewVersion=${{ env.QUARKUS_VERSION }} -DgenerateBackupPoms=false ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }}; fi" bash -c "if which git; then git diff; fi" # First install the main pom # Then build the required submodule pom current: | - mvn -f kogito-examples/pom.xml -pl :kogito-examples clean install ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }} + export MVN_CMD=`bash -c "if [ '${{ env.ENABLE_DEPLOY }}' = 'true' ]; then printf 'deploy ${{ env.DEPLOY_MVN_OPTS }} ${{ env.KOGITO_EXAMPLES_DEPLOY_MVN_OPTS }}'; else printf 'install'; fi"` + mvn -f kogito-examples/pom.xml -pl :kogito-examples clean ${{ env.MVN_CMD }} ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }} - mvn -f kogito-examples/${{ env.KOGITO_EXAMPLES_SUBFOLDER_POM }}pom.xml clean install -Dvalidate-formatting ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }} + mvn -f kogito-examples/${{ env.KOGITO_EXAMPLES_SUBFOLDER_POM }}pom.xml clean ${{ env.MVN_CMD }} -Dvalidate-formatting ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }} bash -c "if [ '${{ env.DISABLE_PERSISTENCE }}' != 'true' ]; then mvn -f kogito-examples-persistence/${{ env.KOGITO_EXAMPLES_SUBFOLDER_POM }}pom.xml clean install -Ppersistence ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }}; fi" bash -c "if [ '${{ env.DISABLE_EVENTS }}' != 'true' ]; then mvn -f kogito-examples-events/${{ env.KOGITO_EXAMPLES_SUBFOLDER_POM }}pom.xml clean install -Pevents ${{ env.BUILD_MVN_OPTS }} ${{ env.BUILD_MVN_OPTS_CURRENT }} ${{ env.KOGITO_EXAMPLES_BUILD_MVN_OPTS }}; fi" upstream: | @@ -105,4 +110,4 @@ build: clone: - kogito-examples - kogito-examples-persistence - - kogito-examples-events + - kogito-examples-events \ No newline at end of file diff --git a/dsl/seed/src/main/groovy/org/kie/jenkins/jobdsl/KogitoJobUtils.groovy b/dsl/seed/src/main/groovy/org/kie/jenkins/jobdsl/KogitoJobUtils.groovy index 208bd71ac..d07c97412 100644 --- a/dsl/seed/src/main/groovy/org/kie/jenkins/jobdsl/KogitoJobUtils.groovy +++ b/dsl/seed/src/main/groovy/org/kie/jenkins/jobdsl/KogitoJobUtils.groovy @@ -305,27 +305,78 @@ class KogitoJobUtils { } /** - * Create a Build-Chain Build&Test job in the current folder. + * Create a Build-Chain Build&Test job in the current folder for the current repo. * - * See also createBuildChainBuildAndTestJob(script, jobFolder, repository, ...) + * See also createBranchBuildChainJob(script, jobFolder, repository, ...) */ static def createNightlyBuildChainBuildAndTestJobForCurrentRepo(def script, Folder jobFolder, boolean enableNotification = false, String notificationJobName = '', Closure defaultJobParamsGetter = DEFAULT_PARAMS_GETTER) { - return createNightlyBuildChainBuildAndTestJob(script, jobFolder, Utils.getRepoName(script), enableNotification, notificationJobName, defaultJobParamsGetter) + return createNightlyBuildChainBuildAndTestJobForCurrentRepoWithEnv(script, jobFolder, [:], enableNotification, notificationJobName, defaultJobParamsGetter) } /** - * Create a Build-Chain Build&Test job in the given folder. + * Create a Build-Chain Build&Test job in the current folder with an extra env for the current repo. + * + * See also createBranchBuildChainJob(script, jobFolder, repository, ...) + */ + static def createNightlyBuildChainBuildAndTestJobForCurrentRepoWithEnv(def script, Folder jobFolder, Map extraEnv = [:], boolean enableNotification = false, String notificationJobName = '', Closure defaultJobParamsGetter = DEFAULT_PARAMS_GETTER) { + return createNightlyBuildChainBuildAndTestJobWithEnv(script, jobFolder, Utils.getRepoName(script), extraEnv, enableNotification, notificationJobName, defaultJobParamsGetter) + } + + /** + * Create a Build-Chain Build&Test job in the current folder with an extra env. + * + * See also createBranchBuildChainJob(script, jobFolder, repository, ...) + */ + static def createNightlyBuildChainBuildAndTestJobWithEnv(def script, Folder jobFolder, String repository, Map extraEnv = [:], boolean enableNotification = false, String notificationJobName = '', Closure defaultJobParamsGetter = DEFAULT_PARAMS_GETTER) { + return createBranchBuildChainJob(script, jobFolder, repository, extraEnv, 'build-and-test', enableNotification, notificationJobName, defaultJobParamsGetter) + } + + /** + * Create a Build-Chain Build&Deploy job in the current folder for current repo. + * + * See also createBranchBuildChainJob(script, jobFolder, repository, ...) + */ + static def createNightlyBuildChainBuildAndDeployJobForCurrentRepo(def script, Folder jobFolder, boolean enableNotification = false, String notificationJobName = '', Closure defaultJobParamsGetter = DEFAULT_PARAMS_GETTER) { + return createNightlyBuildChainBuildAndDeployJobForCurrentRepoWithEnv(script, jobFolder, [:], enableNotification, notificationJobName, defaultJobParamsGetter) + } + + /** + * Create a Build-Chain Build&Deploy job in the current folder with an extra env for current repo. + * + * See also createBranchBuildChainJob(script, jobFolder, repository, ...) + */ + static def createNightlyBuildChainBuildAndDeployJobForCurrentRepoWithEnv(def script, Folder jobFolder, Map extraEnv = [:], boolean enableNotification = false, String notificationJobName = '', Closure defaultJobParamsGetter = DEFAULT_PARAMS_GETTER) { + return createNightlyBuildChainBuildAndDeployJobWithEnv(script, jobFolder, Utils.getRepoName(script), extraEnv, enableNotification, notificationJobName, defaultJobParamsGetter) + } + + /** + * Create a Build-Chain Build&Deploy job in the current folder with an extra env. + * + * See also createBranchBuildChainJob(script, jobFolder, repository, ...) + */ + static def createNightlyBuildChainBuildAndDeployJobWithEnv(def script, Folder jobFolder, String repository, Map extraEnv = [:], boolean enableNotification = false, String notificationJobName = '', Closure defaultJobParamsGetter = DEFAULT_PARAMS_GETTER) { + extraEnv.putAll([ + ENABLE_DEPLOY: true, + MAVEN_DEPLOY_REPOSITORY: Utils.getMavenArtifactsUploadRepositoryUrl(script), + MAVEN_DEPLOY_REPOSITORY_CREDS_ID: Utils.getMavenArtifactsUploadRepositoryCredentialsId(script), + ]) + return createBranchBuildChainJob(script, jobFolder, repository, extraEnv, 'build-and-deploy', enableNotification, notificationJobName, defaultJobParamsGetter) + } + + /** + * Create a Build-Chain branch job in the given folder. * * parameters: * - jobFolder: Folder for the job to be created in * - repoName: Will be taken from environment if not given + * - enableDeploy: Whether deploy should be done after the build * - enableNotification: Whether notification should be sent in case of unsuccessful pipeline * - notificationJobName: Identifier for the notification stream * - repoName: Will be taken from environment if not given * - defaultJobParamsGetter: (optional) Closure to get the job default params */ - static def createNightlyBuildChainBuildAndTestJob(def script, Folder jobFolder, String repository, boolean enableNotification = false, String notificationJobName = '', Closure defaultJobParamsGetter = DEFAULT_PARAMS_GETTER) { - def jobParams = getSeedJobParams(script, "${repository}.build-and-test", jobFolder, KogitoConstants.BUILD_CHAIN_JENKINSFILE, "Build & Test for ${repository} using the build-chain", defaultJobParamsGetter) + static def createBranchBuildChainJob(def script, Folder jobFolder, String repository, Map extraEnv = [:], String jobNameSuffix = '', boolean enableNotification = false, String notificationJobName = '', Closure defaultJobParamsGetter = DEFAULT_PARAMS_GETTER) { + def jobParams = getSeedJobParams(script, "${repository}${jobNameSuffix ? ".${jobNameSuffix}" : ''}", jobFolder, KogitoConstants.BUILD_CHAIN_JENKINSFILE, "${jobNameSuffix} for ${repository} using the build-chain", defaultJobParamsGetter) KogitoJobUtils.setupJobParamsDefaultMavenConfiguration(script, jobParams) jobParams.triggers = [ cron : '@midnight' ] @@ -354,6 +405,9 @@ class KogitoJobUtils { MAVEN_SETTINGS_CONFIG_FILE_ID: Utils.getBindingValue(script, 'MAVEN_SETTINGS_FILE_ID'), ]) + // Extra overrides default + jobParams.env.putAll(extraEnv) + return KogitoJobTemplate.createPipelineJob(script, jobParams) } diff --git a/dsl/seed/src/main/groovy/org/kie/jenkins/jobdsl/Utils.groovy b/dsl/seed/src/main/groovy/org/kie/jenkins/jobdsl/Utils.groovy index c3beb9834..a330bf289 100644 --- a/dsl/seed/src/main/groovy/org/kie/jenkins/jobdsl/Utils.groovy +++ b/dsl/seed/src/main/groovy/org/kie/jenkins/jobdsl/Utils.groovy @@ -228,6 +228,14 @@ class Utils { return getBindingValue(script, 'BUILDCHAIN_CONFIG_GIT_FILE_PATH') } + static String getMavenArtifactsUploadRepositoryUrl(def script) { + return getBindingValue(script, 'MAVEN_ARTIFACTS_UPLOAD_REPOSITORY_URL') + } + + static String getMavenArtifactsUploadRepositoryCredentialsId(def script) { + return getBindingValue(script, 'MAVEN_ARTIFACTS_UPLOAD_REPOSITORY_CREDS_ID') + } + static String getSeedJenkinsfilePath(def script, String jenkinsfileName) { return "${KogitoConstants.SEED_JENKINSFILES_PATH}/${jenkinsfileName}" } From cc91edb0a56d97ef56ce8ef8f5035def6a3c8608 Mon Sep 17 00:00:00 2001 From: radtriste Date: Thu, 8 Dec 2022 09:23:19 +0100 Subject: [PATCH 2/2] Updated tests --- .ci/jenkins/Jenkinsfile.nightly | 2 +- .../org/kie/jenkins/JenkinsfileNightly.groovy | 46 +++++++++++++++---- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/.ci/jenkins/Jenkinsfile.nightly b/.ci/jenkins/Jenkinsfile.nightly index 3f78fd553..226b515ee 100644 --- a/.ci/jenkins/Jenkinsfile.nightly +++ b/.ci/jenkins/Jenkinsfile.nightly @@ -138,7 +138,7 @@ pipeline { // Update examples nightly branch dir('kogito-examples') { deleteDir() - checkout(githubscm.resolveRepository('kogito-examples', getGitAuthor(), getBuildBranch(), false)) + checkout(githubscm.resolveRepository('kogito-examples', getGitAuthor(), getBuildBranch(), false, getGitAuthorCredsID())) String nightlyBranch = "nightly-${getBuildBranch()}" githubscm.createBranch(nightlyBranch) githubscm.pushObject('origin', nightlyBranch, getGitAuthorCredsID()) diff --git a/.ci/jenkins/tests/src/test/groovy/org/kie/jenkins/JenkinsfileNightly.groovy b/.ci/jenkins/tests/src/test/groovy/org/kie/jenkins/JenkinsfileNightly.groovy index 5bd927245..33cfa61e2 100644 --- a/.ci/jenkins/tests/src/test/groovy/org/kie/jenkins/JenkinsfileNightly.groovy +++ b/.ci/jenkins/tests/src/test/groovy/org/kie/jenkins/JenkinsfileNightly.groovy @@ -18,11 +18,12 @@ class TestJenkinsfileNightly extends SingleFileDeclarativePipelineTest { @Before void setUp() throws Exception { super.setUp() - mockSharedLibraries('jenkins-pipeline-shared-libraries') addParam('SKIP_TESTS', false) addParam('SKIP_INTEGRATION_TESTS', true) addEnvVar('GIT_BRANCH_NAME', 'BRANCH') + addEnvVar('GIT_AUTHOR', 'AUTHOR') + addEnvVar('GIT_AUTHOR_CREDS_ID', 'AUTHOR_CREDS_ID') addEnvVar('JENKINS_EMAIL_CREDS_ID', 'KOGITO_CI_EMAIL_TO') addEnvVar('STAGE_NAME', 'STAGE_NAME') addEnvVar('BUILD_NUMBER', 'BUILD_NUMBER') @@ -32,8 +33,13 @@ class TestJenkinsfileNightly extends SingleFileDeclarativePipelineTest { helper.registerAllowedMethod('credentials', [String.class], { str -> return str }) helper.registerAllowedMethod('emailext', [Map.class], { str -> return 'emailext' }) - } + mockSharedLibraries('jenkins-pipeline-shared-libraries') + mockSharedLibVarsCall('githubscm', 'resolveRepository', { repo, author, branch, ignoreErrors, credsId -> registerTestCallstack('githubscm.resolveRepository', "${repo}, ${author}, ${branch}, ${ignoreErrors}, ${credsId}") }) + mockSharedLibVarsCall('githubscm', 'createBranch', { branch -> registerTestCallstack('githubscm.createBranch', "${branch}") }) + mockSharedLibVarsCall('githubscm', 'pushObject', { remote, branch, credsId -> registerTestCallstack('githubscm.pushObject', "${remote}, ${branch}, ${credsId}") }) + + } @Test void default_execution() throws Exception { helper.registerAllowedMethod('build', [Map.class], { map -> return [ @@ -47,8 +53,11 @@ class TestJenkinsfileNightly extends SingleFileDeclarativePipelineTest { 'drools' : [:], 'kogito-runtimes' : [:], 'kogito-apps' : [:], - 'kogito-examples': [ UPDATE_NIGHTLY_BRANCH: true ], + 'kogito-examples': [:], ]) + assertTestCallstackContains('githubscm.resolveRepository', 'kogito-examples, AUTHOR, BRANCH, false, AUTHOR_CREDS_ID') + assertTestCallstackContains('githubscm.createBranch', 'nightly-BRANCH') + assertTestCallstackContains('githubscm.pushObject', 'origin, nightly-BRANCH, AUTHOR_CREDS_ID') } @Test @@ -65,14 +74,18 @@ class TestJenkinsfileNightly extends SingleFileDeclarativePipelineTest { 'drools' : [:], 'kogito-runtimes' : [:], 'kogito-apps' : [:], - 'kogito-examples': [ UPDATE_NIGHTLY_BRANCH: true ], + 'kogito-examples': [:], ], true) + + assertTestCallstackContains('githubscm.resolveRepository', 'kogito-examples, AUTHOR, BRANCH, false, AUTHOR_CREDS_ID') + assertTestCallstackContains('githubscm.createBranch', 'nightly-BRANCH') + assertTestCallstackContains('githubscm.pushObject', 'origin, nightly-BRANCH, AUTHOR_CREDS_ID') } @Test void deploy_failing() throws Exception { helper.registerAllowedMethod('build', [Map.class], { map -> - if (map.get('job') == 'drools-deploy' || map.get('job') == 'kogito-runtimes-deploy') { + if (map.get('job') == 'drools.build-and-deploy' || map.get('job') == 'kogito-runtimes.build-and-deploy') { return [ result: 'FAILURE', absoluteUrl: 'URL', @@ -90,14 +103,18 @@ class TestJenkinsfileNightly extends SingleFileDeclarativePipelineTest { 'drools' : [:], 'kogito-runtimes' : [:], 'kogito-apps' : [:], - 'kogito-examples': [ UPDATE_NIGHTLY_BRANCH: true ], + 'kogito-examples': [:], ]) + + assertTestCallstackContains('githubscm.resolveRepository', 'kogito-examples, AUTHOR, BRANCH, false, AUTHOR_CREDS_ID') + assertTestCallstackContains('githubscm.createBranch', 'nightly-BRANCH') + assertTestCallstackContains('githubscm.pushObject', 'origin, nightly-BRANCH, AUTHOR_CREDS_ID') } @Test void deploy_unstable() throws Exception { helper.registerAllowedMethod('build', [Map.class], { map -> - if (map.get('job') == 'drools.deploy' || map.get('job') == 'kogito-apps-deploy') { + if (map.get('job') == 'drools.build-and-deploy' || map.get('job') == 'kogito-apps.build-and-deploy') { return [ result: 'UNSTABLE', absoluteUrl: 'URL', @@ -115,8 +132,12 @@ class TestJenkinsfileNightly extends SingleFileDeclarativePipelineTest { 'drools' : [:], 'kogito-runtimes' : [:], 'kogito-apps' : [:], - 'kogito-examples': [ UPDATE_NIGHTLY_BRANCH: true ], + 'kogito-examples': [:], ]) + + assertTestCallstackContains('githubscm.resolveRepository', 'kogito-examples, AUTHOR, BRANCH, false, AUTHOR_CREDS_ID') + assertTestCallstackContains('githubscm.createBranch', 'nightly-BRANCH') + assertTestCallstackContains('githubscm.pushObject', 'origin, nightly-BRANCH, AUTHOR_CREDS_ID') } @Test @@ -126,13 +147,18 @@ class TestJenkinsfileNightly extends SingleFileDeclarativePipelineTest { thrown.expect(Exception) runJenkinsfileAndAssertFailure() + + assertTestCallstackDoesNotContain('githubscm.resolveRepository') + assertTestCallstackDoesNotContain('githubscm.createBranch') + assertTestCallstackDoesNotContain('githubscm.pushObject') } void assertDeployBuildCalls(Map projects, boolean skipTests = false) { - assertBuildCalls(projects, 'deploy', [ + assertBuildCalls(projects, '.build-and-deploy', [ DISPLAY_NAME: 'BRANCH-date', SEND_NOTIFICATION: true, SKIP_TESTS: skipTests, + SKIP_INTEGRATION_TESTS: skipTests, ]) } @@ -143,7 +169,7 @@ class TestJenkinsfileNightly extends SingleFileDeclarativePipelineTest { if (extraParams) { buildParams.putAll(extraParams) } - assertBuildCall("${projectName}-${jobSuffix}", buildParams, true, false) + assertBuildCall("${projectName}${jobSuffix}", buildParams, true, false) } }