SlideShare ist ein Scribd-Unternehmen logo
OpenShift-Build-Pipelines:
Build ► Test ► Run!
Tobias Schneck,
Testautomatisierung @ ConSol Software GmbH
+
Agenda
• OpenShift CI/CD Pipeline Konzept
• Build up a Build Pipelines!
• Stage I: CI-Build bis zum Artefakt
• Stage II: Automated Testing
− Citrus Integration Testing
− Sakuli E2E Testing
• Stage III: Artefakt Deployment
• Review
• Alternativen
• Links
OpenShift CI/CD Pipeline Konzept
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
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 5
Prozess QA ► Production Stage
OPS
Deploy in
Production
►Smoke-Test
Container
Image from QA Stage
MANUEL
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 6
OpenShift Core Components
CI / CD
Build Pipeline?
Jenkins Integration
+ Jenkins Template
+ OpenShift Jenkins Client Plugin
+ OpenShift Jenkins Sync Plugin
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 7
OpenShift Regular Builds (tradional)
Execution Node
OpenShift
Builder Pod
OpenShift
Master
Scheduler
OpenShift
Internal
Registry
Image Stream
(Project/Global)
Source-2-
Image Build
Docker
native Build
build.yml Dockerfile
Image Artifcat
Builder Image Base Image
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 8
OpenShift CI Pipeline Build
Execution Node
OpenShift
Builder Pod
OpenShift
Master
Scheduler
OpenShift
Internal
Registry
Image Stream
(Project/Global)
Image Artifcat
Jenkins Image
Maven Image
…
Jenkinsfile
Jenkins
Pipeline Build
OpenShift
Regular Build
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 9
OpenShift CI Pipeline Build
Execution Node
OpenShift
Builder Pod
OpenShift
Master
Scheduler
OpenShift
Internal
Registry
Image Stream
(Project/Global)
Image Artifcat
Jenkins Image
Maven Image
…
Jenkinsfile
Jenkins
Pipeline Build
OpenShift
Regular Build
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 10
● Uses OpenShift CLI: oc
○ Automatically authorized
○ Use complete CLI possibilities
○ Huge flexibility
● Uses OpenShift Jenkins Client Plugin
○ Based on Jenkins kubernetes-plugin
○ Groovy wrapper for OpenShift API
○ Enables dynamic slave images
- built-in images: base, maven, nodejs
- custom images
OpenShift Build & Deploy with Jenkinsfile
Jenkins Image
Jenkinsfile
Maven Image
Node Image
…
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 11
OpenShift Custom Jenkins Slave
Jenkinsfile
podTemplate(label: "citrus",
cloud: "openshift",
inheritFrom: "maven",
containers: [
containerTemplate(name: "jnlp",
image: "toschneck/citrus-jenkins-slave",
)
])
{
node('citrus') {
sh "echo execute oc citrus build"
checkout scm
sh "mvn install"
junit 'citrus-tests/target/citrus-reports/**/*.xml'
archiveArtifacts "citrus-tests/target/citrus-*/**/*"
}
}
Used by
citrusframework/citrus-docker-images PR #3
FROM consol/citrus:2.7.5
### sourced are copied from:
# https://github.com/openshift/jenkins/tree/master/slave-base
# https://github.com/openshift/jenkins/tree/master/slave-maven
# Copy the jenkins-slave entrypoint
ADD contrib/bin/* /usr/local/bin/
# Run the Jenkins JNLP client
ENTRYPOINT ["/usr/local/bin/run-jnlp-client"]
Build up a Build Pipeline!
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 13
Bakery App
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 14
Bakery App
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
Stage I: CI-Build bis zum Artefakt
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 17
CI Build ► Docker Image
build.pipeline.yml Jenkinsfile.dev
Maven Image
Dockerfiles
OpenShift
Regular Build
Docker Image
Artifact
DEMO
toschneck/openshift-example-bakery-ci-pipeline
Stage II: Automated Testing
Citrus Integration Testing
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
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
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
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 24
Usage: Middleware Integration / ESB
• Bittner&Krull KSS
> 300 Tests
• M-net Atlas ESB
> 800 Tests
• Telefonica o2 NMF, COM
> 150 Tests, > 500 Tests
• Vodafone UC
> 250 Tests
• Media Saturn ESB
> 200 Tests
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 25
more Citrus
• Citrus Admin UI
• Easy Testsuite Management
• Reporting
• Citrus Simulator
• Complex Messaging Workflow Simulation
• Predefined Interface Packages: WBCI, WITA
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 26
QA -> Citrus API Integration Tests
Citrus Slave Image
build.pipeline.yml Jenkinsfile.qa
DEMO
toschneck/openshift-example-bakery-ci-pipeline
E2E Testing
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 29
Sakuli End-to-End Use Cases
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)
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 31
Referenzen
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 32
Component 1: Sahi / Selenium
Web testing tool (sahi.co.in, seleniumhq.org)
method based DOM access:
_assertContainsText ("Logged in as: Sakuli", _div("user_field"));
_click(_span("Loaded Run Tabels"));
_assertExists(_table("cross_table_fixed"));
_assertExists(_cell(“testing allowed", _rightOf(_span("Name")), _under(_cell("Action")));
<table>
<tbody>
<tr>
<td>Alice</td>
<td>Bob</td>
</tr>
</tbody>
</table>
Webserverlocalhost:9999
{js}
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 33
Component 2: Sikuli
Visual automation tool (sikuli.org)
image identification, mouse & keyboard interaction:
screen.find("sap_ok").click();
screen.find("sap_ok").right(40).click().type("2223");
var bubble = new Region().waitForImage("bubble.png", 20);
bubble.dragAndDropTo(bubble.left(35)).highlight();
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 34
Vergleich: Sahi/Selenium & Sikuli
Sikuli
universell, kompl. Bildschirm
ressourcenintensiv(er)
braucht "freie Sicht"
Sahi / Selenium
beschränkt auf web,
(kein Flash, Java applets...)
schnell
effizient zu schreiben
(Controller + Recorder)
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 35
Mehrwert
• Erlaubt den Einsatz beider Tools zugleich
• Step-by-step code (JavaScript, Java)
• Automatische Screenshots im Fehlerfall
• Cloud-ready Docker-Images für Kubernets/OpenShift
• Sakuli UI für Pflege, Ausführung und Reporting (beta)
• "Forwarder"-Module:
− Monitoring (Gearman, Icinga, CheckMK)
− CI (Jenkins...)
− Datenbanken (MySQL/MariaDB, ...)
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 36
Monitoring Integration
Service Check (OMD - Thruk)
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 37
Sakuli End-2-End Testing Container
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 38
QA -> tested Docker Image
Docker Image
Artifcat
Citrus Slave Image SakuliImage
build.pipeline.yml Jenkinsfile.qa
DEMO
toschneck/openshift-example-bakery-ci-pipeline
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, …
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
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
OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 43
Links
toschneck/openshift-example-bakery-ci-pipeline
citrusframework/citrus www.citrusframework.org
ConSol/sakuli www.sakuli.org
@toschneck
@citrus_test
@sakuli_e2e
Fragen?
Vielen Dank!
ConSol
Consulting & Solutions Software GmbH
Franziskanerstr. 38
D-81669 München
Tel.: +49-89-45841-100
info@consol.de
www.consol.de
Twitter: @consol_de

Weitere ähnliche Inhalte

PDF
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Tobias Schneck
 
PDF
Was ist Docker ?
Ulrich Gerkmann-Bartels
 
PDF
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
QAware GmbH
 
PDF
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
QAware GmbH
 
PDF
Was gibt es Neues im Docker-Universum
Nicholas Dille
 
PDF
Per Anhalter zu Cloud-nativen API Gateways
QAware GmbH
 
PDF
Architektur und Automation als Enabler für DevOps
matfsw
 
PDF
WebLogic im Docker Container
enpit GmbH & Co. KG
 
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Tobias Schneck
 
Was ist Docker ?
Ulrich Gerkmann-Bartels
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
QAware GmbH
 
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
QAware GmbH
 
Was gibt es Neues im Docker-Universum
Nicholas Dille
 
Per Anhalter zu Cloud-nativen API Gateways
QAware GmbH
 
Architektur und Automation als Enabler für DevOps
matfsw
 
WebLogic im Docker Container
enpit GmbH & Co. KG
 

Was ist angesagt? (20)

PPTX
Continuous Delivery
Steffen Gebert
 
PDF
Docker Einführung @GPN15
m1no
 
PDF
Kaps - Es muss nicht immer Kubernetes sein
Stephan Kaps
 
PDF
Kaps - Continuous Deployment Roadmap
Stephan Kaps
 
PDF
DevOps - Mehr Geschwindigkeit auf der Schiene
Vorname Nachname
 
PDF
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
agilemethoden
 
PPTX
Tipps und Tricks im Umgang mit Docker
Nicholas Dille
 
PDF
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
QAware GmbH
 
PDF
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
inovex GmbH
 
PDF
Docker - Containervirtualisierung leichtgemacht
B1 Systems GmbH
 
PDF
Kubernetes ist so viel mehr als ein Container Orchestrierer
QAware GmbH
 
PDF
docker.io - Secure And Portable Containers Made Easy
inovex GmbH
 
PDF
Liebe Mobiliar, wie macht Ihr eigentlich DevOps?
Philipp Grossenbacher
 
PDF
Enterprise Cloud Native ist das neue Normal
QAware GmbH
 
PDF
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
inovex GmbH
 
PDF
Docker und Kubernetes Patterns & Anti-Patterns
QAware GmbH
 
PDF
WebLogic im Docker Container
Andreas Koop
 
PPTX
DevOps der Triple-E Klasse - Eclipse DemoCamp
Werner Keil
 
PDF
Die Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickeln
QAware GmbH
 
PDF
Gitlab
heiglandreas
 
Continuous Delivery
Steffen Gebert
 
Docker Einführung @GPN15
m1no
 
Kaps - Es muss nicht immer Kubernetes sein
Stephan Kaps
 
Kaps - Continuous Deployment Roadmap
Stephan Kaps
 
DevOps - Mehr Geschwindigkeit auf der Schiene
Vorname Nachname
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
agilemethoden
 
Tipps und Tricks im Umgang mit Docker
Nicholas Dille
 
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
QAware GmbH
 
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
inovex GmbH
 
Docker - Containervirtualisierung leichtgemacht
B1 Systems GmbH
 
Kubernetes ist so viel mehr als ein Container Orchestrierer
QAware GmbH
 
docker.io - Secure And Portable Containers Made Easy
inovex GmbH
 
Liebe Mobiliar, wie macht Ihr eigentlich DevOps?
Philipp Grossenbacher
 
Enterprise Cloud Native ist das neue Normal
QAware GmbH
 
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
inovex GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
QAware GmbH
 
WebLogic im Docker Container
Andreas Koop
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
Werner Keil
 
Die Leichtigkeit des Seins: Bindings für Eclipse SmartHome entwickeln
QAware GmbH
 
Gitlab
heiglandreas
 
Anzeige

Ähnlich wie OpenShift-Build-Pipelines: Build ► Test ► Run! (20)

PDF
OSDC 2013 | Continuous Integration in data centers by Michael Prokop
NETWAYS
 
PDF
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
Christian Mücke
 
PDF
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
Marc Müller
 
PDF
Docker und Kubernetes Patterns & Anti-Patterns
Josef Adersberger
 
PDF
DevOps: Automatisieren, was wir predigen
FotiosKaramitsos
 
PDF
Entwicklung mit Chef und Vagrant - PHPUG HH
Florian Holzhauer
 
PDF
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
CarolinaMatthies1
 
PDF
Softwarequalitätssicherung mit Continuous Integration Tools
GFU Cyrus AG
 
PDF
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
B1 Systems GmbH
 
PDF
Jenkins Acceleration
Patrick Paechnatz
 
PPTX
Ionic 2 - Hybridapps auf Steroiden
Hendrik Lösch
 
PPTX
Vagrant, Puppet, Docker für Entwickler und Architekten
OPITZ CONSULTING Deutschland
 
PDF
Ant Maven
Fabian Lange
 
PDF
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
GWAVA
 
PDF
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
LeanIX GmbH
 
PDF
Grundlagen puppet
inovex GmbH
 
PDF
Boost your APEX Deployment and Provisioning with Docker
Steven Grzbielok
 
PDF
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
inovex GmbH
 
PDF
Deployment pipeline mit maven, chef und jenkins
Bild GmbH & Co. KG
 
PDF
EntwicklerCamp 2014 - DOTS reloaded
René Winkelmeyer
 
OSDC 2013 | Continuous Integration in data centers by Michael Prokop
NETWAYS
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
Christian Mücke
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
Marc Müller
 
Docker und Kubernetes Patterns & Anti-Patterns
Josef Adersberger
 
DevOps: Automatisieren, was wir predigen
FotiosKaramitsos
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Florian Holzhauer
 
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
CarolinaMatthies1
 
Softwarequalitätssicherung mit Continuous Integration Tools
GFU Cyrus AG
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
B1 Systems GmbH
 
Jenkins Acceleration
Patrick Paechnatz
 
Ionic 2 - Hybridapps auf Steroiden
Hendrik Lösch
 
Vagrant, Puppet, Docker für Entwickler und Architekten
OPITZ CONSULTING Deutschland
 
Ant Maven
Fabian Lange
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
GWAVA
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
LeanIX GmbH
 
Grundlagen puppet
inovex GmbH
 
Boost your APEX Deployment and Provisioning with Docker
Steven Grzbielok
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
inovex GmbH
 
Deployment pipeline mit maven, chef und jenkins
Bild GmbH & Co. KG
 
EntwicklerCamp 2014 - DOTS reloaded
René Winkelmeyer
 
Anzeige

Mehr von Tobias Schneck (20)

PDF
Evaluating Global Load Balancing Options for Kubernetes in Practice (Kubermat...
Tobias Schneck
 
PDF
Kubernetes and AI - Beauty and the Beast - Tobias Schneck - DOAG 24 NUE - 20....
Tobias Schneck
 
PDF
Containers & AI - Beauty and the Beast !?! @MLCon - 27.6.2024
Tobias Schneck
 
PDF
Containers & AI - Beauty and the Beast!?!
Tobias Schneck
 
PDF
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
PDF
Kubernetes in the Manufacturing Line @KubeCon EU Valencia 2022
Tobias Schneck
 
PDF
$ kubectl hacking @DevOpsCon Berlin 2019
Tobias Schneck
 
PDF
Will ARM be the new Mainstream in our Data Centers? @Rejekts Paris 2024
Tobias Schneck
 
PDF
Kubermatic How to Migrate 100 Clusters from On-Prem to Google Cloud Without D...
Tobias Schneck
 
PDF
ClusterAPI Overview - Managing multi-cloud Kubernetes Clusters - k8s Meetup@v...
Tobias Schneck
 
PDF
Creating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes Meetup
Tobias Schneck
 
PDF
KubeCI - Cloud Native Continuous Delivery for Kubernetes
Tobias Schneck
 
PDF
Kubernetes Cluster API - managing the infrastructure of multi clusters (k8s ...
Tobias Schneck
 
PDF
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
Tobias Schneck
 
PDF
Creating Kubernetes multi clusters with ClusterAPI in the Hetzner Cloud
Tobias Schneck
 
PDF
OpenShift Build Pipelines @ Lightweight Java User Group Meetup
Tobias Schneck
 
PDF
OpenShift-Build-Pipelines: Build -> Test -> Run! @JavaForumStuttgart
Tobias Schneck
 
PDF
Kotlin for backend development (Hackaburg 2018 Regensburg)
Tobias Schneck
 
PDF
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
Tobias Schneck
 
PDF
Testing - Selenium? Rich-Clients? Containers?
Tobias Schneck
 
Evaluating Global Load Balancing Options for Kubernetes in Practice (Kubermat...
Tobias Schneck
 
Kubernetes and AI - Beauty and the Beast - Tobias Schneck - DOAG 24 NUE - 20....
Tobias Schneck
 
Containers & AI - Beauty and the Beast !?! @MLCon - 27.6.2024
Tobias Schneck
 
Containers & AI - Beauty and the Beast!?!
Tobias Schneck
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
Kubernetes in the Manufacturing Line @KubeCon EU Valencia 2022
Tobias Schneck
 
$ kubectl hacking @DevOpsCon Berlin 2019
Tobias Schneck
 
Will ARM be the new Mainstream in our Data Centers? @Rejekts Paris 2024
Tobias Schneck
 
Kubermatic How to Migrate 100 Clusters from On-Prem to Google Cloud Without D...
Tobias Schneck
 
ClusterAPI Overview - Managing multi-cloud Kubernetes Clusters - k8s Meetup@v...
Tobias Schneck
 
Creating Kubernetes multi clusters with ClusterAPI @ Stuttgart Kubernetes Meetup
Tobias Schneck
 
KubeCI - Cloud Native Continuous Delivery for Kubernetes
Tobias Schneck
 
Kubernetes Cluster API - managing the infrastructure of multi clusters (k8s ...
Tobias Schneck
 
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
Tobias Schneck
 
Creating Kubernetes multi clusters with ClusterAPI in the Hetzner Cloud
Tobias Schneck
 
OpenShift Build Pipelines @ Lightweight Java User Group Meetup
Tobias Schneck
 
OpenShift-Build-Pipelines: Build -> Test -> Run! @JavaForumStuttgart
Tobias Schneck
 
Kotlin for backend development (Hackaburg 2018 Regensburg)
Tobias Schneck
 
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
Tobias Schneck
 
Testing - Selenium? Rich-Clients? Containers?
Tobias Schneck
 

OpenShift-Build-Pipelines: Build ► Test ► Run!

  • 1. OpenShift-Build-Pipelines: Build ► Test ► Run! Tobias Schneck, Testautomatisierung @ ConSol Software GmbH
  • 2. + Agenda • OpenShift CI/CD Pipeline Konzept • Build up a Build Pipelines! • Stage I: CI-Build bis zum Artefakt • Stage II: Automated Testing − Citrus Integration Testing − Sakuli E2E Testing • Stage III: Artefakt Deployment • Review • Alternativen • Links
  • 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
  • 6. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 6 OpenShift Core Components CI / CD Build Pipeline? Jenkins Integration + Jenkins Template + OpenShift Jenkins Client Plugin + OpenShift Jenkins Sync Plugin
  • 7. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 7 OpenShift Regular Builds (tradional) Execution Node OpenShift Builder Pod OpenShift Master Scheduler OpenShift Internal Registry Image Stream (Project/Global) Source-2- Image Build Docker native Build build.yml Dockerfile Image Artifcat Builder Image Base Image
  • 8. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 8 OpenShift CI Pipeline Build Execution Node OpenShift Builder Pod OpenShift Master Scheduler OpenShift Internal Registry Image Stream (Project/Global) Image Artifcat Jenkins Image Maven Image … Jenkinsfile Jenkins Pipeline Build OpenShift Regular Build
  • 9. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 9 OpenShift CI Pipeline Build Execution Node OpenShift Builder Pod OpenShift Master Scheduler OpenShift Internal Registry Image Stream (Project/Global) Image Artifcat Jenkins Image Maven Image … Jenkinsfile Jenkins Pipeline Build OpenShift Regular Build
  • 10. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 10 ● Uses OpenShift CLI: oc ○ Automatically authorized ○ Use complete CLI possibilities ○ Huge flexibility ● Uses OpenShift Jenkins Client Plugin ○ Based on Jenkins kubernetes-plugin ○ Groovy wrapper for OpenShift API ○ Enables dynamic slave images - built-in images: base, maven, nodejs - custom images OpenShift Build & Deploy with Jenkinsfile Jenkins Image Jenkinsfile Maven Image Node Image …
  • 11. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 11 OpenShift Custom Jenkins Slave Jenkinsfile podTemplate(label: "citrus", cloud: "openshift", inheritFrom: "maven", containers: [ containerTemplate(name: "jnlp", image: "toschneck/citrus-jenkins-slave", ) ]) { node('citrus') { sh "echo execute oc citrus build" checkout scm sh "mvn install" junit 'citrus-tests/target/citrus-reports/**/*.xml' archiveArtifacts "citrus-tests/target/citrus-*/**/*" } } Used by citrusframework/citrus-docker-images PR #3 FROM consol/citrus:2.7.5 ### sourced are copied from: # https://github.com/openshift/jenkins/tree/master/slave-base # https://github.com/openshift/jenkins/tree/master/slave-maven # Copy the jenkins-slave entrypoint ADD contrib/bin/* /usr/local/bin/ # Run the Jenkins JNLP client ENTRYPOINT ["/usr/local/bin/run-jnlp-client"]
  • 12. Build up a Build Pipeline!
  • 13. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 13 Bakery App
  • 14. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 14 Bakery App
  • 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
  • 16. Stage I: CI-Build bis zum Artefakt
  • 17. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 17 CI Build ► Docker Image build.pipeline.yml Jenkinsfile.dev Maven Image Dockerfiles OpenShift Regular Build Docker Image Artifact
  • 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
  • 24. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 24 Usage: Middleware Integration / ESB • Bittner&Krull KSS > 300 Tests • M-net Atlas ESB > 800 Tests • Telefonica o2 NMF, COM > 150 Tests, > 500 Tests • Vodafone UC > 250 Tests • Media Saturn ESB > 200 Tests
  • 25. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 25 more Citrus • Citrus Admin UI • Easy Testsuite Management • Reporting • Citrus Simulator • Complex Messaging Workflow Simulation • Predefined Interface Packages: WBCI, WITA
  • 26. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 26 QA -> Citrus API Integration Tests Citrus Slave Image build.pipeline.yml Jenkinsfile.qa
  • 29. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 29 Sakuli End-to-End Use Cases
  • 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)
  • 31. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 31 Referenzen
  • 32. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 32 Component 1: Sahi / Selenium Web testing tool (sahi.co.in, seleniumhq.org) method based DOM access: _assertContainsText ("Logged in as: Sakuli", _div("user_field")); _click(_span("Loaded Run Tabels")); _assertExists(_table("cross_table_fixed")); _assertExists(_cell(“testing allowed", _rightOf(_span("Name")), _under(_cell("Action"))); <table> <tbody> <tr> <td>Alice</td> <td>Bob</td> </tr> </tbody> </table> Webserverlocalhost:9999 {js}
  • 33. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 33 Component 2: Sikuli Visual automation tool (sikuli.org) image identification, mouse & keyboard interaction: screen.find("sap_ok").click(); screen.find("sap_ok").right(40).click().type("2223"); var bubble = new Region().waitForImage("bubble.png", 20); bubble.dragAndDropTo(bubble.left(35)).highlight();
  • 34. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 34 Vergleich: Sahi/Selenium & Sikuli Sikuli universell, kompl. Bildschirm ressourcenintensiv(er) braucht "freie Sicht" Sahi / Selenium beschränkt auf web, (kein Flash, Java applets...) schnell effizient zu schreiben (Controller + Recorder)
  • 35. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 35 Mehrwert • Erlaubt den Einsatz beider Tools zugleich • Step-by-step code (JavaScript, Java) • Automatische Screenshots im Fehlerfall • Cloud-ready Docker-Images für Kubernets/OpenShift • Sakuli UI für Pflege, Ausführung und Reporting (beta) • "Forwarder"-Module: − Monitoring (Gearman, Icinga, CheckMK) − CI (Jenkins...) − Datenbanken (MySQL/MariaDB, ...)
  • 36. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 36 Monitoring Integration Service Check (OMD - Thruk)
  • 37. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 37 Sakuli End-2-End Testing Container
  • 38. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 38 QA -> tested Docker Image Docker Image Artifcat Citrus Slave Image SakuliImage build.pipeline.yml Jenkinsfile.qa
  • 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
  • 43. OpenShift-Build-Pipelines: Build -> Test -> Run! Folie 43 Links toschneck/openshift-example-bakery-ci-pipeline citrusframework/citrus www.citrusframework.org ConSol/sakuli www.sakuli.org @toschneck @citrus_test @sakuli_e2e
  • 46. ConSol Consulting & Solutions Software GmbH Franziskanerstr. 38 D-81669 München Tel.: +49-89-45841-100 [email protected] www.consol.de Twitter: @consol_de