Jenkinsfile 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. pipeline {
  2. agent {
  3. label "swarm"
  4. }
  5. environment {
  6. docker_registry='dev-registry.infoclinica.ru:5000'
  7. DOCKER_IMAGE='node'
  8. SWARM_GIT_URL='ssh://git@git.sdsys.ru:8022/iru/stack-deploy.git'
  9. SWARM_GIT_NAME='stack-deploy'
  10. }
  11. parameters {
  12. string(
  13. name: "repo",
  14. defaultValue: "prod",
  15. description: "Repository to build and/or deploy from."
  16. )
  17. string(
  18. name: "service_update",
  19. defaultValue: "info_node info_node-api",
  20. description: "Services to update - i.e. info_node or/and info_node-api."
  21. )
  22. string(
  23. name: "mailto",
  24. defaultValue: "admin@sdsys.ru",
  25. description: "Email which has to be notified."
  26. )
  27. }
  28. stages {
  29. stage("Build") {
  30. when { expression { service_update == "" } } // tmp
  31. steps {
  32. echo "Building ${docker_registry}/${DOCKER_IMAGE}:${repo}-${BUILD_NUMBER}."
  33. sh "docker build --build-arg repo=${repo} --no-cache -t ${docker_registry}/${DOCKER_IMAGE}:${repo}-${BUILD_NUMBER} ."
  34. }
  35. }
  36. stage("Publish") {
  37. when { expression { service_update == "" } } // tmp
  38. steps {
  39. echo "Publishing ${docker_registry}/${DOCKER_IMAGE}:${repo}-${BUILD_NUMBER}"
  40. sh "docker push ${docker_registry}/${DOCKER_IMAGE}:${repo}-${BUILD_NUMBER}"
  41. }
  42. }
  43. stage("Update") {
  44. // when { expression { service_update != "" } }
  45. when { expression { service_update == "" } } // tmp
  46. steps {
  47. script {
  48. for (String item : service_update.split()) {
  49. try{
  50. echo "Updating $item"
  51. sh "docker service update $item --image ${docker_registry}/${DOCKER_IMAGE}:${repo}-${BUILD_NUMBER}"
  52. }
  53. catch(err){
  54. echo "Recovering service $item"
  55. sh "docker service rollback $item"
  56. throw err
  57. }
  58. }
  59. }
  60. }
  61. }
  62. stage("Tagging"){
  63. steps{
  64. echo "Setting latest tag"
  65. // sh '''docker tag ${docker_registry}/${DOCKER_IMAGE}:${repo}-${BUILD_NUMBER} ${docker_registry}/${DOCKER_IMAGE}:latest
  66. // docker pull ${docker_registry}/${DOCKER_IMAGE}:latest'''
  67. echo "Updating tag info in iru/stack-deploy repository"
  68. withCredentials([sshUserPrivateKey(credentialsId: 'provision', keyFileVariable: 'GIT_SSH_KEY', passphraseVariable: '', usernameVariable: 'GIT_SSH_USERNAME')]) {
  69. sh '''GIT_SSH_COMMAND='ssh -i ${GIT_SSH_KEY} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
  70. git clone ${SWARM_GIT_URL}
  71. ls
  72. cd ${SWARM_GIT_NAME}
  73. ls
  74. echo ${BUILD_NUMBER} > tags/${DOCKER_IMAGE}.version
  75. git add -A
  76. GIT_SSH_COMMAND='ssh -i ${GIT_SSH_KEY} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
  77. git commit -am 'Version update'
  78. git push
  79. ls'''
  80. }
  81. }
  82. }
  83. }
  84. post {
  85. always {
  86. echo "CleaningUp work diretory"
  87. deleteDir()
  88. }
  89. failure {
  90. mail charset: 'UTF-8',
  91. subject: "Jenkins build error",
  92. mimeType: 'text/html',
  93. to: "${mailto}",
  94. 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}"
  95. }
  96. success {
  97. mail charset: 'UTF-8',
  98. subject: "Jenkins build SUSCCESS",
  99. mimeType: 'text/html',
  100. to: "${mailto}",
  101. body: "<b>Congradulations!!!</b> <b><br> Jenkins job succefully finished.\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}"
  102. }
  103. }
  104. }