Post on 22-May-2020
Jenkins Pipelines oder:
Wie knechte ich meine Hardware.
B E V O R W I R S T A R T E N …
› Einführung Jenkins
› Jenkins Pipeline
› Shared Libraries
A G E N D A
W E R W I R S I N D
› Consulting- und Softwarepartner
› Unternehmergeführt
› 1996 gegründet
› 85 Mitarbeiter
› 1 Team aus Spezialisten
›
v i r t u a l 7 G m b H
8 5 E X P E R T E N – 4 S T A N D O R T E – 1 T E A M
K A R L S R U H E
55 Mitarbeiter
Consulting Development Operations & SupportSalesMarketingFinanceHuman Resources
M Ü N C H E N
15 Mitarbeiter
Consulting Development Sales
T I M I S O A R A
15 Mitarbeiter
Consulting Development Human Resources
P F Ä F F I K O N
Consulting Development Sales
|
U N S E R P O R T F O L I O
C O N T I N U O U S I N T E G R A T I O N
DeadlineKick-Off
Integration
Commits
C O N T I N U O U S I N T E G R A T I O N
C O N T I N U O U S I N T E G R A T I O N
C O N T I N U O U S I N T E G R A T I O N
C O N T I N U O U S D E L I V E R Y
C O N T I N U O U S D E P L O Y M E N T
|
C O N T I N U O U S I N T E G R A T I O N & D E L I V E R Y
o Integrationsrisiken minimieren
o Frühe Feedbackzyklen
o Chaos-Release-Tage vermeiden
o Last-Minute Fixes reduzieren
o Erhöhung Transparenz
|
J E N K I N S - A U F G A B E N
o Überwachung des Repositories
o Checkout neuester Änderungen
o Starten von Unit-Tests
o Starten von Integrations-Tests
o Bauen eines Deployables
o Benachrichtigung des Teams über den Build-Status
J E N K I N S . I O E C O S Y S T E M
Blue Ocean
Jenkins Remoting
Jenkins X
Jenkins Core
♥ J E N K I N S
|
K L A S S I S C H E K O N F I G U R A T I O N
o GUI-Driven
o Fehleranfällig
o Updates vieler Jobs ist aufwändig
o Keine echte Versionsverwaltung
o Keine Tests
o Wiederverwendung nur schwer möglich
J E N K I N S P I P E L I N E
|
J E N K I N S P I P E L I N E
o Build as Code / „Pipeline as Code“
o Fokus auf Continuous Delivery
o Tests möglich
o Reviews möglich
o Neue GUI
o Voraussetzung: Jenkins Version > 2
|
P I P E L I N E F E A T U R E S
o Pipeline als Code
o Kann jederzeit angehalten und wieder gestartet werden
o Überlebt auch ungeplante Neustarts
o Unterstützung von Loops, parallele Ausführung und fork / join
o Jenkins-Plugins stellen Pipeline Erweiterungen bereit
J E N K I N S F I L E
pipeline {agent anystages {stage('build') {steps {sh './mvnw clean install'
}}stage('deploy') {steps {sh './mvnw deploy'
}}
}}
|
J E N K I N S F I L E
o Beschreibt den Build und Deployment Prozess
o Single Source of Truth
o Zwei Syntaxen
o Declarative Pipeline
o Scripted Pipeline
D E C L A R A T I V E P I P E L I N E
pipeline {agent anystages {stage('build') {steps {sh './mvnw clean install'
}}stage('deploy') {steps {sh './mvnw deploy'
}}
}}
• Einfache, strikte Syntax• Schnell zu lernen• Einfache Anwendungsfälle
S C R I P T E D P I P E L I N E
node {stage('build') {steps {sh './mvnw clean install'
}}stage('deploy') {steps {if (currentBuild.number % 2) {sh './mvnw deploy'’
}}
}}
• Groovy (like) Syntax• Große Flexibilität• Für komplexe Szenarien geeignet
S Y N T A X V E R G L E I C H
pipeline {agent anystages {stage('build') {steps {sh './mvnw clean install'
}}stage('deploy') {steps {sh './mvnw deploy'
}}
}}
Declarative Pipeline
node {stage('build') {steps {sh './mvnw clean install'
}}stage('deploy') {steps {if (currentBuild.number % 2) {sh './mvnw deploy'’
}}
}}
Scripted Pipeline
|
S H A R E D L I B R A R I E S
o Erweitert die Pipeline um eigene Funktionalitäten
o Ermöglicht Wiederverwendung über mehrere Projekte
o Global verfügbar oder pro Pipeline
o Versioniert
o Testbar
M A ß G E S C H N E I D E R T E S T E P S
pipeline {agent anystages {stage('build') {steps {sh './mvnw clean install'
}}stage('deploy') {steps {sh './mvnw deploy'
}}
}}
M A ß G E S C H N E I D E R T E S T E P S
def call(String arguments) {sh "./mvnw -B ${arguments}"
}
Shared-library/vars/mvnw.groovy
M A ß G E S C H N E I D E R T E S T E P S
@Library 'my-amazing-library'pipeline {agent anystages {stage('build') {steps {mvnw 'clean install'
}}stage('deploy') {steps {
mvnw 'deploy'}
}}
}
M A ß G E S C H N E I D E R T E S T E P S
pipeline {agent anystages {stage('build') {steps {sh './mvnw clean install'
}}stage('deploy') {steps {sh './mvnw deploy'
}}
}}
@Library 'my-amazing-library'pipeline {agent anystages {stage('build') {steps {mvnw 'clean install'
}}stage('deploy') {steps {
mvnw 'deploy'}
}}
}
Ohne eigenen Step Mit eigenem Step
Ä H N L I C H E P R O J E K T E
@Library 'my-amazing-library'pipeline {agent anystages {stage('build') {steps {mvnw 'clean install'
}}stage('deploy') {steps {
mvnw 'deploy'}
}}
}
serviceA/jenkinsfile serviceB/jenkinsfile serviceC/jenkinsfile
@Library 'my-amazing-library'pipeline {agent anystages {stage('build') {steps {mvnw 'clean install'
}}stage('deploy') {steps {
mvnw 'deploy'}
}}
}
@Library 'my-amazing-library'pipeline {agent anystages {stage('build') {steps {mvnw 'clean install'
}}stage('deploy') {steps {
mvnw 'deploy'}
}}
}
shared-library/vars/buildService.groovy
Ä H N L I C H E P R O J E K T E
def call() {pipeline {agent anystages {stage('build') {steps {mvnw 'clean install‘
}}stage('deploy') {steps {mvnw 'deploy‘
}}
}}
}
shared-library/vars/buildService.groovy
Ä H N L I C H E P R O J E K T E
@Library 'my-amazing-library‘buildService()
serviceA/jenkinsfile serviceB/jenkinsfile serviceC/jenkinsfile
@Library 'my-amazing-library'buildService()
@Library 'my-amazing-library'buildService()
D O N E !
|
P I P E L I N E T E S T S
o Unit-Tests mit JenkinsPipelineUnit
o Mock der Laufzeitumgebung
o Assertations basierend auf dem Call-Stack
o Mock von Jenkins-Kommandos
o Unterstützt Shared Libraries
o Intergrations-Tests mit Jenkins Test Harness
o Startet echten Jenkins
o Baut die Pipeline
o Zeigt Probleme mit Serialisierung, CPS und Script-Security auf
o Linting des Jenkinsfiles mit dem Command Line Linter
D E M O – S H A R E D P I P E L I N E T E S T S
“Anything that can go wrong will go wrong” -John W. Campbell Jr.
|
T I P P S
o Starte mit Tests
o Static-Code-Analyse mit Codenarc
o Favorisiere declarative Pipelines
o Automatisch konvertieren mit Auto-Convert Freestyle to Pipeline-Plugin
o Shared Libraries mit Jenkins Pipeline Shared Library Gradle Plugin entwickeln
|
F R A G E N
A N T W O R T E N
DANKE.
ORACLE. EXPERTIS E . PASSION.