Einen Kubernetes-Cluster zu haben, ist die halbe Miete. Die andere Hälfte besteht darin, Code hineinzubekommen – zuverlässig, schnell und automatisch. Wir teilen unsere CI/CD-Pipeline mit Jenkins, die in den letzten Monaten eine dramatische Entwicklung durchlaufen hat.
Von Jenkins Freestyle zu Pipeline-as-Code¶
Unsere alten Jenkins-Jobs waren Freestyle-Projekte – per Klick konfiguriert in der GUI. Unzuverlässig, nicht reproduzierbar. Jenkins Pipeline hat das geändert: Der gesamte Build-Prozess ist ein Groovy-Skript in einem Jenkinsfile, versioniert direkt im Projekt-Repository.
Jenkins auf Kubernetes¶
Jenkins selbst läuft im Kubernetes-Cluster. Das Kubernetes-Plugin für Jenkins startet dynamisch Build-Agents als Pods – jeder Build bekommt einen sauberen, isolierten Agent. Keine “verunreinigten” Build-Umgebungen.
Wenn nichts zu bauen ist, läuft nur der Jenkins Master. Keine Kosten für untätige Agents. Bei Spitzenlast skaliert der Cluster automatisch hoch.
Unser Standard-Jenkinsfile¶
pipeline {
agent {
kubernetes {
yaml |-
apiVersion: v1
kind: Pod
spec:
containers:
- name: maven
image: maven:3.5-jdk-8
- name: docker
image: docker:17.06
}
}
stages {
stage('Build') {
steps { container('maven') { sh 'mvn clean package' } }
}
stage('Docker Build') {
steps {
container('docker') {
sh "docker build -t registry.core.cz/app:${BUILD_NUMBER} ."
sh "docker push registry.core.cz/app:${BUILD_NUMBER}"
}
}
}
stage('Deploy') {
steps {
sh "helm upgrade --install app ./chart --set image.tag=${BUILD_NUMBER}"
}
}
}
}
Deployment-Strategie¶
Für Staging: automatisches Deployment nach jedem erfolgreichen Build. Für Produktion: ein manueller Freigabeschritt in der Jenkins Pipeline. Helm upgrade --install gewährleistet ein Rolling Update ohne Downtime.
Rollback ist einfach: helm rollback release-name revision-number. Helm pflegt eine Revisionshistorie.
Was wir verbessern wollen¶
- Canary Deployments – derzeit nur Rolling Updates
- Automatisierte Smoke-Tests nach dem Deployment
- Image Vulnerability Scanning in der Pipeline
- GitOps-Ansatz – Deployment ausgelöst durch Änderungen in Git
CI/CD ist der Schlüssel zu agilem Kubernetes¶
Kubernetes ohne automatisiertes CI/CD ist wie ein Rennwagen ohne Treibstoff. Jenkins mit Pipeline-as-Code und dem Kubernetes-Plugin ermöglicht es uns, täglich Dutzende von Services mit Zuversicht zu deployen.
Brauchen Sie Hilfe bei der Implementierung?
Unsere Experten helfen Ihnen bei Design, Implementierung und Betrieb. Von der Architektur bis zur Produktion.
Kontaktieren Sie uns