You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

212 lines
6.5 KiB

pipeline {
options {
ansiColor('xterm')
}
agent {
kubernetes {
yamlFile 'builder.yaml'
}
}
// Definición de variables de entorno
environment {
NOMBRE_APP = 'reymota'
}
// 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)
}
stages {
stage('Crea las PVC') {
when {
expression { params.claims}
}
steps {
echo "Creando las PVC..."
container('kubectl') {
withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
sh 'kubectl create -f K8S/pvc-${NOMBRE_APP}.yaml'
sh 'kubectl create -f K8S/pvc-static.yaml'
sh 'kubectl create -f K8S/pvc-postgresql.yaml'
}
}
}
}
stage('Borra las PVC') {
when {
expression { params.borraclaims}
}
steps {
echo "Borrando las PVC..."
container('kubectl') {
withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
sh 'sh K8S/patchPVC.sh||true'
sh 'kubectl delete -f K8S/pvc-${NOMBRE_APP}.yaml||true'
sh 'kubectl delete -f K8S/pvc-static.yaml||true'
sh 'kubectl delete -f K8S/pvc-postgresql.yaml||true'
}
}
}
}
stage('Borra todo') {
when {
expression { params.clean }
}
steps {
echo "Borrando todo..."
container('kubectl') {
withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
sh 'kubectl delete -f K8S/db-deployment.yaml||true'
sh 'kubectl delete -f K8S/db-service.yaml||true'
sh 'kubectl delete -f K8S/${NOMBRE_APP}-deployment.yaml||true'
sh 'kubectl delete -f K8S/${NOMBRE_APP}-ingress.yaml||true'
sh 'kubectl delete -f K8S/reg-secret.yaml||true'
sh 'kubectl delete -f K8S/env-prod-configmap.yaml||true'
sh 'kubectl delete -f K8S/env-prod-db-configmap.yaml||true'
}
}
}
}
stage('Borra namespace') {
when {
expression { params.borranamespace }
}
steps {
echo "Borrando namespace..."
container('kubectl') {
withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
sh 'kubectl delete -f K8S/namespace.yaml||true'
}
}
}
}
stage('Crea namespace') {
when {
expression { params.namespace }
}
steps {
echo "Creando namespace..."
container('kubectl') {
withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
sh 'kubectl apply -f K8S/namespace.yaml'
}
}
}
}
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 }
}
}
steps {
container('kaniko') {
script {
sh '''
/kaniko/executor --dockerfile `pwd`/Dockerfile \
--context `pwd` \
--destination=registry.reymota.es/${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 'kubectl create -f K8S/reg-secret.yaml'
sh 'kubectl create -f K8S/env-prod-configmap.yaml'
sh 'kubectl create -f K8S/env-prod-db-configmap.yaml'
sh 'kubectl create -f K8S/db-deployment.yaml'
sh 'kubectl create -f K8S/db-service.yaml'
sh 'sed -i "s/<TAG>/${BUILD_NUMBER}/" K8S/${NOMBRE_APP}-deployment.yaml'
sh 'kubectl apply -f K8S/${NOMBRE_APP}-deployment.yaml'
sh 'kubectl create -f K8S/${NOMBRE_APP}-ingress.yaml'
}
}
}
}
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.install }
}
}
steps {
echo "Desplegando la aplicación"
container('kubectl') {
withCredentials([file(credentialsId: env.Destino, variable: 'KUBECONFIG')]) {
sh 'sed -i "s/<TAG>/${BUILD_NUMBER}/" K8S/${NOMBRE_APP}-deployment.yaml'
sh 'kubectl delete -f K8S/${NOMBRE_APP}-deployment.yaml || true'
sh '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'
}
}
}