Skip to content

Commit

Permalink
KOGITO-9681 CI: Use cloud shared libraries
Browse files Browse the repository at this point in the history
  • Loading branch information
radtriste committed Aug 7, 2023
1 parent 2775085 commit 8c9ff6d
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 155 deletions.
21 changes: 4 additions & 17 deletions .ci/jenkins/Jenkinsfile.build-image
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,6 @@ pipeline {
CONTAINER_ENGINE = 'docker'
CONTAINER_ENGINE_TLS_OPTIONS = ''

OPENSHIFT_API = credentials('OPENSHIFT_API')
OPENSHIFT_REGISTRY = credentials('OPENSHIFT_REGISTRY')
OPENSHIFT_CREDS_KEY = 'OPENSHIFT_CREDS'

IMAGE_BUILD_PLATFORMS = 'linux/amd64,linux/arm64'
}
stages {
Expand Down Expand Up @@ -55,13 +51,8 @@ pipeline {
}

// Login to final registry if deploy is needed
if (shouldDeployImage()) {
if (isDeployImageInOpenshiftRegistry()) {
cloud.loginOpenShift(env.OPENSHIFT_API, env.OPENSHIFT_CREDS_KEY)
cloud.loginOpenshiftRegistry(env.CONTAINER_ENGINE, env.CONTAINER_ENGINE_TLS_OPTIONS ?: '')
} else if (getDeployImageRegistryCredentials()) {
cloud.loginContainerRegistry(getDeployImageRegistry(), getDeployImageRegistryCredentials(), env.CONTAINER_ENGINE, env.CONTAINER_ENGINE_TLS_OPTIONS ?: '')
}
if (shouldDeployImage() && getDeployImageRegistryCredentials()) {
cloud.loginContainerRegistry(getDeployImageRegistry(), getDeployImageRegistryCredentials(), env.CONTAINER_ENGINE, env.CONTAINER_ENGINE_TLS_OPTIONS ?: '')
}
}
}
Expand Down Expand Up @@ -260,20 +251,16 @@ void runPythonCommand(String cmd, boolean stdout = false) {
// Deploy image information
////////////////////////////////////////////////////////////////////////

boolean isDeployImageInOpenshiftRegistry() {
return params.DEPLOY_IMAGE_USE_OPENSHIFT_REGISTRY
}

String getDeployImageRegistryCredentials() {
return params.DEPLOY_IMAGE_REGISTRY_CREDENTIALS
}

String getDeployImageRegistry() {
return isDeployImageInOpenshiftRegistry() ? env.OPENSHIFT_REGISTRY : params.DEPLOY_IMAGE_REGISTRY
return params.DEPLOY_IMAGE_REGISTRY
}

String getDeployImageNamespace() {
return isDeployImageInOpenshiftRegistry() ? 'openshift' : params.DEPLOY_IMAGE_NAMESPACE
return params.DEPLOY_IMAGE_NAMESPACE
}

String getDeployImageNameSuffix() {
Expand Down
10 changes: 2 additions & 8 deletions .ci/jenkins/Jenkinsfile.deploy
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ pipeline {
KOGITO_CI_EMAIL_TO = credentials("${JENKINS_EMAIL_CREDS_ID}")

PR_BRANCH_HASH = "${util.generateHash(10)}"

OPENSHIFT_REGISTRY = credentials('OPENSHIFT_REGISTRY')
}

stages {
Expand Down Expand Up @@ -282,7 +280,6 @@ void createBuildAndTestStageClosure(String image) {
buildParams.add(string(name: 'TESTS_KOGITO_EXAMPLES_REF', value: params.EXAMPLES_REF))

buildParams.add(booleanParam(name: 'DEPLOY_IMAGE', value: true))
buildParams.add(booleanParam(name: 'DEPLOY_IMAGE_USE_OPENSHIFT_REGISTRY', value: isDeployImageInOpenshiftRegistry()))
buildParams.add(string(name: 'DEPLOY_IMAGE_REGISTRY_CREDENTIALS', value: getDeployImageRegistryCredentials()))
buildParams.add(string(name: 'DEPLOY_IMAGE_REGISTRY', value: getDeployImageRegistry()))
buildParams.add(string(name: 'DEPLOY_IMAGE_NAMESPACE', value: getDeployImageNamespace()))
Expand Down Expand Up @@ -341,19 +338,16 @@ List getTestFailedImages() {
// Deploy image information
////////////////////////////////////////////////////////////////////////

boolean isDeployImageInOpenshiftRegistry() {
return params.IMAGE_USE_OPENSHIFT_REGISTRY
}

String getDeployImageRegistryCredentials() {
return params.IMAGE_REGISTRY_CREDENTIALS
}

String getDeployImageRegistry() {
return isDeployImageInOpenshiftRegistry() ? env.OPENSHIFT_REGISTRY : params.IMAGE_REGISTRY
return params.IMAGE_REGISTRY
}
String getDeployImageNamespace() {
return isDeployImageInOpenshiftRegistry() ? 'openshift' : params.IMAGE_NAMESPACE
return params.IMAGE_NAMESPACE
}
String getDeployImageNameSuffix() {
return params.IMAGE_NAME_SUFFIX
Expand Down
145 changes: 19 additions & 126 deletions .ci/jenkins/Jenkinsfile.promote
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,7 @@ pipeline {
CONTAINER_ENGINE = 'podman'
CONTAINER_ENGINE_TLS_OPTIONS = '--tls-verify=false'

OPENSHIFT_API = credentials('OPENSHIFT_API')
OPENSHIFT_REGISTRY = credentials('OPENSHIFT_REGISTRY')
OPENSHIFT_CREDS_KEY = 'OPENSHIFT_CREDS'

PR_BRANCH_HASH = "${util.generateHash(10)}"

GITHUB_REPO = "${REPO_NAME}" // for github-release cli
}

stages {
Expand All @@ -45,35 +39,28 @@ pipeline {

readDeployProperties()

if (isRelease()) {
// Verify version is set and if on right release branch
assert getProjectVersion()
assert getBuildBranch() == util.getReleaseBranchFromVersion(getProjectVersion())
}
assert getProjectVersion()
assert getBuildBranch() == util.getReleaseBranchFromVersion(getProjectVersion())

// Login old registry
if (isOldImageInOpenshiftRegistry()) {
loginOpenshiftRegistry()
} else if (getOldImageRegistryCredentials() != '') {
loginContainerRegistry(getOldImageRegistry(), getOldImageRegistryCredentials())
if (getOldImageRegistryCredentials() != '') {
cloud.loginContainerRegistry(getOldImageRegistry(), getOldImageRegistryCredentials(), env.CONTAINER_ENGINE, env.CONTAINER_ENGINE_TLS_OPTIONS)
}

// Login new registry
if (isNewImageInOpenshiftRegistry()) {
loginOpenshiftRegistry()
} else if (getNewImageRegistryCredentials() != '') {
loginContainerRegistry(getNewImageRegistry(), getNewImageRegistryCredentials())
if (getNewImageRegistryCredentials() != '') {
cloud.loginContainerRegistry(getNewImageRegistry(), getNewImageRegistryCredentials(), env.CONTAINER_ENGINE, env.CONTAINER_ENGINE_TLS_OPTIONS)
}

dir(getRepoName()) {
checkoutRepo()
}

installGitHubReleaseCLI()
cloud.installSkopeo()
}
}
}

stage('Promote images') {
steps {
script {
Expand All @@ -83,10 +70,8 @@ pipeline {
}
}
}

stage('Merge PR and tag') {
when {
expression { return isRelease() }
}
steps {
script {
dir(getRepoName()) {
Expand All @@ -96,47 +81,19 @@ pipeline {
githubscm.mergePR(prLink, getGitAuthorCredsID())
githubscm.pushObject('origin', getBuildBranch(), getGitAuthorCredsID())
}

if (getGitTag()) {
createRelease()
}
}
}
}
}
stage('Set next version')
{
when {
expression { return isRelease() }
}

stage('Create release') {
steps {
script {
String prLink = ''
String nextVersion = getNextVersion()
dir('pr') { // Use different folder from `Update PR with released Maven artifacts` to avoid conflicts
// Prepare PR
checkoutRepo()
githubscm.createBranch(getSnapshotBranch())

// Update version to next snapshot
versionCmd = "python3 scripts/manage-kogito-version.py --bump-to ${nextVersion} --artifacts-version ${getKogitoArtifactsNextVersion()} --confirm"
if (getBuildBranch() != 'main') {
versionCmd += " --examples-ref ${getBuildBranch()}"
}
runPythonCommand(versionCmd)

def commitMsg = "[${getBuildBranch()}] Update snapshot version to ${nextVersion}"
def prBody = "Generated by build ${BUILD_TAG}: ${BUILD_URL}"
githubscm.commitChanges(commitMsg)
githubscm.pushObject('origin', getSnapshotBranch(), getGitAuthorCredsID())
prLink = githubscm.createPR(commitMsg, prBody, getBuildBranch(), getGitAuthorCredsID())
}
dir(getRepoName()) {
if (prLink) {
githubscm.mergePR(prLink, getGitAuthorCredsID())
githubscm.pushObject('origin', getBuildBranch(), getGitAuthorCredsID())
}
if (githubscm.isReleaseExist(getGitTag(), getGitAuthorCredsID())) {
githubscm.deleteReleaseAndTag(getGitTag(), getGitAuthorCredsID())
}
githubscm.createReleaseWithGeneratedReleaseNotes(getGitTag(), getBuildBranch(), githubscm.getPreviousTag(getGitTag()), getGitAuthorCredsID())
githubscm.updateReleaseBody(getGitTag(), getGitAuthorCredsID())
}
}
}
Expand Down Expand Up @@ -169,10 +126,6 @@ String getNotificationSubject() {
return "[${getBuildBranch()}] Kogito Images"
}

void installGitHubReleaseCLI() {
sh 'go install github.com/github-release/github-release@latest'
}

void checkoutRepo() {
deleteDir()
checkout(githubscm.resolveRepository(getRepoName(), getGitAuthor(), getBuildBranch(), false))
Expand Down Expand Up @@ -217,14 +170,6 @@ void makeQuayNewImagesPublic() {
}
}

void createRelease() {
if(githubscm.isReleaseExist(getGitTag(), getGitAuthorCredsID())) {
githubscm.deleteReleaseAndTag(getGitTag(), getGitAuthorCredsID())
}
githubscm.createReleaseWithGeneratedReleaseNotes(getGitTag(), getBuildBranch(), githubscm.getPreviousTag(getGitTag()), getGitAuthorCredsID())
githubscm.updateReleaseBody(getGitTag(), getGitAuthorCredsID())
}

String getOldImageFullTag(String imageName) {
return "${getOldImageRegistry()}/${getOldImageNamespace()}/${getFinalImageName(imageName, getOldImageNameSuffix())}:${getOldImageTag()}"
}
Expand All @@ -243,32 +188,13 @@ boolean isDeployLatestTag() {

String getReducedTag() {
try {
String version = getNewImageTag()
String[] versionSplit = version.split("\\.")
return "${versionSplit[0]}.${versionSplit[1]}"
return cloud.getReducedTag(getNewImageTag())
} catch (error) {
echo "${getNewImageTag()} cannot be reduced to the format X.Y"
}
return ''
}

void loginOpenshift() {
withCredentials([usernamePassword(credentialsId: env.OPENSHIFT_CREDS_KEY, usernameVariable: 'OC_USER', passwordVariable: 'OC_PWD')]) {
sh "oc login --username=${OC_USER} --password=${OC_PWD} --server=${env.OPENSHIFT_API} --insecure-skip-tls-verify"
}
}

void loginOpenshiftRegistry() {
loginOpenshift()
// username can be anything. See https://docs.openshift.com/container-platform/4.4/registry/accessing-the-registry.html#registry-accessing-directly_accessing-the-registry
sh "set +x && ${env.CONTAINER_ENGINE} login -u anything -p \$(oc whoami -t) ${env.CONTAINER_ENGINE_TLS_OPTIONS ?: ''} ${env.OPENSHIFT_REGISTRY}"
}

void loginContainerRegistry(String registry, String credsId) {
withCredentials([usernamePassword(credentialsId: credsId, usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PWD')]) {
sh "${env.CONTAINER_ENGINE} login -u ${REGISTRY_USER} -p ${REGISTRY_PWD} ${env.CONTAINER_ENGINE_TLS_OPTIONS ?: ''} ${registry}"
}
}
void readDeployProperties() {
String deployUrl = params.DEPLOY_BUILD_URL
if (deployUrl != '') {
Expand Down Expand Up @@ -300,10 +226,6 @@ String getParamOrDeployProperty(String paramKey, String deployPropertyKey) {
// Utils
////////////////////////////////////////////////////////////////////////

boolean isRelease() {
return env.RELEASE ? env.RELEASE.toBoolean() : false
}

String getRepoName() {
return env.REPO_NAME
}
Expand All @@ -325,10 +247,6 @@ String getBuildBranch() {
return params.BUILD_BRANCH_NAME
}

String getPRSourceBranch() {
return getDeployProperty("${getRepoName()}.pr.source.ref")
}

String getGitAuthor() {
return env.GIT_AUTHOR
}
Expand All @@ -337,23 +255,6 @@ String getGitAuthorCredsID() {
return env.AUTHOR_CREDS_ID
}

String getMavenArtifactRepository() {
return env.MAVEN_ARTIFACT_REPOSITORY ?: ''
}

String getNextVersion() {
return util.getNextVersion(getProjectVersion(), 'micro', 'snapshot')
}

// To be later changed by artifacts version parameter
String getKogitoArtifactsNextVersion() {
return util.getNextVersion(getKogitoArtifactsVersion(), 'micro', 'SNAPSHOT')
}

String getSnapshotBranch() {
return "${getNextVersion()}-${env.PR_BRANCH_HASH}"
}

boolean isQuayRegistry(String registry) {
return registry == 'quay.io'
}
Expand All @@ -366,20 +267,16 @@ String getOldImagePrefix() {
return "${getRepoName()}.image"
}

boolean isOldImageInOpenshiftRegistry() {
return params.BASE_IMAGE_USE_OPENSHIFT_REGISTRY
}

String getOldImageRegistryCredentials() {
return params.BASE_IMAGE_REGISTRY_CREDENTIALS
}

String getOldImageRegistry() {
return isOldImageInOpenshiftRegistry() ? env.OPENSHIFT_REGISTRY : getParamOrDeployProperty('BASE_IMAGE_REGISTRY' , "${getOldImagePrefix()}.registry")
return getParamOrDeployProperty('BASE_IMAGE_REGISTRY' , "${getOldImagePrefix()}.registry")
}

String getOldImageNamespace() {
return isOldImageInOpenshiftRegistry() ? 'openshift' : getParamOrDeployProperty('BASE_IMAGE_NAMESPACE' , "${getOldImagePrefix()}.namespace")
return getParamOrDeployProperty('BASE_IMAGE_NAMESPACE' , "${getOldImagePrefix()}.namespace")
}

String getOldImageNames() {
Expand All @@ -398,20 +295,16 @@ String getOldImageTag() {
// New image information
////////////////////////////////////////////////////////////////////////

boolean isNewImageInOpenshiftRegistry() {
return params.PROMOTE_IMAGE_USE_OPENSHIFT_REGISTRY
}

String getNewImageRegistryCredentials() {
return params.PROMOTE_IMAGE_REGISTRY_CREDENTIALS
}

String getNewImageRegistry() {
return isNewImageInOpenshiftRegistry() ? env.OPENSHIFT_REGISTRY : params.PROMOTE_IMAGE_REGISTRY
return params.PROMOTE_IMAGE_REGISTRY
}

String getNewImageNamespace() {
return isNewImageInOpenshiftRegistry() ? 'openshift' : params.PROMOTE_IMAGE_NAMESPACE
return params.PROMOTE_IMAGE_NAMESPACE
}

String getNewImageNameSuffix() {
Expand Down
4 changes: 0 additions & 4 deletions .ci/jenkins/dsl/jobs.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,6 @@ void setupDeployJob(JobType jobType, String envName = '') {
stringParam('EXAMPLES_REF', '', 'Git reference (branch/tag) to the kogito-examples repository to use for tests.')

// Deploy information
booleanParam('IMAGE_USE_OPENSHIFT_REGISTRY', false, 'Set to true if image should be deployed in Openshift registry.In this case, IMAGE_REGISTRY_CREDENTIALS, IMAGE_REGISTRY and IMAGE_NAMESPACE parameters will be ignored')
stringParam('IMAGE_REGISTRY_CREDENTIALS', "${CLOUD_IMAGE_REGISTRY_CREDENTIALS_NIGHTLY}", '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')
Expand Down Expand Up @@ -216,7 +215,6 @@ void setupBuildImageJob(JobType jobType, String envName = '', boolean prodCI = f

// Deploy information
booleanParam('DEPLOY_IMAGE', false, 'Should we deploy image to given deploy registry ?')
booleanParam('DEPLOY_IMAGE_USE_OPENSHIFT_REGISTRY', false, 'Set to true if image should be deployed in Openshift registry.In this case, IMAGE_REGISTRY_CREDENTIALS, IMAGE_REGISTRY and IMAGE_NAMESPACE parameters will be ignored')
stringParam('DEPLOY_IMAGE_REGISTRY_CREDENTIALS', "${CLOUD_IMAGE_REGISTRY_CREDENTIALS_NIGHTLY}", 'Image registry credentials to use to deploy images. Will be ignored if no IMAGE_REGISTRY is given')
stringParam('DEPLOY_IMAGE_REGISTRY', "${CLOUD_IMAGE_REGISTRY}", 'Image registry to use to deploy images')
stringParam('DEPLOY_IMAGE_NAMESPACE', "${CLOUD_IMAGE_NAMESPACE}", 'Image namespace to use to deploy images')
Expand Down Expand Up @@ -258,7 +256,6 @@ void setupPromoteJob(JobType jobType) {
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 images information which can override `deployment.properties`
booleanParam('BASE_IMAGE_USE_OPENSHIFT_REGISTRY', false, 'Override `deployment.properties`. Set to true if base image should be retrieved from Openshift registry.In this case, BASE_IMAGE_REGISTRY_CREDENTIALS, BASE_IMAGE_REGISTRY and BASE_IMAGE_NAMESPACE parameters will be ignored')
stringParam('BASE_IMAGE_REGISTRY_CREDENTIALS', "${CLOUD_IMAGE_REGISTRY_CREDENTIALS_NIGHTLY}", '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')
Expand All @@ -267,7 +264,6 @@ void setupPromoteJob(JobType jobType) {
stringParam('BASE_IMAGE_TAG', '', 'Override `deployment.properties`. Base image tag')

// Promote images information
booleanParam('PROMOTE_IMAGE_USE_OPENSHIFT_REGISTRY', false, 'Set to true if base image should be deployed in Openshift registry.In this case, PROMOTE_IMAGE_REGISTRY_CREDENTIALS, PROMOTE_IMAGE_REGISTRY and PROMOTE_IMAGE_NAMESPACE parameters will be ignored')
stringParam('PROMOTE_IMAGE_REGISTRY_CREDENTIALS', "${CLOUD_IMAGE_REGISTRY_CREDENTIALS_NIGHTLY}", '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')
Expand Down

0 comments on commit 8c9ff6d

Please sign in to comment.