AnibalOSanibal@core disponible
← cd ~/manual

Fase 3 · Forgejo Runner (CI/CD)

Despliega el runner de Forgejo en Kubernetes y configura los workflows como código.

Esta fase despliega un Runner de Forgejo dentro del clúster de Kubernetes usando el manifiesto GitOps apps/01-infra/forgejo-runner.yaml y configura los pipelines de integración continua (CI/CD) como código (IaC) para los proyectos microcoreos-telemetry y telco-generator.

3.1 Manifiesto del Runner de Forgejo (apps/01-infra/forgejo-runner.yaml)

El runner se despliega con arquitectura Docker-in-Docker (DinD) para permitir la construcción y publicación de imágenes sin exponer el socket host del nodo:

  • Etiquetas del Runner: Configurado con catthehacker/ubuntu:act-latest para proveer herramientas completas de CI/CD (Docker CLI, Buildx, Git, Curl).
  • Soporte para Registries Insecure HTTP: Configurado con el parámetro --insecure-registry=192.168.1.78:3000 en el contenedor dind para permitir el push a la Registry HTTP local de Forgejo sin errores de TLS/SSL.

3.2 Despliegue del Runner en Kubernetes

  1. Obtener el Token de Registro en Forgejo:

    • Entra a tu repositorio o a la administración de Forgejo (http://192.168.1.78:3000/).
    • Ve a Settings (Configuración) ➔ ActionsRunners.
    • Haz clic en Create new Runner y copia el Registration Token.
  2. Crear el Secret de registro en Kubernetes (sin subirlo a Git):

export KUBECONFIG=~/Documents/infra-proxmox/kubeconfig

kubectl create namespace forgejo-runner

kubectl create secret generic runner-secret \
  --namespace forgejo-runner \
  --from-literal=REGISTER_TOKEN="TU-RUNNER-TOKEN-AQUI"
  1. Desplegar / Aplicar el Manifiesto del Runner:
kubectl apply -f ~/Documents/telco-gitops-manifests/apps/01-infra/forgejo-runner.yaml

# Para reiniciar el pod y forzar la relectura de etiquetas y daemon dind:
kubectl rollout restart deployment/forgejo-runner -n forgejo-runner

3.3 Configuración del Personal Access Token (PAT) para el Package Registry

Para permitir que los Workflows de CI/CD tengan permisos de escritura en Forgejo Container Registry (192.168.1.78:3000) y evitar errores 401 Unauthorized: reqPackageAccess:

  1. Generar Token Personal en Forgejo:

    • En Forgejo Web, haz clic en tu avatar (esquina superior derecha) ➔ Settings (Configuración del Usuario).
    • En el menú lateral izquierdo, selecciona Applications (Aplicaciones).
    • En Generate New Token:
      • Token Name: registry-token
      • Permisos: Selecciona package (Write / Escritura) y repository (Read / Lectura).
    • Haz clic en Generate Token y copia el token generado.
  2. Guardar el Secret FORGEJO_TOKEN en los Repositorios:

    • Entra a tu repositorio (telco-generator o microcoreos-telemetry) ➔ Settings (Configuración del Repo) ➔ ActionsSecrets.
    • Haz clic en Add Secret:
      • Name: FORGEJO_TOKEN
      • Secret: (Pega el token copiado en el paso anterior)

3.4 Configuración de los Workflows CI/CD como Código (IaC)

Para que los proyectos automaticen la construcción y publicación de imágenes Docker en Forgejo Container Registry (192.168.1.78:3000), cada repositorio debe incluir su workflow en .forgejo/workflows/build-and-push.yaml.

Estructura del Workflow IaC con Kaniko (.forgejo/workflows/build-and-push.yaml):

Se utiliza Kaniko para construir imágenes de contenedores en espacio de usuario sin requerir el daemon de Docker (DinD) ni privilegios root, reduciendo el consumo de RAM de 800 MB a menos de 150 MB:

name: Build and Push Docker Image to Forgejo Registry

on:
  push:
    branches:
      - master
      - main

permissions:
  contents: read
  packages: write

env:
  REGISTRY: 192.168.1.78:3000
  IMAGE_NAME: microcoreos-telemetry  # (o telco-generator según corresponda)

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: https://github.com/actions/checkout@v4

      - name: Build and push Docker image with Kaniko
        uses: https://github.com/aevea/action-kaniko@v0.14.0
        with:
          image: ${{ gitea.repository_owner }}/${{ env.IMAGE_NAME }}
          registry: ${{ env.REGISTRY }}
          username: ${{ gitea.actor }}
          password: ${{ secrets.FORGEJO_TOKEN }}
          insecure: true
          insecure_registry: 192.168.1.78:3000
          tag_with_latest: true
          extra_args: --insecure-skip-tls-verify --insecure

3.4 Publicación de Proyectos en Git para Activar CI/CD

Repositorio 1: telco-generator

cd /home/anibalos/Documents/telco-generator
git add .
git commit -m "ci: añadir workflow build-and-push e infraestructura como código"
git push origin main

Repositorio 2: microcoreos-telemetry (telco-projects)

cd /home/anibalos/Documents/telco-projects
git add .forgejo/workflows/build-and-push.yaml
git commit -m "ci: utilizar token gitea.token para autenticación automática"
git push origin main