From 912dbc19bf10bee04f8777639e0c07fcf17b24b1 Mon Sep 17 00:00:00 2001 From: Rodrigo Antunes Date: Tue, 23 Jul 2024 16:08:29 -0300 Subject: [PATCH 1/2] Adjust release pipelines for the Apache 10 release --- .ci/jenkins/Jenkinsfile.deploy | 38 ++++---- .ci/jenkins/dsl/jobs.groovy | 11 +-- .ci/jenkins/project/Jenkinsfile.release | 120 +++--------------------- 3 files changed, 37 insertions(+), 132 deletions(-) diff --git a/.ci/jenkins/Jenkinsfile.deploy b/.ci/jenkins/Jenkinsfile.deploy index 22bfc61114d..8f32664d194 100644 --- a/.ci/jenkins/Jenkinsfile.deploy +++ b/.ci/jenkins/Jenkinsfile.deploy @@ -26,7 +26,7 @@ deployProperties = [:] pipeline { agent { - docker { + docker { image env.AGENT_DOCKER_BUILDER_IMAGE args env.AGENT_DOCKER_BUILDER_ARGS label util.avoidFaultyNodes() @@ -87,7 +87,7 @@ pipeline { steps { script { dir(getRepoName()) { - if (githubscm.isBranchExist('origin',getPRBranch())) { + if (githubscm.isBranchExist('origin', getPRBranch())) { githubscm.removeRemoteBranch('origin', getPRBranch(), getGitAuthorPushCredsId()) } githubscm.createBranch(getPRBranch()) @@ -101,7 +101,7 @@ pipeline { } steps { script { - configFileProvider([configFile(fileId: env.MAVEN_SETTINGS_CONFIG_FILE_ID, variable: 'MAVEN_SETTINGS_FILE')]){ + configFileProvider([configFile(fileId: env.MAVEN_SETTINGS_CONFIG_FILE_ID, variable: 'MAVEN_SETTINGS_FILE')]) { maven.mvnVersionsSet( getMavenCommand().withSettingsXmlFile(MAVEN_SETTINGS_FILE), getProjectVersion(), @@ -127,18 +127,13 @@ pipeline { .withProperty('maven.test.failure.ignore', true) .skipTests(params.SKIP_TESTS) - def Closure mavenRunClosure = { - configFileProvider([configFile(fileId: env.MAVEN_SETTINGS_CONFIG_FILE_ID, variable: 'MAVEN_SETTINGS_FILE')]) { - mavenCommand.withSettingsXmlFile(MAVEN_SETTINGS_FILE).run("clean $installOrDeploy") - } - } - if (isRelease()) { release.gpgImportKeyFromStringWithoutPassword(getReleaseGpgSignKeyCredsId()) mavenCommand.withProfiles(['apache-release']) - mavenRunClosure() - } else { - mavenRunClosure() + } + + configFileProvider([configFile(fileId: env.MAVEN_SETTINGS_CONFIG_FILE_ID, variable: 'MAVEN_SETTINGS_FILE')]) { + mavenCommand.withSettingsXmlFile(MAVEN_SETTINGS_FILE).run("clean $installOrDeploy") } } } @@ -164,6 +159,11 @@ pipeline { } else { println '[WARN] no changes to commit' } + + // Create a new tag + githubscm.setUserConfigFromCreds(getGitAuthorPushCredsId()) + githubscm.tagRepository(getGitTagName()) + githubscm.pushRemoteTag('origin', getGitTagName(), getGitAuthorPushCredsId()) } } } @@ -281,18 +281,10 @@ MavenCommand getMavenCommand(String directory = '') { def mvnCmd = new MavenCommand(this, ['-fae', '-ntp']) .withOptions(env.BUILD_MVN_OPTS ? [ env.BUILD_MVN_OPTS ] : []) .inDirectory(directory) - if (!isMainStream()) { // Workaround as enforcer rules may not be fixed on other streams - mvnCmd.withProperty('enforcer.skip') - } else { - mvnCmd.withProperty('full') - } + .withProperty('full') return mvnCmd } -boolean isMainStream() { - return env.DROOLS_STREAM == 'main' -} - String getReleaseGpgSignKeyCredsId() { return env.RELEASE_GPG_SIGN_KEY_CREDS_ID } @@ -300,3 +292,7 @@ String getReleaseGpgSignKeyCredsId() { String getReleaseGpgSignPassphraseCredsId() { return env.RELEASE_GPG_SIGN_PASSPHRASE_CREDS_ID } + +String getGitTagName() { + return params.GIT_TAG_NAME +} diff --git a/.ci/jenkins/dsl/jobs.groovy b/.ci/jenkins/dsl/jobs.groovy index 5e92426421d..fc310311ec3 100644 --- a/.ci/jenkins/dsl/jobs.groovy +++ b/.ci/jenkins/dsl/jobs.groovy @@ -126,17 +126,14 @@ void setupProjectReleaseJob() { GIT_BRANCH_NAME: "${GIT_BRANCH}", GIT_AUTHOR: "${GIT_AUTHOR_NAME}", - - DEFAULT_STAGING_REPOSITORY: "${MAVEN_NEXUS_STAGING_PROFILE_URL}", - ARTIFACTS_REPOSITORY: "${MAVEN_ARTIFACTS_REPOSITORY}", - - DROOLS_STREAM: Utils.getStream(this), ]) KogitoJobTemplate.createPipelineJob(this, jobParams)?.with { parameters { stringParam('RESTORE_FROM_PREVIOUS_JOB', '', 'URL to a previous stopped release job which needs to be continued') - stringParam('DROOLS_VERSION', '', 'Drools version to release as Major.minor.micro') + stringParam('RELEASE_VERSION', '', 'Drools version to release as Major.minor.micro') + + stringParam('GIT_TAG_NAME', '', 'Git tag to create. i.e.: 10.0.0-rc1') booleanParam('SKIP_TESTS', false, 'Skip all tests') } @@ -338,6 +335,8 @@ void setupDeployJob(JobType jobType) { stringParam('PROJECT_VERSION', '', 'Optional if not RELEASE. If RELEASE, cannot be empty.') stringParam('DROOLS_PR_BRANCH', '', 'PR branch name') + stringParam('GIT_TAG_NAME', '', 'Optional if not RELEASE. Tag to be created in the repository') + booleanParam('SEND_NOTIFICATION', false, 'In case you want the pipeline to send a notification on CI channel for this run.') } } diff --git a/.ci/jenkins/project/Jenkinsfile.release b/.ci/jenkins/project/Jenkinsfile.release index 030dbeb6b73..6151829b00f 100644 --- a/.ci/jenkins/project/Jenkinsfile.release +++ b/.ci/jenkins/project/Jenkinsfile.release @@ -22,10 +22,8 @@ import org.jenkinsci.plugins.workflow.libs.Library @Library('jenkins-pipeline-shared-libraries')_ droolsRepo = 'drools' -// kieJpmmlIntegrationRepo = 'kie-jpmml-integration' // Commented as not migrated for now ARTIFACTS_STAGING_STAGE = 'stage.artifacts.staging' -ARTIFACTS_RELEASE_STAGE = 'stage.artifacts.release' JOB_PROPERTY_PREFIX = 'build' JOB_RESULT_PROPERTY_KEY = 'result' @@ -54,22 +52,17 @@ pipeline { echo "Release properties imported from previous job: ${releaseProperties}" } - assert getDroolsVersion() + assert getReleaseVersion() currentBuild.displayName = getDisplayName() - sendNotification("Release Pipeline has started...\nDrools version = ${getDroolsVersion()}\n=> ${env.BUILD_URL}") - - // Safety measure to not publish to main JBoss - if (getGitAuthor() != 'apache' && !getArtifactsRepositoryParam()) { - sendNotification("Git Author is different from `apache` and no `ARTIFACTS_REPOSITORY` parameter has been provided. Are you sure you want to continue ? => ${env.BUILD_URL}input") - input message: 'Should the pipeline continue with no `ARTIFACTS_REPOSITORY` defined ?', ok: 'Yes' - } + sendNotification("Release Pipeline has started...\nDrools version = ${getReleaseVersion()}\n=> ${env.BUILD_URL}") } } post { always { - setReleasePropertyIfneeded('drools.version', getDroolsVersion()) + setReleasePropertyIfneeded('release.version', getReleaseVersion()) + setReleasePropertyIfneeded('git.tag.name', getGitTagName()) } } } @@ -79,89 +72,21 @@ pipeline { script { def buildParams = getDefaultBuildParams() addSkipTestsParam(buildParams) - buildJob(getDeployJobName(droolsRepo), buildParams) } } } - // stage('Build & Deploy KIE jpmml integration') { - // steps { - // script { - // def buildParams = getDefaultBuildParams() - // addSkipTestsParam(buildParams) - - // buildJob(getDeployJobName(kieJpmmlIntegrationRepo), buildParams) - // } - // } - // } - stage('Artifacts\' staging finalization') { steps { script { if (!areArtifactsStaged()) { - sendNotification("All artifacts have been staged. You can find them here: ${getStagingRepository()}") + sendNotification("All artifacts have been staged.") } setArtifactsStaged() } } } - - stage('Are staged artifacts released?') { - when { - // Execute only if artifacts repository was not given, which means the staging repository has been created - expression { return !getArtifactsRepositoryParam() && !areArtifactsReleased() } - } - steps { - script { - String body = "${getDroolsVersion()} artifacts are ready for release.\n" + - "Please release the staging repositories and then confirm here: ${env.BUILD_URL}input" - sendNotification(body) - input message: 'Has the staging repository been released ?', ok: 'Yes' - - sendNotification('Artifacts have been released. Finalizing now the release ...') - setArtifactsReleased() - } - } - } - - stage('Promote Drools') { - when { - expression { return isJobConsideredOk(getDeployJobName(droolsRepo)) } - } - steps { - script { - def buildParams = getDefaultBuildParams() - addDeployBuildUrlParam(buildParams, getDeployJobName(droolsRepo)) - - buildJob(getPromoteJobName(droolsRepo), buildParams) - } - } - } - - // stage('Promote KIE jpmml integration') { - // when { - // expression { return isJobConsideredOk(getDeployJobName(kieJpmmlIntegrationRepo)) } - // } - // steps { - // script { - // def buildParams = getDefaultBuildParams() - // addDeployBuildUrlParam(buildParams, getDeployJobName(kieJpmmlIntegrationRepo)) - - // buildJob(getPromoteJobName(kieJpmmlIntegrationRepo), buildParams) - // } - // } - // } - - stage('Setup next snapshot version') { - steps { - script { - def buildParams = [] - addStringParam(buildParams, 'DROOLS_VERSION', util.getNextVersion(getDroolsVersion(), 'micro')) - build(job: '../setup-branch/0-setup-branch', wait: false, parameters: buildParams, propagate: false) - } - } - } } post { always { @@ -232,10 +157,6 @@ String getDeployJobName(String repository) { return "${repository}-deploy" } -String getPromoteJobName(String repository) { - return "${repository}-promote" -} - String getJobPropertySuffix(String jobName) { return "${JOB_PROPERTY_PREFIX}.${jobName}" } @@ -298,7 +219,7 @@ void sendSuccessfulReleaseNotification() { String bodyMsg = 'Release is successful with those jobs:\n' getAllJobNames().findAll { isJobConsideredOk(it) }.each { bodyMsg += "- ${it}\n" - } +} bodyMsg += "\nPlease look here: ${BUILD_URL} for more information" sendNotification(bodyMsg) } @@ -330,9 +251,10 @@ def readPropertiesFromUrl(String url, String propsFilename) { List getDefaultBuildParams() { List buildParams = [] - addDisplayNameParam(buildParams, getDisplayName(getDroolsVersion())) - addStringParam(buildParams, 'PROJECT_VERSION', getDroolsVersion()) - addStringParam(buildParams, 'DROOLS_PR_BRANCH', "drools-${getDroolsVersion()}") + addDisplayNameParam(buildParams, getDisplayName(getReleaseVersion())) + addStringParam(buildParams, 'PROJECT_VERSION', getReleaseVersion()) + addStringParam(buildParams, 'DROOLS_PR_BRANCH', "drools-${getReleaseVersion()}") + addStringParam(buildParams, 'GIT_TAG_NAME', getGitTagName()) return buildParams } @@ -367,26 +289,18 @@ void addBooleanParam(List buildParams, String key, boolean value) { } String getDisplayName(version = '') { - version = version ?: getDroolsVersion() + version = version ?: getReleaseVersion() return "Release ${version}" } -String getDroolsVersion() { - return params.DROOLS_VERSION ?: getReleaseProperty('drools.version') +String getReleaseVersion() { + return params.RELEASE_VERSION ?: getReleaseProperty('release.version') } String getGitAuthor() { return env.GIT_AUTHOR } -String getArtifactsRepositoryParam() { - return env['ARTIFACTS_REPOSITORY'] ?: '' -} - -String getStagingRepository() { - return getArtifactsRepositoryParam() ?: env.DEFAULT_STAGING_REPOSITORY -} - void setReleasePropertyIfneeded(String key, def value) { if (value) { releaseProperties[key] = value @@ -415,10 +329,6 @@ void setArtifactsStaged() { setReleasePropertyIfneeded(ARTIFACTS_STAGING_STAGE, true) } -boolean areArtifactsReleased() { - return hasReleaseProperty(ARTIFACTS_RELEASE_STAGE) -} - -void setArtifactsReleased() { - setReleasePropertyIfneeded(ARTIFACTS_RELEASE_STAGE, true) +String getGitTagName() { + return params.GIT_TAG_NAME ?: getReleaseProperty('git.tag.name') } From 52ddad25436bacdf515b7ef615371cae9f811704 Mon Sep 17 00:00:00 2001 From: Rodrigo Antunes Date: Tue, 23 Jul 2024 16:11:32 -0300 Subject: [PATCH 2/2] Fix identation --- .ci/jenkins/project/Jenkinsfile.release | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci/jenkins/project/Jenkinsfile.release b/.ci/jenkins/project/Jenkinsfile.release index 6151829b00f..2f8d96ed500 100644 --- a/.ci/jenkins/project/Jenkinsfile.release +++ b/.ci/jenkins/project/Jenkinsfile.release @@ -81,7 +81,7 @@ pipeline { steps { script { if (!areArtifactsStaged()) { - sendNotification("All artifacts have been staged.") + sendNotification('All artifacts have been staged.') } setArtifactsStaged() } @@ -219,7 +219,7 @@ void sendSuccessfulReleaseNotification() { String bodyMsg = 'Release is successful with those jobs:\n' getAllJobNames().findAll { isJobConsideredOk(it) }.each { bodyMsg += "- ${it}\n" -} + } bodyMsg += "\nPlease look here: ${BUILD_URL} for more information" sendNotification(bodyMsg) }