Ya he mostrado dos formas de realizar un CD de terraform con Jenkins que puedes encontrar [aquí](https://www.ahioros.info/2024/12/pipeline-cd-en-jenkins-para-terraform.html) y [aquí](https://www.ahioros.info/2024/12/pipeline-cd-en-jenkins-para-terraform_12.html).
Ahora vamos a realizar lo mismo pero con GitHub Actions. El código está [aquí](https://github.com/ahioros/terraform-aws-eks) como ya debes saber los actions van dentro de la carpeta .github/workflows.
El video lo puedes ver aquí de este tutorial:
El action.yaml contiene lo siguiente:
```yaml
name: workflow-aws-terraform
on:
workflow_dispatch:
inputs:
action:
required: true
default: "apply"
description: "Select the action"
type: choice
options:
- "apply"
- "destroy"
push:
branches:
- master
# pull_request:
# branches:
# - main
jobs:
CD:
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v4.1.0
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Install Terraform
uses: little-core-labs/install-terraform@v2.0.0
with:
version: 1.9.8
- name: Terraform apply
run: |
terraform init
terraform plan -var="config_key=config.json"
terraform ${{ github.event.inputs.action }} -var="config_key=config.json" -auto-approve
- name: kubectl setup
uses: teknatha136/actions-kubectl@main
- run: |
if [[ ${{ github.event.inputs.action }} == 'apply' ]]; then
./kubebin/kubectl --kubeconfig ./template/kubeconfig.yaml get all -A
else
echo "Skipping kubectl test"
fi
```
**Nota:** Ojo el código debes modificarlo agregando la configuración de backend de AWS para que guarde el tfstate en un S3, de lo contrario cuando quieras ejecutarlo con la opción `destroy` no lo hará, porque no encuentra el tfstate.
Recuerda configurar las credenciales de AWS en settings -> Secrets and variables -> Actions -> Repository secrets.
Como se muestra a continuación:

En el pipeline la última parte donde ejecuto el comando kubectl pasándo el kubeconfig no es la forma segura, pero lo estoy haciendo así para que tengas una idea de qué es lo que hace, [aquí](https://github.com/marketplace/actions/kubectl-cli-action) te dejo la documentación.
En el siguiente post hablaré sobre los terraform modules, vamos a reusar código y poder levantar infraestructura más rápido por que el tiempo es dinero.
No hay comentarios.:
Publicar un comentario