Jenkinsfile 6.5 KB

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