| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| /* |
| * This file is describing all the Jenkins jobs in the DSL format (see https://plugins.jenkins.io/job-dsl/) |
| * needed by the Kogito pipelines. |
| * |
| * The main part of Jenkins job generation is defined into the https://github.com/apache/incubator-kie-kogito-pipelines repository. |
| * |
| * This file is making use of shared libraries defined in |
| * https://github.com/apache/incubator-kie-kogito-pipelines/tree/main/dsl/seed/src/main/groovy/org/kie/jenkins/jobdsl. |
| */ |
| |
| import org.kie.jenkins.jobdsl.model.JobType |
| import org.kie.jenkins.jobdsl.utils.JobParamsUtils |
| import org.kie.jenkins.jobdsl.KogitoJobTemplate |
| import org.kie.jenkins.jobdsl.Utils |
| |
| jenkins_path = '.ci/jenkins' |
| clustersConfig = [ |
| kind: [ |
| KIND_VERSION: 'v0.20.0', |
| KUBERNETES_VERSION: '1.26.3', |
| ], |
| ] |
| |
| // Setup branch |
| createSetupBranchJob() |
| |
| // Nightly |
| setupDeployJob(JobType.NIGHTLY) |
| |
| // Weekly |
| setupWeeklyDeployJob(JobType.OTHER) |
| |
| // Release |
| setupDeployJob(JobType.RELEASE) |
| setupPromoteJob(JobType.RELEASE) |
| |
| ///////////////////////////////////////////////////////////////// |
| // Methods |
| ///////////////////////////////////////////////////////////////// |
| |
| void createSetupBranchJob() { |
| def jobParams = JobParamsUtils.getBasicJobParams(this, 'kogito-serverless-operator', JobType.SETUP_BRANCH, "${jenkins_path}/Jenkinsfile.setup-branch", 'Kogito Serverless Cloud Operator Setup Branch') |
| JobParamsUtils.setupJobParamsAgentDockerBuilderImageConfiguration(this, jobParams) |
| jobParams.env.putAll([ |
| JENKINS_EMAIL_CREDS_ID: "${JENKINS_EMAIL_CREDS_ID}", |
| |
| GIT_AUTHOR: "${GIT_AUTHOR_NAME}", |
| GIT_AUTHOR_CREDS_ID: "${GIT_AUTHOR_CREDENTIALS_ID}", |
| GIT_AUTHOR_PUSH_CREDS_ID: "${GIT_AUTHOR_PUSH_CREDENTIALS_ID}", |
| |
| IS_MAIN_BRANCH: "${Utils.isMainBranch(this)}" |
| ]) |
| KogitoJobTemplate.createPipelineJob(this, jobParams)?.with { |
| parameters { |
| stringParam('DISPLAY_NAME', '', 'Setup a specific build display name') |
| |
| stringParam('BUILD_BRANCH_NAME', "${GIT_BRANCH}", 'Set the Git branch to checkout') |
| |
| stringParam('PROJECT_VERSION', '', 'Version to set.') |
| |
| booleanParam('SEND_NOTIFICATION', false, 'In case you want the pipeline to send a notification on CI channel for this run.') |
| } |
| } |
| } |
| |
| void setupDeployJob(JobType jobType) { |
| def jobParams = JobParamsUtils.getBasicJobParams(this, 'kogito-serverless-operator-deploy', jobType, "${jenkins_path}/Jenkinsfile.deploy", 'Kogito Serverless Cloud Operator Deploy') |
| JobParamsUtils.setupJobParamsAgentDockerBuilderImageConfiguration(this, jobParams) |
| jobParams.env.putAll([ |
| JENKINS_EMAIL_CREDS_ID: "${JENKINS_EMAIL_CREDS_ID}", |
| |
| GIT_AUTHOR: "${GIT_AUTHOR_NAME}", |
| GIT_AUTHOR_CREDS_ID: "${GIT_AUTHOR_CREDENTIALS_ID}", |
| GIT_AUTHOR_PUSH_CREDS_ID: "${GIT_AUTHOR_PUSH_CREDENTIALS_ID}", |
| |
| OPERATOR_IMAGE_NAME: 'kogito-serverless-operator', |
| MAX_REGISTRY_RETRIES: 3, |
| OPENSHIFT_API_KEY: 'OPENSHIFT_API', |
| OPENSHIFT_CREDS_KEY: 'OPENSHIFT_CREDS', |
| PROPERTIES_FILE_NAME: 'deployment.properties', |
| |
| TEST_CLUSTER_NAMES: clustersConfig.keySet().join(','), |
| ]) |
| KogitoJobTemplate.createPipelineJob(this, jobParams)?.with { |
| parameters { |
| stringParam('DISPLAY_NAME', '', 'Setup a specific build display name') |
| |
| stringParam('BUILD_BRANCH_NAME', "${GIT_BRANCH}", 'Set the Git branch to checkout') |
| |
| stringParam('PROJECT_VERSION', '', 'Optional if not RELEASE. If RELEASE, cannot be empty.') |
| |
| // Build&Test information |
| booleanParam('SKIP_TESTS', false, 'Skip tests') |
| |
| // Deploy information |
| stringParam('IMAGE_REGISTRY_CREDENTIALS', "${CLOUD_IMAGE_REGISTRY_CREDENTIALS}", 'Image registry credentials to use to deploy images. Will be ignored if no IMAGE_REGISTRY is given') |
| stringParam('IMAGE_REGISTRY', "${CLOUD_IMAGE_REGISTRY}", 'Image registry to use to deploy images') |
| stringParam('IMAGE_NAMESPACE', "${CLOUD_IMAGE_NAMESPACE}", 'Image namespace to use to deploy images') |
| stringParam('IMAGE_NAME_SUFFIX', '', 'Image name suffix to use to deploy images. In case you need to change the final image name, you can add a suffix to it.') |
| stringParam('IMAGE_TAG', '', 'Image tag to use to deploy images') |
| stringParam('KOGITO_PR_BRANCH', '', 'PR branch name') |
| booleanParam('DEPLOY_WITH_LATEST_TAG', false, 'Set to true if you want the deployed image to also be with the `latest` tag') |
| |
| booleanParam('SEND_NOTIFICATION', false, 'In case you want the pipeline to send a notification on CI channel for this run.') |
| } |
| } |
| |
| // Create E2E jobs |
| clustersConfig.each { clusterName, clusterEnv -> |
| setupE2EJob(jobType, clusterName, clusterEnv) |
| } |
| } |
| |
| void setupPromoteJob(JobType jobType) { |
| def jobParams = JobParamsUtils.getBasicJobParams(this, 'kogito-serverless-operator-promote', jobType, "${jenkins_path}/Jenkinsfile.promote", 'Kogito Serverless Cloud Operator Promote') |
| JobParamsUtils.setupJobParamsAgentDockerBuilderImageConfiguration(this, jobParams) |
| jobParams.env.putAll([ |
| JENKINS_EMAIL_CREDS_ID: "${JENKINS_EMAIL_CREDS_ID}", |
| MAX_REGISTRY_RETRIES: 3, |
| PROPERTIES_FILE_NAME: 'deployment.properties', |
| |
| 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 { |
| stringParam('DISPLAY_NAME', '', 'Setup a specific build display name') |
| |
| stringParam('BUILD_BRANCH_NAME', "${GIT_BRANCH}", 'Set the Git branch to checkout') |
| |
| // Deploy job url to retrieve deployment.properties |
| stringParam('DEPLOY_BUILD_URL', '', 'URL to jenkins deploy build to retrieve the `deployment.properties` file. If base parameters are defined, they will override the `deployment.properties` information') |
| |
| // Base information which can override `deployment.properties` |
| stringParam('BASE_IMAGE_REGISTRY_CREDENTIALS', "${CLOUD_IMAGE_REGISTRY_CREDENTIALS}", 'Override `deployment.properties`. Base Image registry credentials to use to deploy images. Will be ignored if no BASE_IMAGE_REGISTRY is given') |
| stringParam('BASE_IMAGE_REGISTRY', "${CLOUD_IMAGE_REGISTRY}", 'Override `deployment.properties`. Base image registry') |
| stringParam('BASE_IMAGE_NAMESPACE', "${CLOUD_IMAGE_NAMESPACE}", 'Override `deployment.properties`. Base image namespace') |
| stringParam('BASE_IMAGE_NAME_SUFFIX', '', 'Override `deployment.properties`. Base image name suffix') |
| stringParam('BASE_IMAGE_TAG', '', 'Override `deployment.properties`. Base image tag') |
| |
| // Promote information |
| stringParam('PROMOTE_IMAGE_REGISTRY_CREDENTIALS', "${CLOUD_IMAGE_REGISTRY_CREDENTIALS}", 'Promote Image registry credentials to use to deploy images. Will be ignored if no PROMOTE_IMAGE_REGISTRY is given') |
| stringParam('PROMOTE_IMAGE_REGISTRY', "${CLOUD_IMAGE_REGISTRY}", 'Promote image registry') |
| stringParam('PROMOTE_IMAGE_NAMESPACE', "${CLOUD_IMAGE_NAMESPACE}", 'Promote image namespace') |
| stringParam('PROMOTE_IMAGE_NAME_SUFFIX', '', 'Promote image name suffix') |
| stringParam('PROMOTE_IMAGE_TAG', '', 'Promote image tag') |
| booleanParam('DEPLOY_WITH_LATEST_TAG', false, 'Set to true if you want the deployed images to also be with the `latest` tag') |
| |
| // Release information which can override `deployment.properties` |
| stringParam('PROJECT_VERSION', '', 'Override `deployment.properties`. Optional if not RELEASE. If RELEASE, cannot be empty.') |
| stringParam('GIT_TAG', '', 'Git tag to set, if different from v{KOGITO_VERSION}') |
| |
| booleanParam('SEND_NOTIFICATION', false, 'In case you want the pipeline to send a notification on CI channel for this run.') |
| } |
| } |
| } |
| |
| void setupE2EJob(JobType jobType, String clusterName, Map extraEnv = [:]) { |
| def jobParams = JobParamsUtils.getBasicJobParams(this, "kogito-serverless-operator.e2e.${clusterName}", jobType, "${jenkins_path}/Jenkinsfile.e2e.cluster", 'Kogito Serverless Cloud Operator Deploy') |
| JobParamsUtils.setupJobParamsAgentDockerBuilderImageConfiguration(this, jobParams) |
| jobParams.env.putAll([ |
| JENKINS_EMAIL_CREDS_ID: "${JENKINS_EMAIL_CREDS_ID}", |
| CLUSTER_NAME: clusterName, |
| |
| GIT_AUTHOR: "${GIT_AUTHOR_NAME}", |
| |
| GIT_AUTHOR_CREDS_ID: "${GIT_AUTHOR_CREDENTIALS_ID}", |
| |
| OPERATOR_IMAGE_NAME: 'kogito-serverless-operator', |
| MAX_REGISTRY_RETRIES: 3, |
| PROPERTIES_FILE_NAME: 'deployment.properties', |
| ]) |
| jobParams.env.putAll(extraEnv) |
| KogitoJobTemplate.createPipelineJob(this, jobParams)?.with { |
| parameters { |
| stringParam('DISPLAY_NAME', '', 'Setup a specific build display name') |
| stringParam('BUILD_BRANCH_NAME', "${GIT_BRANCH}", 'Set the Git branch to checkout for the tests') |
| stringParam('TEST_IMAGE_FULL_TAG', '', 'Image to test') |
| } |
| } |
| } |
| |
| void setupWeeklyDeployJob(JobType jobType) { |
| def jobParams = JobParamsUtils.getBasicJobParams(this, 'kogito-serverless-operator.weekly-deploy', jobType, "${jenkins_path}/Jenkinsfile.weekly.deploy", 'Kogito Serverless Cloud Operator Weekly Deploy') |
| JobParamsUtils.setupJobParamsAgentDockerBuilderImageConfiguration(this, jobParams) |
| jobParams.env.putAll([ |
| JENKINS_EMAIL_CREDS_ID: "${JENKINS_EMAIL_CREDS_ID}", |
| |
| GIT_AUTHOR: "${GIT_AUTHOR_NAME}", |
| GIT_AUTHOR_CREDS_ID: "${GIT_AUTHOR_CREDENTIALS_ID}", |
| GIT_AUTHOR_PUSH_CREDS_ID: "${GIT_AUTHOR_PUSH_CREDENTIALS_ID}", |
| |
| OPERATOR_IMAGE_NAME: 'kogito-serverless-operator', |
| MAX_REGISTRY_RETRIES: 3, |
| PROPERTIES_FILE_NAME: 'deployment.properties', |
| |
| TEST_CLUSTER_NAMES: clustersConfig.keySet().join(','), |
| ]) |
| KogitoJobTemplate.createPipelineJob(this, jobParams)?.with { |
| parameters { |
| stringParam('DISPLAY_NAME', '', 'Setup a specific build display name') |
| |
| stringParam('BUILD_BRANCH_NAME', "${GIT_BRANCH}", 'Set the Git branch to checkout') |
| |
| // Build&Test information |
| booleanParam('SKIP_TESTS', false, 'Skip tests') |
| |
| // Deploy information |
| stringParam('IMAGE_REGISTRY_CREDENTIALS', "${CLOUD_IMAGE_REGISTRY_CREDENTIALS}", 'Image registry credentials to use to deploy images. Will be ignored if no IMAGE_REGISTRY is given') |
| stringParam('IMAGE_REGISTRY', "${CLOUD_IMAGE_REGISTRY}", 'Image registry to use to deploy images') |
| stringParam('IMAGE_NAMESPACE', "${CLOUD_IMAGE_NAMESPACE}", 'Image namespace to use to deploy images') |
| booleanParam('DEPLOY_WITH_LATEST_TAG', false, 'Set to true if you want the deployed images to also be with the `weekly-latest` tag') |
| |
| stringParam('GIT_CHECKOUT_DATETIME', '', 'Git checkout date and time - (Y-m-d H:i)') |
| |
| booleanParam('SEND_NOTIFICATION', false, 'In case you want the pipeline to send a notification on CI channel for this run.') |
| } |
| } |
| |
| // Create E2E jobs |
| clustersConfig.each { clusterName, clusterEnv -> |
| setupE2EJob(jobType, clusterName, clusterEnv) |
| } |
| } |