pedroamador / RetoGitOps

Reto Git Ops

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Reto

Primera parte: assets globales

Practitioner:

  • Crear Personal Access Token (PAT) en GitHub
  • Dar de alta PAT de GitHub en Jenkins
  • Generar credenciales de usuario en AWS
  • Dar de alta credenciales de AWS en Jenkins

Proficiency:

  • Dar de alta organización en SonarCloud
  • Crear Personal Access Token en SonarCloud
  • Configurar PAT de SonarCloud en Jenkins
  • Configurar webhook de SonarCloud apuntando a Jenkins

Segunda parte: Repo infra (Terraform)

Objetivo

Crear un bucket S3 desde Terraform con flujo GitOps

Requisitos

Características del bucket:

  • Nombre del bucket: "mapfre-gitops-" (ejempo: mapfre-gitops-pedroamador).
  • Tipo de bucket: sitio WEB, con "index.html" como documento por defecto.
  • Visibilidad: acceso público de lectura.

Flujo de entrega:

  • El backend de Terraform será de tipo "local" en el Jenkins, en la ruta /opt/buckets/, por ejemplo "/opt/buckets/pedroamador"
  • Se hará "terraform plan" todas las ramas, excepto rama "main"
  • Se aplicará terraform únicamente con la rama "main"

Pipeline:

  • Incluir archivo Jenkinsfile en el directorio raíz del repositorio
  • Configurar Job de Jenkins como "Pipeline Multibranch"
  • Configurar Webhook en el repositorio de GitHub apuntando a "jenkins.cicd.kevops.academy"
  • Configurar credenciales de AWS como secretos y usarlas:
    • Como variables de entorno, o bien
    • Como variables definidas en "variables.tf" y sobreescritas en el archivo "terraform.tfvars"

Proficiency:

  • Hacer commits con formato "conventional commit"
  • Hacer un changelog basado en los mensajes de commit
  • Etiquetar el repositorio (tag) con versiones semánticas tipo MAYOR.MINOR.PATCH
    • Incluir stage de Sonar en el pipeline:
    • Dar de alta proyecto SonarCloud
    • Crear Personal Access Token en SonarCloud
    • Configurar PAT de SonarCloud en Jenkins
    • Configurar webhook de SonarCloud apuntando a Jenkins
  • Usar ramas de características (feature branches) e integrar código mediante Pull Requests a la rama "main"
  • Configurar el plan de Terraform en un módulo con parámetros para las credenciales de AWS y el nombre del bucket (que debe comenzar por "mapfre-gitops-*")

Otros:

Se debe tener precaución para no incluir en el repositorio información sensible, como credenciales de AWS. Éstas deben utilizarse en el flujo de entrega como secretos de Jenkins

Tercera parte: Repo Estáticos / Microservicio (Ansible)

Objetivo

Provisionar un bucket S3 desde Ansible con flujo GitOps

Requisitos

Tarea de Ansible: - Copiar archivo estático "index.html" en el bucket provisionado en el repositorio de infraestructura - El archivo estático debe contener "Hello, World! (v1.0.0)" o similar (contenido libre)

Flujo de entrega:

  • Se hará test del playbook con "ansible-playbook .yml --check" en un stage de pruebas para todas las ramas
  • Se aplicará el playbook exclusivamente en la rama "main"

Pipeline:

  • Incluir archivo Jenkinsfile en el directorio raíz del repositorio
  • Configurar Job de Jenkins como "Pipeline Multibranch"
  • Configurar Webhook en el repositorio de GitHub apuntando a "jenkins.cicd.kevops.academy"
  • Configurar credenciales de AWS como secretos y usarlas como variables de entorno

Proficiency:

  • Hacer commits con formato "conventional commit"
  • Hacer un changelog basado en los mensajes de commit
  • Etiquetar el repositorio (tag) con versiones semánticas tipo MAYOR.MINOR.PATCH
  • Incluir stage de Sonar en el pipeline:
    • Dar de alta proyecto SonarCloud
    • Crear Personal Access Token en SonarCloud
    • Configurar PAT de SonarCloud en Jenkins
    • Configurar webhook de SonarCloud apuntando a Jenkins
  • Usar ramas de características (feature branches) e integrar código mediante Pull Requests a la rama "main"
  • Usar un template "jinja2" y un archivo "version.txt" para que el contenido del HTML "Hello, World! (vX.Y.Z)" sea dinámico.

Otros:

  • Se debe tener precaución para no incluir en el repositorio información sensible, como credenciales de AWS. Éstas deben utilizarse en el flujo de entrega como secretos de Jenkins

Recursos

  • Git:
  • Jenkins:
  • Ansible:

Entregables

Para poder evaluar el reto se necesita adjuntar a esta tarea:

  • URL de los repositorios de Git generados
  • URL de los jobs de Jenkins ejecutados
  • URL del bucket de S3

About

Reto Git Ops

License:MIT License


Languages

Language:HCL 90.1%Language:Jinja 5.7%Language:HTML 4.2%