Skip to content

Instantly share code, notes, and snippets.

@heristop
Created February 13, 2023 11:16
Show Gist options
  • Save heristop/add5cd93cd581f13ad8d1c6d5df38ce2 to your computer and use it in GitHub Desktop.
Save heristop/add5cd93cd581f13ad8d1c6d5df38ce2 to your computer and use it in GitHub Desktop.
pipeline {
agent any
options {
buildDiscarder(logRotator(daysToKeepStr: '1'))
}
stages {
stage('Deploy CronJobs') {
steps {
script {
// Get code from repository
git url: 'https://my-git-repo', branch: 'main'
}
script {
openshift.withCluster() {
openshift.withProject("${env.PROJECT}-val") {
// Retrieve Tag description
IMAGE = openshift.raw("describe istag ${env.PROJECT}:prod")
}
openshift.withProject("${env.PROJECT}-prod") {
// Display current CronJobs
def cronJobsList = openshift.selector("cronjobs")
echo "CronJobs: ${cronJobsList.out}"
// Retrieve Image digest
def imageName = sh(returnStdout: true, script: "echo \"${IMAGE.out}\" | grep \"Image Name:\" | sed \"s/Image Name:\tsha256://\"").trim()
echo "IMAGE: ${imageName}"
// List all CronJobs we need to recreate
def cronJobList = [
'cronjob-1',
'cronjob-2',
'cronjob-3'
]
if ("true" == "${FORCE_CRONJOBS_CREATION}") {
echo "apply configMap openshift/configMaps/prod-config.yaml"
openshift.apply("-f openshift/configMaps/prod-config.yaml")
}
for (cronJob in cronJobList) {
if ("true" == "${FORCE_CRONJOBS_CREATION}") {
// Delete CronJob
def podCronJobList = openshift.raw("get cronjob")
int countCronJob = sh (
script: "echo '${podCronJobList.out}' | grep '${cronJob}' | wc -l",
returnStdout: true
) as int
if (countCronJob > 0) {
openshift.raw("delete cronjob/${cronJob}")
echo "Deleted ${cronJob}"
}
// Create CronJob
openshift.raw("create -f openshift/cronjobs/prod/${cronJob}.yaml")
echo "Created ${cronJob}"
}
// Patch CronJob
def jsonPatch = "{\"spec\":{\"jobTemplate\":{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"cronjob-prod\",\"image\":\"docker-registry.default.svc:5000/fondinnov-api-val/fondinnov-api@sha256:${imageName}\"}]}}}}}}"
echo "Patch: ${jsonPatch}"
def patch = openshift.raw("patch cronjob/${cronJob} --patch='$jsonPatch'")
echo "Result: ${patch.out}"
}
// Display new CronJobs
def newCronJobsList = openshift.selector("cronjobs")
echo "CronJobs: ${newCronJobsList.out}"
}
}
}
}
}
}
post {
always {
deleteDir()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment