Jenkinsfile 8.2 KB

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