@Library('jenkins-library-iru@master') _ def Label = "admin-iru-build-${UUID.randomUUID().toString()}" pipeline { options { buildDiscarder logRotator(numToKeepStr: '10') disableConcurrentBuilds() timeout(time: 10, unit: 'MINUTES') } agent { kubernetes { label Label yaml libraryResource('standartPodDefinition.yaml') } } environment { CONTEXT='provision@sdsys.office' DOCKER_IMAGE='iru/admin' CHART_SUBPATH='helm/web-registration' HELM_GIT_URL='ssh://git@git.sdsys.ru:8022/iru/k8s.git' APP_GIT_URL='ssh://git@git.sdsys.ru:8022/iru/admin.git' JENKINS_MAIL='jenkins.dev@sdsys.ru' DOCKER_REGISTRY='images.sdsys.ru' NAMESPACE='' PROJECT='' CHART_NAME='' CHART_PATH='' HELM_DIR='' IMAGE_TO_PUSH='' VALUES_FILE='' } parameters { string( name: "repo", defaultValue: "prod", description: "Repository to build and/or deploy from." ) string( name: "mailto", defaultValue: "admin@sdsys.ru", description: "Email which has to be notified." ) } stages { stage("Prepare to Build") { steps { script { gitOps.clone(HELM_GIT_URL) HELM_DIR = dirOps.calculateDir(HELM_GIT_URL) CHART_PATH = "${HELM_DIR}/${CHART_SUBPATH}" PROJECT = DOCKER_IMAGE.split("/")[1] NAMESPACE = CHART_SUBPATH.split("/")[1] VALUES_FILE = "${CHART_PATH}/dev.yaml" } } } stage("Build Image") { steps { script { echo "Build Image with Kaniko" REGISTRY = "${DOCKER_REGISTRY}/${DOCKER_IMAGE}" ARGS = [ "repo=${repo}" ] IMAGE_TO_PUSH = "${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${repo}-${BUILD_NUMBER}" k8sBuildImage.kaniko(IMAGE_TO_PUSH, ARGS) } } } stage("Update Helm Chart dev.yaml") { steps { script { echo "Update Helm Chart" def data = readYaml file: "${CHART_PATH}/dev.yaml" TAG_PATH = "images.${PROJECT}" yamlOps.updateBuilder(TAG_PATH, data, IMAGE_TO_PUSH) writeYaml file: "${CHART_PATH}/dev.yaml", data: data, overwrite: true echo "Updated ${CHART_PATH}/dev.yaml in ${TAG_PATH} to ${IMAGE_TO_PUSH}" } } } stage("Update APP") { steps { script { RELEASENAME = CHART_SUBPATH.split("/")[1] try { echo "Update APP to ${IMAGE_TO_PUSH}" k8sHelmOps.upgrade(CONTEXT, NAMESPACE, RELEASENAME, CHART_PATH, VALUES_FILE) echo "Update success!!!" } catch(err) { echo "Recovering APP" k8sHelmOps.rollback(CONTEXT, NAMESPACE, RELEASENAME) throw err } } } } stage("Push changes to REPO") { steps { script { echo "Push changes to Repo" COMMIT = "Version update ${PROJECT}" gitOps.push(HELM_DIR, COMMIT) } } } } post { failure { mail charset: 'UTF-8', subject: "Jenkins build ERROR", mimeType: 'text/html', to: "${mailto}", body: "ATTENTION!!!
Jenkins job failed.\n\n
Project Name:
${env.JOB_NAME}
\nBuild Number:
${env.BUILD_NUMBER}
\nURL Build:
${RUN_DISPLAY_URL}" } } }