lunes, 9 de diciembre de 2024

Pipeline CD en Jenkins para terraform AWS EKS



En el [post anterior](https://www.ahioros.info/2024/12/creacion-de-un-cluster-aws-eks-con.html) hicimos un cluster AWS EKS con terraform. Como lo que nos gusta aquí es el tema de automatización, vamos a crear el pipeline de CD con Jenkins, les motraré 2 maneras de hacerlo, en este primer post vamos a hacerlo usando Secrets de Jenkins.

## Explicación del Pipeline

El Pipeline -> repositorio github (puede ser cualquier repositorio de git) -> Terraform (init, plan, apply/destroy) -> kubectl test

## Requisitos

Para Jenkins estoy usando el contenedor de Jenkins.
Los Plugins que tengo para este ejemplo son:

    * Pipeline: GitHub Groovy Libraries
    * Pipeline: Stage view
    * Terraform Plugin (opcional)

**Nota:** En mi caso yo tengo los binarios de terraform y kubectl en el directorio jenkins_home/terraform-bin y jenkins_home/kubectl-bin/.

Aquí abajo te dejo el video para que veas la configuración en caso que tengas dudas:

## Configuración de Credenciales en Jenkins

Primero configuramos las credenciales vamos a Manage Jenkins -> Credentials -> System -> Global credentials y damos click en Add Credentials.

Con la siguiente información:

## Configuración de Pipeline CD

Damos click en Dashboard -> All -> New Item.

Le damos un nombre al nuevo item y seleccionamos Pipeline.

Ahora seleccionamos el checkbox GitHub project -> y ponemos la URL de nuestro repositorio.


También damos click en el checkbox This project is parameterized -> y le damos los siguiente valores.


Esto nos servirá para que desde el mismo pipeline podemos crear y destruir la infraestructura de AWS EKS, esto te puede servir para los equipos no productivos por ejemplo.

Y en la sección de Pipeline escribimos el siguiente código:

```bash
pipeline {
    agent any

        environment {
        AWS_ACCESS_KEY_ID = credentials('SECRET-ACCESS-KEY-ID')
        AWS_SECRET_ACCESS_KEY = credentials('SECRET-ACCESS-KEY')

        }


    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/ahioros/terraform-aws-eks/'

            }

        }

        stage('Terraform init') {
            steps {
                   sh '/var/jenkins_home/terraform-bin/terraform init -no-color'

            }

        }
        stage('Terraform plan') {
            steps{
                sh '/var/jenkins_home/terraform-bin/terraform plan -var="config_key=config.json" -no-color'

            }

        }

        stage('Terraform apply') {
            steps {
                sh '/var/jenkins_home/terraform-bin/terraform ${action} -auto-approve -var="config_key=config.json" -no-color'

            }

        }

        stage('kubectl test') {
            steps {
                script {
                    if (action.toString() == "apply") {
                        sh '/var/jenkins_home/kubectl-bin/kubectl --kubeconfig ./template/kubeconfig.yaml get all -A'

                    } else {
                        echo 'skipping kubectl test'

                    }

                }

            }

        }

    }
}
```

Por último le das click en save.

## Despliegue del cluster EKS

Listo para ejecutar el pipeline solo debes ir Dashboard -> AWS-Terraform (o el nombre que le hayas puesto al pipeline) -> en el menú izquierdo le das click en Build With Parameters


Seleccionamos apply (que debe estar por default) y damos click en Build.

Ahora te tocará esperar unos 10-12 minutos en lo que se crea la infraestructura.


## Destrucción del cluster EKS

En la misma pantalla donde le diste click en el botón Build, en el combobox seleccionamos destroy y damos click en Build.


Listo en el siguiente post te mostraré otra forma para construir la infraestructura utilizando otros Plugins de Jenkins. 

No hay comentarios.: