devK8s.Jenkinsfile 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. @Library('jenkins-library@master') _
  2. def Label = "node-lab-build-${UUID.randomUUID().toString()}"
  3. pipeline {
  4. options {
  5. buildDiscarder logRotator(numToKeepStr: '10')
  6. disableConcurrentBuilds()
  7. timeout(time: 10, unit: 'MINUTES')
  8. ansiColor('xterm')
  9. }
  10. agent {
  11. kubernetes {
  12. label Label
  13. yaml libraryResource('standartPodDefinition.yaml')
  14. }
  15. }
  16. environment {
  17. CLOUD='cloud-it-k8s'
  18. DOCKER_IMAGE='lab/node'
  19. CHART_SUBPATH='helm/lab'
  20. NAMESPACE='lab'
  21. HELM_GIT_URL='ssh://git@git.sdsys.ru:8022/labportal/k8s.git'
  22. APP_GIT_URL='ssh://git@git.sdsys.ru:8022/labportal/node.git'
  23. JENKINS_MAIL='jenkins.dev@sdsys.ru'
  24. DOCKER_REGISTRY='jcr.infoclinica.ru'
  25. PROJECT=''
  26. CHART_NAME=''
  27. CHART_PATH=''
  28. HELM_DIR=''
  29. TAG=''
  30. }
  31. parameters {
  32. string(
  33. name: "repo",
  34. defaultValue: "prod",
  35. description: "Repository to build and/or deploy from."
  36. )
  37. string(
  38. name: "version",
  39. defaultValue: "16.1",
  40. description: "Witch version to build and/or deploy."
  41. )
  42. string(
  43. name: "mailto",
  44. defaultValue: "admin@sdsys.ru",
  45. description: "Email which has to be notified."
  46. )
  47. }
  48. stages {
  49. stage("Prepare to Build") {
  50. steps {
  51. script {
  52. gitOps.clone(HELM_GIT_URL)
  53. HELM_DIR = dirOps.calculateDir(HELM_GIT_URL)
  54. CHART_PATH = "${HELM_DIR}/${CHART_SUBPATH}"
  55. PROJECT = DOCKER_IMAGE.split("/")[1]
  56. }
  57. }
  58. }
  59. stage("Build Image") {
  60. steps {
  61. script {
  62. echo "Build Image with Kaniko"
  63. REGISTRY = "${DOCKER_REGISTRY}/${DOCKER_IMAGE}"
  64. ARGS = [ "repo=${repo}", "version=${version}" ]
  65. TAG = "${repo}-${BUILD_NUMBER}"
  66. k8sBuildImage.kaniko(REGISTRY, TAG, ARGS)
  67. }
  68. }
  69. }
  70. stage("Update Helm Chart values.yaml") {
  71. steps {
  72. script {
  73. echo "Update Helm Chart"
  74. def data = readYaml file: "${CHART_PATH}/values.yaml"
  75. TAG_PATH = "images.${PROJECT}.dev"
  76. yamlOps.updateBuilder(TAG_PATH, data, TAG)
  77. writeYaml file: "${CHART_PATH}/values.yaml", data: data, overwrite: true
  78. }
  79. }
  80. }
  81. stage("Update APP") {
  82. steps {
  83. script {
  84. RELEASENAME = CHART_SUBPATH.split("/")[1]
  85. try {
  86. echo "Update APP"
  87. k8sHelmOps.upgrade(CLOUD, NAMESPACE, RELEASENAME, CHART_PATH)
  88. }
  89. catch(err) {
  90. echo "Recovering APP"
  91. k8sHelmOps.rollback(CLOUD, NAMESPACE, RELEASENAME)
  92. throw err
  93. }
  94. }
  95. }
  96. }
  97. stage("Push changes to REPO") {
  98. steps {
  99. script {
  100. echo "Push changes to Repo"
  101. COMMIT = "Version update ${PROJECT}"
  102. gitOps.push(HELM_DIR, COMMIT)
  103. }
  104. }
  105. }
  106. }
  107. post {
  108. failure {
  109. mail charset: 'UTF-8',
  110. subject: "Jenkins build ERROR",
  111. mimeType: 'text/html',
  112. to: "${mailto}",
  113. body: "<b>ATTENTION!!!</b> <b><br> Jenkins job failed.\n\n <b><br>Project Name:</b> ${env.JOB_NAME} <b><br>\nBuild Number:</b> ${env.BUILD_NUMBER} <b><br>\nURL Build:</b> ${RUN_DISPLAY_URL}"
  114. }
  115. }
  116. }