Jenkinsfile 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. pipeline {
  2. options {
  3. ansiColor('xterm')
  4. }
  5. agent {
  6. kubernetes {
  7. yamlFile 'builder.yaml'
  8. }
  9. }
  10. // Definición de variables de entorno
  11. environment {
  12. NOMBRE_APP = 'finanzas'
  13. }
  14. // Definición de parámetros
  15. parameters {
  16. booleanParam(name: 'install', description: 'Instalar todo', defaultValue: false)
  17. booleanParam(name: 'clean', description: 'Borrar todo', defaultValue: false)
  18. booleanParam(name: 'claims', description: 'Crea PVC', defaultValue: false)
  19. booleanParam(name: 'borraclaims', description: 'Borra PVC', defaultValue: false)
  20. booleanParam(name: 'namespace', description: 'Crea namespace', defaultValue: false)
  21. booleanParam(name: 'borranamespace', description: 'Borra namespace', defaultValue: false)
  22. booleanParam(name: 'helm', description: 'Instala helm', defaultValue: false)
  23. }
  24. stages {
  25. stage('Crea las PVC') {
  26. when {
  27. expression { params.claims}
  28. }
  29. steps {
  30. echo "Creando las PVC..."
  31. container('kubectl') {
  32. withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
  33. sh """#!/bin/bash
  34. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/pvc-${NOMBRE_APP}.yaml
  35. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/pvc-static.yaml
  36. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/pvc-postgresql.yaml
  37. kubectl create -f K8S/pvc-${NOMBRE_APP}.yaml
  38. kubectl create -f K8S/pvc-static.yaml
  39. kubectl create -f K8S/pvc-postgresql.yaml
  40. """
  41. }
  42. }
  43. }
  44. }
  45. stage('Borra las PVC') {
  46. when {
  47. expression { params.borraclaims}
  48. }
  49. steps {
  50. echo "Borrando las PVC..."
  51. container('kubectl') {
  52. withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
  53. sh """#!/bin/bash
  54. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/pvc-${NOMBRE_APP}.yaml
  55. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/pvc-static.yaml
  56. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/pvc-postgresql.yaml
  57. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/patchPVC.sh
  58. sh K8S/patchPVC.sh||true
  59. kubectl delete -f K8S/pvc-${NOMBRE_APP}.yaml
  60. kubectl delete -f K8S/pvc-static.yaml
  61. kubectl delete -f K8S/pvc-postgresql.yaml
  62. """
  63. }
  64. }
  65. }
  66. }
  67. stage('Borra todo') {
  68. when {
  69. expression { params.clean }
  70. }
  71. steps {
  72. echo "Borrando todo..."
  73. container('kubectl') {
  74. withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
  75. sh """#!/bin/bash
  76. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/db-deployment.yaml
  77. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/db-service.yaml
  78. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-deployment.yaml
  79. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-ingress.yaml
  80. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/reg-secret.yaml
  81. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/env-prod-configmap.yaml
  82. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/env-prod-db-configmap.yaml
  83. kubectl delete -f K8S/db-deployment.yaml||true
  84. kubectl delete -f K8S/db-service.yaml||true
  85. kubectl delete -f K8S/${NOMBRE_APP}-deployment.yaml||true
  86. kubectl delete -f K8S/${NOMBRE_APP}-ingress.yaml||true
  87. kubectl delete -f K8S/reg-secret.yaml||true
  88. kubectl delete -f K8S/env-prod-configmap.yaml||true
  89. kubectl delete -f K8S/env-prod-db-configmap.yaml||true
  90. """
  91. }
  92. }
  93. }
  94. }
  95. stage('Borra namespace') {
  96. when {
  97. expression { params.borranamespace }
  98. }
  99. steps {
  100. echo "Borrando namespace..."
  101. container('kubectl') {
  102. withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
  103. sh 'kubectl delete -f K8S/namespace.yaml||true'
  104. }
  105. }
  106. }
  107. }
  108. stage('Crea namespace') {
  109. when {
  110. expression { params.namespace }
  111. }
  112. steps {
  113. echo "Creando namespace..."
  114. container('kubectl') {
  115. withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
  116. sh """#!/bin/bash
  117. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/namespace.yaml
  118. kubectl create -f K8S/namespace.yaml
  119. """
  120. }
  121. }
  122. }
  123. }
  124. stage('Construir image y subirla al registry con Kaniko') {
  125. when {
  126. allOf {
  127. expression { !params.clean }
  128. expression { !params.namespace }
  129. expression { !params.borranamespace }
  130. expression { !params.claims }
  131. expression { !params.borraclaims }
  132. }
  133. }
  134. steps {
  135. container('kaniko') {
  136. script {
  137. sh '''
  138. /kaniko/executor --dockerfile `pwd`/Dockerfile \
  139. --context `pwd` \
  140. --destination=registry.reymota.es/${NOMBRE_APP}:${BUILD_NUMBER}
  141. '''
  142. }
  143. }
  144. }
  145. }
  146. stage('Instala todo') {
  147. when {
  148. expression { params.install }
  149. }
  150. steps {
  151. echo "Creando todo..."
  152. container('kubectl') {
  153. withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
  154. sh """#!/bin/bash
  155. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/db-deployment.yaml
  156. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/db-service.yaml
  157. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-deployment.yaml
  158. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-ingress.yaml
  159. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/reg-secret.yaml
  160. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/env-prod-configmap.yaml
  161. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/env-prod-db-configmap.yaml
  162. kubectl create -f K8S/reg-secret.yaml||true
  163. kubectl apply -f K8S/env-prod-configmap.yaml
  164. kubectl create -f K8S/env-prod-db-configmap.yaml||true
  165. kubectl create -f K8S/db-deployment.yaml||true
  166. kubectl create -f K8S/db-service.yaml||true
  167. sed -i "s/<TAG>/${BUILD_NUMBER}/" K8S/${NOMBRE_APP}-deployment.yaml
  168. kubectl apply -f K8S/${NOMBRE_APP}-deployment.yaml
  169. kubectl create -f K8S/${NOMBRE_APP}-ingress.yaml||true
  170. """
  171. }
  172. }
  173. }
  174. }
  175. stage('Despliega la aplicación en Kubernetes') {
  176. when {
  177. allOf {
  178. expression { !params.clean }
  179. expression { !params.namespace }
  180. expression { !params.borranamespace }
  181. expression { !params.claims }
  182. expression { !params.borraclaims }
  183. expression { !params.install }
  184. }
  185. }
  186. steps {
  187. echo "Desplegando la aplicación"
  188. container('kubectl') {
  189. withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
  190. sh """#!/bin/bash
  191. sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-deployment.yaml
  192. sed -i "s/<TAG>/${BUILD_NUMBER}/" K8S/${NOMBRE_APP}-deployment.yaml
  193. kubectl delete -f K8S/${NOMBRE_APP}-deployment.yaml || true
  194. kubectl apply -f K8S/${NOMBRE_APP}-deployment.yaml
  195. """
  196. }
  197. }
  198. }
  199. }
  200. stage('Instala Helm Chart') {
  201. when {
  202. allOf {
  203. expression { !params.clean }
  204. expression { !params.namespace }
  205. expression { !params.borranamespace }
  206. expression { !params.claims }
  207. expression { !params.borraclaims }
  208. expression { !params.install }
  209. expression { params.helm }
  210. }
  211. }
  212. steps {
  213. echo "Instalando el helm chart"
  214. container('kubectl') {
  215. withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
  216. sh """#!/bin/bash
  217. helm upgrade finanzas finanzas --namespace finanzas --set=image.tag=${BUILD_NUMBER}
  218. """
  219. }
  220. }
  221. }
  222. }
  223. post {
  224. always {
  225. mail to: 'creylopez@yahoo.es',
  226. subject: "Trabajo ${currentBuild.fullDisplayName}",
  227. body: "El resultado del trabajo '${currentBuild.fullDisplayName}' ha sido <b>${currentBuild.result}</b>: Comprueba la salida de consola en ${env.BUILD_URL} para ver los resultados.",
  228. mimeType: 'text/html'
  229. }
  230. failure {
  231. mail to: 'creylopez@yahoo.es',
  232. subject: "El trabajo ${currentBuild.fullDisplayName} ha fallado",
  233. body: "El trabajo ha <b>FALLADO</b>: Comprueba la salida de consola en ${env.BUILD_URL} para ver los resultados.",
  234. mimeType: 'text/html'
  235. }
  236. unstable {
  237. echo 'El trabajo ${currentBuild.fullDisplayName} ha sido marcado como inestable'
  238. }
  239. changed {
  240. mail bcc: '',
  241. body: "El estado del trabajo '${currentBuild.fullDisplayName}' ha cambiado",
  242. from: '',
  243. replyTo: '',
  244. subject: "El estado del trabajo ha cambiado",
  245. to: 'creylopez@yahoo.es',
  246. mimeType: 'text/html'
  247. }
  248. }
  249. }