GitHub Repo: https://github.com/toschneck/openshift-example-bakery-ci-pipeline
Stabile und skalierbare Continuous-Integration-Umgebungen sind seit jeher schwer aufzusetzen und zu pflegen. Besonders in Zeiten von Containern und Cloud-Native-Apps, wird der nächste Schritt hin zur voll-automatisierten Build-Pipeline eingefordert. Sowohl der Aufbau des automatisierten Deployments als auch die Ausführung von automatisierten Integration- und UI-Tests stellen die DevOps-Teams vor neue Hürden. Einen eleganten Ausweg bieten Container-basierte CI/CD-Umgebungen, die dynamisch zum Build-Zeitpunkt bereitgestellt werden. An diesen Punkt setzt die Open-Source-Container-Plattform "OpenShift" an. Durch den Infrastructure-as-Code-Ansatz wird sowohl der CI-Server als auch der komplette Build-Lifecycle vom Bau der Artefakte bis zum Testen der Anwendung in den Container-Cluster verschoben.
Der Talk zeigt auf wo die Unterschiede von OpenShift zur Kubernetes-API liegen, wie durch Jenkins-Build-Pipelines Artefakte gebaut, in Docker Images verpackt, getestet und deployed werden können. In mehreren Live-Demos wird aufgezeigt, wie mit geschickten Einsatz von Open-Source-Tools sowohl Server-APIs als auch grafische Web- und Rich-Client-Oberflächen in Container-Clustern als Black-Box getestet werden können. Eine abschließende, kritische Bewertung der gesammelten Erfahrungen, zeigt wo das Potenzial dieses Ansatz liegt, aber auch welche Fallstricke derzeit (noch) zu meistern sind.
4. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 4
Prozess Development ► QA Stage
OPS
Code
Build &
Unit-Test
Deploy in Dev
Container
Image
Container
Registry
POD
AUTOMATIC
MANUEL ODER AUTOMATIC
POD
Deploy in QA
► Test
5. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 5
Prozess QA ► Production Stage
OPS
Deploy in
Production
►Smoke-Test
Container
Image from QA Stage
MANUEL
15. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 15
Transformation to OpenShift
Ziele:
• Sourcecode der Apps nicht verändern
• Testcode nicht verändern
• Vollautomatisiert bis in die Produktion
• All-in-OpenShift (CI, Build, Test, Deployment)
• Jenkins v1 -> v2
21. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 21
Mission: Integrationstest
Automatisierte Schnittstellentests
System
Under Test
Verträge
Stammdaten
Dienstleister
Shipping
JM
S
XM
L
FTP
CSV
Webclient
Kunde
Agent /
Techniker
Mobile, PDA
Http
REST
Http
SOAP
22. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 22
Mission: Integrationstest
System
Under Test
Stammdaten
Dienstleister
JM
S
XM
L
FTP
CSV
Kunde
Agent /
Techniker
Http
REST
Http
SOAP
Automatisierte Schnittstellentests
23. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 23
Citrus Features
• Ready to use components
− Client & Server
• Message transports
− Http REST, SOAP, JMS, FTP, TCP/IP, Mail, RMI, SSH, ...
• Data formats
− XML, Json, PlainText, CSV, XSD, WSDL
• Test DSL
− XML & Java
30. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 30
Motivation
• Gründung February 2014 Open Source (Apache)
• Ziele:
− zwei Open Source Automation Tools „verheiraten“
− Verarbeitung der Ergebnisse an CI- u. Montioringsysteme
− Plattformunabhängigkeit (Linux/Windows/MacOS)
• Applikationstests mit der "Userbrille"
− Funktionalität
− Performance (Ladezeiten)
40. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 40
Review
• Jenkins wurde nicht desingend für Container/Pods
Plugins, Startup, Java Agents, lokales Filesystem
• Migration zu Jenkinsfiles
• Viele Wrapper-Scripte, um flexibel zu sein
• Verteiltes CI-Design erfordert ein Umdenken
• CI-Daten schwerer zugänglich
Logs, Screenshots, Artifakte
• Technologie-Mix
• Slave-Image intransparent -> do it your self
Base Image: github.com/openshift/jenkins/slave-base
• Verteilte Dokumentation
OpenShift, Kubernetes, Jenkins, Jenkins-Plugins, Docker, …
41. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 41
Review
• Skalierung übernimmt der Cluster
• "oc CLI client" anstatt Openshift-Jenkins-Plugin
► Pipeline modular test/entwickelbar
• Parametrisierte YAML Templates für OpenShift
• Infrastructur as Code
• Neue Stages sind einfach zu erstellen
• Deployment wird automatisch mitgetestet
• Secrets durch Cluster-Admins verwaltbar
• Builds Steuerbar von CLI und UI
• Erweiterbarkeit durch OpenSource
42. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 42
Alternative Ansätze
hasura/gitkube
⇨ Gitkube
• “git push” based Workflow on remote Git
• Simple: Kombination von bash Scripts
⇨ DroneCI / KubeCI
• Container first und einfache Konzept
• Nutzbar für gebaute Images
• Layered Build Concept für Pods (in Entwicklung)
⇨ Skaffold:
• Einfacher CI/CD Workflow
• 2 Stages: Local & Remote
⇨ JenkinsX
• Vordefinierter Workflow für CI/CD in Kubernetes
• kein neuer Jenkins -> Wrapper
• GitHub only
GoogleContainerTools/skaffold
kubeciiodrone/drone
jenkins-x/jx