Fase 6.1
Agentes Efimeros

Agentes Dinamicos · Pod por Build

En lugar de mantener VMs estaticas como agentes, Jenkins usa el plugin de Kubernetes para crear un pod por cada build. El pod nace cuando el pipeline empieza y muere cuando termina. Cero mantenimiento, cero estado residual.

01

El Ciclo de Vida de un Agente

Seis pasos desde el trigger hasta la destruccion del pod. Todo automatizado — el desarrollador solo ve el resultado del pipeline.

1
Webhook o trigger manual
Un push a GitHub (via webhook) o un click en 'Build Now' dispara el pipeline. Jenkins recibe el evento y consulta el Jenkinsfile en el repo.
2
Jenkins lee el Jenkinsfile
El pipeline declarativo define un agente Kubernetes con la imagen del pod y los containers necesarios para el build.
3
Jenkins crea un Pod
Usando su ServiceAccount (jenkins), el master llama a la API de Kubernetes y crea un Pod en el namespace aiops. El pod tiene la imagen definida en el Jenkinsfile.
4
El agente se conecta via JNLP
El contenedor del agente inicia un proceso JNLP que se conecta al master en jenkins.aiops.svc.cluster.local:50000. Establece un canal de comunicacion bidireccional.
5
El master envia comandos
Cada stage del pipeline se traduce en comandos que el master envia al agente via el canal JNLP. El agente los ejecuta y devuelve logs y resultados.
6
El Pod se destruye
Al terminar el pipeline (exito o fallo), Jenkins elimina el Pod. El agente dejo de existir. No hay VMs que mantener, actualizar o parchear.
02

Declarar el Agente en el Jenkinsfile

El pod del agente se define directamente en el Jenkinsfile con YAML inline. Jenkins interpreta esta definicion y crea el pod antes de ejecutar el primer stage.

Jenkinsfile — definicion de agente Kubernetes
pipeline {
  agent {
    kubernetes {
      yaml '''
        apiVersion: v1
        kind: Pod
        spec:
          containers:
          - name: tools
            image: alpine/k8s:1.29.2
            command: [cat]
            tty: true
      '''
    }
  }
  stages {
    stage('Lint YAML') {
      steps {
        container('tools') {
          sh 'yamllint k3s/manifests/'
        }
      }
    }
  }
}

El contenedor tools usa la imagen alpine/k8s:1.29.2 que incluye kubectl, yamllint, ansible-lint y tofu. El comando cat con tty: true mantiene el contenedor vivo mientras Jenkins le envia comandos via JNLP.

03

RBAC: Como Jenkins Crea Pods

Para que Jenkins pueda crear y destruir pods de agentes, su ServiceAccount necesita permisos RBAC especificos. Sin esto, el plugin de Kubernetes falla con errores de autorizacion.

jenkins/rbac.yml (extracto)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: jenkins-agent
  namespace: aiops
rules:
  - apiGroups: [""]
    resources: ["pods", "pods/log", "pods/exec"]
    verbs: ["create", "get", "list", "watch", "delete"]
  - apiGroups: [""]
    resources: ["secrets", "configmaps"]
    verbs: ["get"]
Principio de least-privilege. El Role solo permite crear pods en el namespace aiops y leer secrets/configmaps necesarios. No permite acceder a otros namespaces ni modificar recursos del cluster.

Siguiente: Pipeline Setup

Con los agentes dinamicos entendidos, la pagina siguiente muestra el Jenkinsfile completo: stages de linting, validacion y notificacion a n8n en caso de fallo.

Pipeline