This is an automated email from the ASF dual-hosted git repository.

rantunes pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-pipelines.git


The following commit(s) were added to refs/heads/main by this push:
     new c79064d1 kie-issues#821: Kogito-apps and Kogito-runtimes weekly jobs 
(#1166)
c79064d1 is described below

commit c79064d1972ddc794d4840d11fe7577df630d3f9
Author: Rodrigo Antunes <[email protected]>
AuthorDate: Mon Jan 29 08:26:19 2024 -0300

    kie-issues#821: Kogito-apps and Kogito-runtimes weekly jobs (#1166)
    
    * Kogito weekly jobs
    
    * Fix job checkout datetime
---
 .ci/jenkins/Jenkinsfile.weekly | 193 +++++++++++++++++++++++++++++++++++++++++
 .ci/jenkins/dsl/jobs.groovy    |  21 +++++
 2 files changed, 214 insertions(+)

diff --git a/.ci/jenkins/Jenkinsfile.weekly b/.ci/jenkins/Jenkinsfile.weekly
new file mode 100644
index 00000000..1e4d2c53
--- /dev/null
+++ b/.ci/jenkins/Jenkinsfile.weekly
@@ -0,0 +1,193 @@
+import org.jenkinsci.plugins.workflow.libs.Library
+
+@Library('jenkins-pipeline-shared-libraries')_
+
+// Deploy jobs
+RUNTIMES_DEPLOY = 'kogito-runtimes.weekly-deploy'
+APPS_DEPLOY = 'kogito-apps.weekly-deploy'
+
+// Map of executed jobs
+// See 
https://javadoc.jenkins.io/plugin/workflow-support/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.html
+// for more options on built job entity
+JOBS = [:]
+
+FAILED_STAGES = [:]
+UNSTABLE_STAGES = [:]
+
+// Should be multibranch pipeline
+pipeline {
+    agent {
+        label 'ubuntu'
+    }
+
+    options {
+        timeout(time: 900, unit: 'MINUTES')
+    }
+
+    // parameters {
+    // For parameters, check into ./dsl/jobs.groovy file
+    // }
+
+    environment {
+        // Some generated env is also defined into ./dsl/jobs.groovy file
+        KOGITO_CI_EMAIL_TO = credentials("${JENKINS_EMAIL_CREDS_ID}")
+
+        CURRENT_DATE = getCurrentDate()
+
+        WEEKLY_TAG = """${getBuildBranch()}-${CURRENT_DATE}"""
+    }
+
+    stages {
+        stage('Initialize') {
+            steps {
+                script {
+                    echo "weekly tag is ${env.WEEKLY_TAG}"
+
+                    currentBuild.displayName = env.WEEKLY_TAG
+                }
+            }
+        }
+
+        stage('Build & Deploy Kogito Runtimes') {
+            steps {
+                script {
+                    def buildParams = getDefaultBuildParams()
+                    addSkipTestsParam(buildParams)
+                    addSkipIntegrationTestsParam(buildParams)
+                    buildJob(RUNTIMES_DEPLOY, buildParams)
+                }
+            }
+            post {
+                failure {
+                    addFailedStage(RUNTIMES_DEPLOY)
+                }
+            }
+        }
+
+        stage('Build & Deploy Kogito Apps') {
+            steps {
+                script {
+                    def buildParams = getDefaultBuildParams()
+                    addSkipTestsParam(buildParams)
+                    addSkipIntegrationTestsParam(buildParams)
+                    buildJob(APPS_DEPLOY, buildParams)
+                }
+            }
+            post {
+                failure {
+                    addFailedStage(APPS_DEPLOY)
+                }
+            }
+        }
+    }
+    post {
+        unsuccessful {
+            sendPipelineErrorNotification()
+        }
+    }
+}
+
+def buildJob(String jobName, List buildParams, String jobKey = jobName) {
+    echo "[${jobKey}] Build ${jobName} with params ${buildParams}"
+
+    def job = build(job: "${jobName}", wait: true, parameters: buildParams, 
propagate: false)
+    JOBS[jobKey] = job
+
+    // Set Unstable if job did not succeed
+    if (!isJobSucceeded(jobKey)) {
+        addUnstableStage(jobKey)
+        unstable("Job ${jobName} finished with result ${job.result}")
+    }
+    return job
+}
+
+def getJob(String jobKey) {
+    return JOBS[jobKey]
+}
+
+String getJobUrl(String jobKey) {
+    echo "getJobUrl for ${jobKey}"
+    return getJob(jobKey)?.absoluteUrl ?: ''
+}
+
+boolean isJobSucceeded(String jobKey) {
+    return getJob(jobKey)?.result == 'SUCCESS'
+}
+
+boolean isJobUnstable(String jobKey) {
+    return getJob(jobKey)?.result == 'UNSTABLE'
+}
+
+void addFailedStage(String jobKey = '') {
+    FAILED_STAGES.put("${env.STAGE_NAME}", jobKey)
+}
+void addUnstableStage(String jobKey = '') {
+    UNSTABLE_STAGES.put("${env.STAGE_NAME}", jobKey)
+}
+
+void sendPipelineErrorNotification() {
+    String bodyMsg = "Kogito weekly job #${env.BUILD_NUMBER} was: 
${currentBuild.currentResult}"
+
+    if (FAILED_STAGES.size() > 0) {
+        bodyMsg += '\nFailed stages: \n- '
+        bodyMsg += FAILED_STAGES.collect { "${it.key} => 
${getJobUrl(it.value)}" }.join('\n- ')
+    }
+    bodyMsg += '\n'
+    if (UNSTABLE_STAGES.size() > 0) {
+        bodyMsg += '\nUnstable stages: \n- '
+        bodyMsg += UNSTABLE_STAGES.collect { "${it.key} => 
${getJobUrl(it.value)}" }.join('\n- ')
+    }
+    bodyMsg += '\n'
+    bodyMsg += "\nPlease look here: ${env.BUILD_URL}"
+    emailext body: bodyMsg, subject: "[${getBuildBranch()}][d] Full Pipeline",
+                to: env.KOGITO_CI_EMAIL_TO
+}
+
+List getDefaultBuildParams() {
+    List params = []
+    addStringParam(params, 'DISPLAY_NAME', env.WEEKLY_TAG)
+    addStringParam(params, 'GIT_CHECKOUT_DATETIME', getCheckoutDatetime())
+    addBooleanParam(params, 'SEND_NOTIFICATION', true)
+
+    return params
+}
+
+void addSkipTestsParam(buildParams) {
+    addBooleanParam(buildParams, 'SKIP_TESTS', params.SKIP_TESTS)
+}
+
+void addSkipIntegrationTestsParam(buildParams) {
+    addBooleanParam(buildParams, 'SKIP_INTEGRATION_TESTS', params.SKIP_TESTS)
+}
+
+void addStringParam(List params, String key, String value) {
+    params.add(string(name: key, value: value))
+}
+
+void addBooleanParam(List params, String key, boolean value) {
+    params.add(booleanParam(name: key, value: value))
+}
+
+String getBuildBranch() {
+    return env.GIT_BRANCH_NAME
+}
+
+String getGitAuthor() {
+    return env.GIT_AUTHOR
+}
+
+String getGitAuthorCredsId() {
+    return env.GIT_AUTHOR_CREDS_ID
+}
+
+String getGitAuthorPushCredsId() {
+    return env.GIT_AUTHOR_PUSH_CREDS_ID
+}
+
+String getCurrentDate() {
+    return sh(returnStdout: true, script: 'date -u "+%Y-%m-%d"').trim()
+}
+
+String getCheckoutDatetime() {
+    return env.CURRENT_DATE + ' 02:00' // Cut-off 02:00AM
+}
diff --git a/.ci/jenkins/dsl/jobs.groovy b/.ci/jenkins/dsl/jobs.groovy
index 39496a8b..73e59e1a 100644
--- a/.ci/jenkins/dsl/jobs.groovy
+++ b/.ci/jenkins/dsl/jobs.groovy
@@ -61,6 +61,9 @@ if (isMainStream()) {
     setupNightlyCloudJob()
 }
 
+// Weekly
+setupWeeklyJob()
+
 // Release
 setupReleaseArtifactsJob()
 setupReleaseCloudJob()
@@ -171,6 +174,24 @@ void setupNightlyJob() {
     }
 }
 
+void setupWeeklyJob() {
+    def jobParams = JobParamsUtils.getBasicJobParams(this, '0-kogito-weekly', 
JobType.OTHER, "${jenkins_path}/Jenkinsfile.weekly", 'Kogito Weekly')
+    jobParams.triggers = [cron : '0 5 * * 0']
+    jobParams.env.putAll([
+        JENKINS_EMAIL_CREDS_ID: "${JENKINS_EMAIL_CREDS_ID}",
+
+        GIT_BRANCH_NAME: "${GIT_BRANCH}",
+        GIT_AUTHOR: "${GIT_AUTHOR_NAME}",
+        GIT_AUTHOR_CREDS_ID: "${GIT_AUTHOR_CREDENTIALS_ID}",
+        GIT_AUTHOR_PUSH_CREDS_ID: "${GIT_AUTHOR_PUSH_CREDENTIALS_ID}",
+    ])
+    KogitoJobTemplate.createPipelineJob(this, jobParams)?.with {
+        parameters {
+            booleanParam('SKIP_TESTS', false, 'Skip all tests')
+        }
+    }
+}
+
 void setupNightlyCloudJob() {
     def jobParams = JobParamsUtils.getBasicJobParams(this, 
'0-kogito-nightly-cloud', JobType.NIGHTLY, 
"${jenkins_path}/Jenkinsfile.nightly.cloud", 'Kogito Nightly')
     jobParams.env.putAll([


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to