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-latestpara 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:3000en el contenedordindpara permitir el push a la Registry HTTP local de Forgejo sin errores de TLS/SSL.
3.2 Despliegue del Runner en Kubernetes
-
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) ➔ Actions ➔ Runners.
- Haz clic en Create new Runner y copia el Registration Token.
- Entra a tu repositorio o a la administración de Forgejo (
-
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"
- 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:
-
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) yrepository(Read / Lectura).
- Token Name:
- Haz clic en Generate Token y copia el token generado.
-
Guardar el Secret
FORGEJO_TOKENen los Repositorios:- Entra a tu repositorio (
telco-generatoromicrocoreos-telemetry) ➔ Settings (Configuración del Repo) ➔ Actions ➔ Secrets. - Haz clic en Add Secret:
- Name:
FORGEJO_TOKEN - Secret: (Pega el token copiado en el paso anterior)
- Name:
- Entra a tu repositorio (
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
