|
|
@@ -0,0 +1,346 @@
|
|
|
+pipeline {
|
|
|
+
|
|
|
+ options {
|
|
|
+ ansiColor('xterm')
|
|
|
+ }
|
|
|
+
|
|
|
+ agent {
|
|
|
+ kubernetes {
|
|
|
+ yamlFile 'builder.yaml'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Definición de variables de entorno
|
|
|
+ environment {
|
|
|
+ NOMBRE_APP = 'jugaralpadel'
|
|
|
+ REGISTRO = 'harbor.reymota.es/jugaralpadel'
|
|
|
+ //REGISTRO = 'registry.reymota.es'
|
|
|
+ }
|
|
|
+
|
|
|
+ // Definición de parámetros
|
|
|
+ parameters {
|
|
|
+ booleanParam(name: 'install', description: 'Instalar todo', defaultValue: false)
|
|
|
+ booleanParam(name: 'clean', description: 'Borrar todo', defaultValue: false)
|
|
|
+ booleanParam(name: 'claims', description: 'Crea PVC', defaultValue: false)
|
|
|
+ booleanParam(name: 'borraclaims', description: 'Borra PVC', defaultValue: false)
|
|
|
+ booleanParam(name: 'namespace', description: 'Crea namespace', defaultValue: false)
|
|
|
+ booleanParam(name: 'borranamespace', description: 'Borra namespace', defaultValue: false)
|
|
|
+ booleanParam(name: 'creadb', description: 'Crea el objeto para crear la DB en el cúster', defaultValue: false)
|
|
|
+ booleanParam(name: 'borradb', description: 'Borra el objeto que creó la DB, no la DB', defaultValue: false)
|
|
|
+ booleanParam(name: 'servicelb', description: 'Crea el servicio LoadBalancer', defaultValue: false)
|
|
|
+ booleanParam(name: 'servicenp', description: 'Crea el servicio NodePort', defaultValue: false)
|
|
|
+ booleanParam(name: 'latest', description: 'Instala la última versión', defaultValue: false)
|
|
|
+ }
|
|
|
+
|
|
|
+ stages {
|
|
|
+ stage('Crea las PVC') {
|
|
|
+ when {
|
|
|
+ expression { params.claims}
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Creando las PVC..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ cat K8S/pvc-${NOMBRE_APP}.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl create -f -
|
|
|
+ cat K8S/pvc-static.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl create -f -
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Borra las PVC') {
|
|
|
+ when {
|
|
|
+ expression { params.borraclaims}
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Borrando las PVC..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ cat K8S/pvc-${NOMBRE_APP}.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl delete -f -
|
|
|
+ cat K8S/pvc-static.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl delete -f -
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Crea el objeto para crear la DB') {
|
|
|
+ when {
|
|
|
+ expression { params.creadb}
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Creando el objeto que crea la DB..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ kubectl create -f K8S/${NOMBRE_APP}-db.yaml
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Borra el objeto que creó la DB, no la DB') {
|
|
|
+ when {
|
|
|
+ expression { params.borradb}
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Borrando el objeto que creó la DB..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ kubectl delete -f K8S/${NOMBRE_APP}-db.yaml
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Crea el servicio NodePort') {
|
|
|
+ when {
|
|
|
+ expression { params.servicenp}
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Creando el servicio NodePort..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ cat K8S/${NOMBRE_APP}-service-lb.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl delete -f - || true
|
|
|
+ cat K8S/${NOMBRE_APP}-service.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl create -f -
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Crea el servicio LoadBalancer') {
|
|
|
+ when {
|
|
|
+ expression { params.servicelb}
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Creando el servicio LoadBalancer..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ cat K8S/${NOMBRE_APP}-service.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl delete -f - || true
|
|
|
+ cat K8S/${NOMBRE_APP}-service-lb.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl create -f -
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ stage('Borra todo') {
|
|
|
+ when {
|
|
|
+ expression { params.clean }
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Borrando todo..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ sed -i 's|<REGISTRO>|${REGISTRO}|' K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-ingress.yaml
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/reg-secret.yaml
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/secreto-db.yaml
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/env-prod-configmap.yaml
|
|
|
+
|
|
|
+ kubectl delete -f K8S/${NOMBRE_APP}-deployment.yaml||true
|
|
|
+ kubectl delete -f K8S/${NOMBRE_APP}-ingress.yaml||true
|
|
|
+
|
|
|
+ kubectl delete -f K8S/secreto-db.yaml||true
|
|
|
+ kubectl delete -f K8S/reg-secret.yaml||true
|
|
|
+ kubectl delete -f K8S/env-prod-configmap.yaml||true
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Borra namespace') {
|
|
|
+ when {
|
|
|
+ expression { params.borranamespace }
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Borrando namespace..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ cat K8S/namespace.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl delete -f -
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Crea namespace') {
|
|
|
+ when {
|
|
|
+ expression { params.namespace }
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Creando namespace..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ cat K8S/namespace.yaml | sed -e "s/<NS>/${NAMESPACE}/" | kubectl create -f -
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Construir image y subirla al registry con Kaniko') {
|
|
|
+ when {
|
|
|
+ allOf {
|
|
|
+ expression { !params.clean }
|
|
|
+ expression { !params.namespace }
|
|
|
+ expression { !params.borranamespace }
|
|
|
+ expression { !params.claims }
|
|
|
+ expression { !params.borraclaims }
|
|
|
+ expression { !params.creadb }
|
|
|
+ expression { !params.borradb }
|
|
|
+ expression { !params.servicenp }
|
|
|
+ expression { !params.servicelb }
|
|
|
+ expression { !params.latest }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ container('kaniko') {
|
|
|
+ script {
|
|
|
+ sh '''
|
|
|
+ /kaniko/executor --dockerfile `pwd`/Dockerfile \
|
|
|
+ --context `pwd` \
|
|
|
+ --destination=${REGISTRO}/${NOMBRE_APP}:${BUILD_NUMBER}
|
|
|
+ '''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Instala todo') {
|
|
|
+ when {
|
|
|
+ expression { params.install }
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Creando todo..."
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ sed -i 's|<REGISTRO>|${REGISTRO}|' K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-ingress.yaml
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/reg-secret.yaml
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/secreto-db.yaml
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/env-prod-configmap.yaml
|
|
|
+
|
|
|
+ kubectl create -f K8S/reg-secret.yaml||true
|
|
|
+ kubectl create -f K8S/secreto-db.yaml||true
|
|
|
+ kubectl apply -f K8S/env-prod-configmap.yaml
|
|
|
+
|
|
|
+ sed -i "s/<TAG>/${BUILD_NUMBER}/" K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ kubectl apply -f K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ kubectl create -f K8S/${NOMBRE_APP}-ingress.yaml||true
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Despliega la aplicación en Kubernetes') {
|
|
|
+ when {
|
|
|
+ allOf {
|
|
|
+ expression { !params.clean }
|
|
|
+ expression { !params.namespace }
|
|
|
+ expression { !params.borranamespace }
|
|
|
+ expression { !params.claims }
|
|
|
+ expression { !params.borraclaims }
|
|
|
+ expression { !params.creadb }
|
|
|
+ expression { !params.borradb }
|
|
|
+ expression { !params.servicenp }
|
|
|
+ expression { !params.servicelb }
|
|
|
+ expression { !params.latest }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Desplegando la aplicación"
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ sed -i 's|<REGISTRO>|${REGISTRO}|' K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ sed -i "s/<TAG>/${BUILD_NUMBER}/" K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ kubectl delete -f K8S/${NOMBRE_APP}-deployment.yaml || true
|
|
|
+ kubectl apply -f K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('Despliega la aplicación en Kubernetes con la última imagen') {
|
|
|
+ when {
|
|
|
+ allOf {
|
|
|
+ expression { !params.clean }
|
|
|
+ expression { !params.namespace }
|
|
|
+ expression { !params.borranamespace }
|
|
|
+ expression { !params.claims }
|
|
|
+ expression { !params.borraclaims }
|
|
|
+ expression { !params.creadb }
|
|
|
+ expression { !params.borradb }
|
|
|
+ expression { !params.servicenp }
|
|
|
+ expression { !params.servicelb }
|
|
|
+ expression { params.latest }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ echo "Desplegando la aplicación"
|
|
|
+ container('kubectl') {
|
|
|
+ withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
|
|
|
+ sh """#!/bin/bash
|
|
|
+ sed -i 's|<NS>|"${NAMESPACE}"|' K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ sed -i 's|<REGISTRO>|${REGISTRO}|' K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ sed -i "s/<TAG>/latest/" K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ kubectl delete -f K8S/${NOMBRE_APP}-deployment.yaml || true
|
|
|
+ kubectl apply -f K8S/${NOMBRE_APP}-deployment.yaml
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ post {
|
|
|
+ always {
|
|
|
+ mail to: 'creylopez@yahoo.es',
|
|
|
+ subject: "Trabajo ${currentBuild.fullDisplayName}",
|
|
|
+ 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.",
|
|
|
+ mimeType: 'text/html'
|
|
|
+ }
|
|
|
+
|
|
|
+ failure {
|
|
|
+ mail to: 'creylopez@yahoo.es',
|
|
|
+ subject: "El trabajo ${currentBuild.fullDisplayName} ha fallado",
|
|
|
+ body: "El trabajo ha <b>FALLADO</b>: Comprueba la salida de consola en ${env.BUILD_URL} para ver los resultados.",
|
|
|
+ mimeType: 'text/html'
|
|
|
+ }
|
|
|
+
|
|
|
+ unstable {
|
|
|
+ echo 'El trabajo ${currentBuild.fullDisplayName} ha sido marcado como inestable'
|
|
|
+ }
|
|
|
+
|
|
|
+ changed {
|
|
|
+ mail bcc: '',
|
|
|
+ body: "El estado del trabajo '${currentBuild.fullDisplayName}' ha cambiado",
|
|
|
+ from: '',
|
|
|
+ replyTo: '',
|
|
|
+ subject: "El estado del trabajo ha cambiado",
|
|
|
+ to: 'creylopez@yahoo.es',
|
|
|
+ mimeType: 'text/html'
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|