Jenkins on Kubernetes · CI/CD Self-Hosted
Jenkins self-hosted corriendo como pod en k3s, con agentes dinamicos que se crean y destruyen por build. Complementa GitHub Actions del Proyecto 1, cubriendo ambos enfoques de CI/CD.
Por que Jenkins en k3s
Jenkins no compite con GitHub Actions. Coexisten en industrias distintas. Empresas cloud-native usan Actions. Empresas con infraestructura on-premise usan Jenkins. Este proyecto cubre ambos enfoques deliberadamente.
Componentes del Deployment
Cinco recursos de Kubernetes forman el despliegue de Jenkins. Cada uno tiene una responsabilidad clara.
deployment.ymlservice.ymlpvc.ymlrbac.yml, serviceaccount.ymlconfigmap.ymlConfiguracion del Primer Arranque
Jenkins normalmente pide configurar un usuario admin en el primer arranque via wizard web. Con el flag -Djenkins.install.runSetupWizard=false y un script Groovy, esto se automatiza.
if (currentRealmClass.contains("None")) {
def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount("admin", "admin123")
instance.setSecurityRealm(hudsonRealm)
def strategy = new FullControlOnceLoggedInAuthorizationStrategy()
strategy.setAllowAnonymousRead(false)
instance.setAuthorizationStrategy(strategy)
instance.save()
} El script se monta en /usr/share/jenkins/ref/init.groovy.d/. Jenkins ejecuta todos los scripts en ese directorio al iniciar. Si el security realm ya esta configurado, el script no hace nada — es idempotente.
Java Options
-Djenkins.install.runSetupWizard=false-Djava.util.logging.config.file=/var/jenkins_home/logging.propertiesPlugins Esenciales
Cinco plugins que transforman Jenkins de un servidor de CI generico en una plataforma integrada con Kubernetes y el observability stack.
KubernetesGitPipelinePrometheus MetricsAnsiColorMetricas para Grafana
El plugin Prometheus Metrics expone /prometheus en el puerto 8080. Prometheus scrapea este endpoint y Grafana muestra dashboards con builds, jobs y agentes.
- job_name: jenkins
metrics_path: /prometheus
static_configs:
- targets: ['jenkins.aiops.svc.cluster.local:8080'] Siguiente: Agentes Dinamicos
La pagina siguiente explica como Jenkins lanza pods efimeros por build usando el plugin de Kubernetes — agentes que no existian antes del build y no existen despues.