+ All Categories
Home > Technology > Jenkins Acceleration

Jenkins Acceleration

Date post: 15-Apr-2017
Category:
Upload: patrick-paechnatz
View: 243 times
Download: 0 times
Share this document with a friend
75
Jenkins Acceleration dunkelfrosch.com | twitter.com/dunkelfrosch | github.com/paterik v0.9.5, german https://en.wikipedia.org/wiki/Gratuity#/media/File:Waiters.jpg 1
Transcript
Page 1: Jenkins Acceleration

Jenkins Acceleration

dunkelfrosch.com | twitter.com/dunkelfrosch | github.com/paterik

v0.9.5, german

https://en.wikipedia.org/wiki/Gratuity#/media/File:Waiters.jpg

1

Page 2: Jenkins Acceleration

Introduction❖ who am I?

❖ PID: Patrick Paechnatz

❖ Task: Senior BS Developer

❖ Host: move:elevator, Dresden

❖ UpTime: 38y (~17y Developer)

❖ ENV: C++, C#, Erlang, Python, PHP

dunkelfrosch.com | twitter.com/dunkelfrosch | github.com/paterik

2

Page 3: Jenkins Acceleration

Agenda❖ Um was wird es in diesem Vortrag gehen?

❖ Jenkins , Retrospektive

❖ Jenkins Scaling , Jenkins im Kubernetes Cluster

❖ Jenkins Parallels , Tests in parallelen Tasks

❖ Fazit

3

Page 4: Jenkins Acceleration

Jenkins, Einführung, … eine Retrospektive

Jenkins, Retrospektive

Part 1, Intro-/Retrospektive

https://elasticbox.com/blog/elasticbox-jenkins-plugin-easy-continuous-integration-setup/

4

Page 5: Jenkins Acceleration

Jenkins❖ Was ist Jenkins?

❖ AD/CB/CI/CD/CD++ (operativer Syntax)

❖ Jenkins, Level 1 - Monolith

❖ Jenkins, Level 2 - Master/Slave

❖ Jenkins, Level 3 - Pipelining

❖ Jenkins, Skalierung (SysOps)

5

Page 6: Jenkins Acceleration

Jenkins❖ Was ist Jenkins?

❖ webbasiertes, erweiterbares Software-System zur kontinuierlichen Integration (CI), Delivery (CD) und Deployment (CD) von Anwendungen

❖ Seit 2011 Fork des von Kohsuke Kawaguchi bei SUN Microsystems entwickelten CI-Tools Hudson

❖ umfangreiche Plugin-Unterstützung und aktive OpenSource Community

6

Page 7: Jenkins Acceleration

Jenkins❖ Was ist Jenkins?

❖ Unterstützt eine Vielzahl der bekanntesten Build-Management-Tools wie Apache Ant, Maven und Gradle (sowie native Build-Prozessoren)

❖ Unterstützt die wichtigsten Versions-Verwaltungs- Systeme wie GIT, Mercurial, SVN …

❖ Unterstützt unterschiedlichste Compiler-Sprachen sowie eine Vielzahl an automatisierte Testverfahren

7

Page 8: Jenkins Acceleration

Jenkins❖ Operativer Syntax

❖ Agile Development

❖ Continuous Build

❖ Continuous Integration

❖ Continuous Delivery

❖ Continuous Deployment

8

Page 9: Jenkins Acceleration

Jenkins❖ Operativer Syntax

❖ Agile Development

❖ Ticketbasierende Feature-/Bug-/Hotfix- Branch- bezogene Entwicklung in agilen Sprints

❖ Lokale DevTool-Integration zur dynamischen/statischen Code-Analyse (CI-Build-Tools)

❖ Nutzung von Versions-Verwaltungssystemen

9

Page 10: Jenkins Acceleration

Jenkins

10

Page 11: Jenkins Acceleration

Jenkins

11

Page 12: Jenkins Acceleration

Jenkins

12

Page 13: Jenkins Acceleration

Jenkins

13

Page 14: Jenkins Acceleration

Jenkins❖ Jenkins, Level 1 - Monolith 💤

❖ Jenkins Server ohne dedizierte Master/Slave-Build-Prozessor-Konfiguration und einer Vielzahl von Compiler-/Skript-Versionen

❖ Umfangreiches Aufgabenspektrum, keine Trennung zwischen CI-/CD-/Metric-Builds

❖ Übernimmt auch Build-untypische Aufgaben … z.B.: Backup-Tasks und DB-Dump-Generatoren

14

Page 15: Jenkins Acceleration

Agenda, Jenkins

15

Page 16: Jenkins Acceleration

Jenkins❖ Jenkins, Level 2 - Master/Slave

❖ Jenkins Server mit dedizierten Master-/Slave- Build-Prozessoren-Konfiguration

❖ Auslagerung von lastintensiven Prozessen auf speziell präparierte Knoten

❖ Aufgaben-Trennung nach entsprechenden Anforderungen möglich

16

Page 17: Jenkins Acceleration

Jenkins

17

Page 18: Jenkins Acceleration

Jenkins

18

Page 19: Jenkins Acceleration

Jenkins❖ Jenkins, Level 3 - Pipelining

❖ Voraussetzung: Master-/Slave-Build-Prozessor- Setup des Jenkins-Servers

❖ Aufteilung unterschiedlicher Build-Schritte in kleinere Aufgaben und Verbindung dieser in Pipes → Voraussetzung für das CD-Build-Pattern.

❖ Wird als Plugin in Jenkins direkt unterstützt

19

Page 20: Jenkins Acceleration

Jenkins

20

Page 21: Jenkins Acceleration

Jenkins❖ Jenkins BlueOcean

❖ Weiterentwicklung des bisherigen Pipelining- Plugins als (fast) eigenständige Applikation mit Jenkins-Unterbau

❖ Verbesserte Visualisierung von Abhängigkeiten inklusive umfangreichem Task-/Dashboard Umbau

❖ Aktuell noch im Experimental State

21

Page 22: Jenkins Acceleration

Jenkins

22

Page 23: Jenkins Acceleration

Jenkins

23

Page 24: Jenkins Acceleration

Jenkins

24

Page 25: Jenkins Acceleration

Jenkins❖ Jenkins, Skalierung (SysOps)

❖ Vertikale Skalierung

❖ Nur durch Bereitstellung von zusätzlicher Hardware (neue Slaves) oder Erweiterung des Jenkins Masters möglich

❖ Horizontale Skalierung

❖ Cloud-Anbieter/lokales Container-Swarming

25

Page 26: Jenkins Acceleration

Jenkins, Scaling, … Kubernetes & Co

Jenkins, Kubernetes Scaling

Part 2.1, Jenkins Scaling

https://elasticbox.com/blog/elasticbox-jenkins-plugin-easy-continuous-integration-setup/

26

Page 27: Jenkins Acceleration

Jenkins, Kubernetes❖ Anforderung

❖ Was ist Kubernetes

❖ Einrichtung des Jenkins-CI Clusters

❖ Aufbau Jenkins Master/Slave Docker-Images

❖ Aufbau Testprojekt Jenkins Master/Slave CI

❖ Fazit?

27

Page 28: Jenkins Acceleration

Jenkins, Kubernetes❖ Anforderung

❖ Automatische Erzeugung von dedizierten JNLP Slaves für jeden gestarteten Build-Prozessor

❖ Einfache, Docker-Image-basierende Jenkins-Master und Slave-Definition.

❖ Einfache und effiziente Verwaltung des betreffenden Jenkins-Clusters? → Kubernetes

28

Page 29: Jenkins Acceleration

Jenkins, Kubernetes❖ Was ist Kubernetes

❖ Google’s OpenSource Container-Orchestrierung für mittlere und größere Cloud-basierende Applikationen

❖ Fortschrittliches Konzept zur Verwaltung, Provisionierung, Skalierung von „containerisierten“ Anwendungen in Alternative zu Docker-Swarm

❖ Umfangreiche (und leicht verständliche) API und beschreibende Konfigurations-Schicht

29

Page 30: Jenkins Acceleration

Jenkins, Kubernetes

30

base kubernetes service definitions inside master and minion node

Page 31: Jenkins Acceleration

Jenkins, Kubernetes

31

complete 3 node sample (1 master, 2 minions, 4 pods, 8 container, 2 services 1 replication controller)

Page 32: Jenkins Acceleration

Jenkins, Kubernetes❖ Einrichtung des Jenkins-CI Clusters

❖ Erstellung eines GCloud-Accounts, cloud.google.com

❖ Erstellung eines GCloud-Projekts

❖ Installation der CLI Tools (gcloud, kubectl)

❖ Authentifizierung des GCloud-Accounts und OAuth2-Aktivierung der zugehörigen CLI-Tools

32

Page 33: Jenkins Acceleration

Jenkins, Kubernetes

33

Page 34: Jenkins Acceleration

Jenkins, Kubernetes

34

Page 35: Jenkins Acceleration

Jenkins, Kubernetes

35

Page 36: Jenkins Acceleration

Jenkins, Kubernetes

36

Page 37: Jenkins Acceleration

Jenkins, Kubernetes

37

Meta-Informationen

öffentliche IP

Page 38: Jenkins Acceleration

Jenkins, Kubernetes

38

Page 39: Jenkins Acceleration

Jenkins, Kubernetes

39

Page 40: Jenkins Acceleration

Jenkins, Kubernetes

40

Page 41: Jenkins Acceleration

Jenkins, Kubernetes❖ Aufbau Jenkins Master/Slave Docker-Images

❖ Eine Voraussetzung für gewähltes Kubernetes Deployment und Einsatz des Jenkins-Kubernetes Plugin sind vordefinierte Docker-Images

❖ Verwendung der aktuelle Jenkins-Version 2.7.4 sowie des JNLP Kubernetes Plugin für den Jenkins-Master

❖ einige weitere kleinere Optimierungen…

41

Page 42: Jenkins Acceleration

Jenkins, Kubernetes

42

Page 43: Jenkins Acceleration

Jenkins, Kubernetes❖ Aufbau Jenkins Master/Slave Docker-Images

❖ Jenkins-Slave-JNLP Build-Prozessor kann für jede beliebige Anforderung als dediziertes Image bereitgestellt werden (Go/Rust/Python/RoR …)

❖ Zwingend notwendig: das Jenkins-Slave-JNLP Build-Prozessor Image erbt direkt oder indirekt vom [ jenkinsci/jnlp-slave ] Basis-Image

43

Page 44: Jenkins Acceleration

Jenkins, Kubernetes

44

Page 45: Jenkins Acceleration

Jenkins, Scaling, … Kubernetes & Co

Jenkins, Kubernetes Scaling

Part 2.1, Practical Example

https://elasticbox.com/blog/elasticbox-jenkins-plugin-easy-continuous-integration-setup/

45

Page 46: Jenkins Acceleration

Jenkins, Kubernetes II❖ Aufbau Testprojekt Jenkins Master/Slave CI

❖ Unser Beispiel-/Testprojekt wird einige Symfony- Versionen sowie Sylius-Shop-Projekt über einen Build-/CI-Prozess prüfen

46

Page 47: Jenkins Acceleration

Jenkins, Kubernetes II❖ Aufbau Testprojekt Jenkins Master/Slave CI

❖ Schritt 1: Einrichtung des Jenkins-Masters

❖ Basis-Konfiguration (1 Step)

❖ Kubernetes-API Credentials (2 Steps)

❖ Kubernetes-Plugin Konfiguration (4 Steps)

47

Page 48: Jenkins Acceleration

Jenkins, Kubernetes II

48

Page 49: Jenkins Acceleration

Jenkins, Kubernetes II

49

Page 50: Jenkins Acceleration

Jenkins, Kubernetes II

50

Page 51: Jenkins Acceleration

Jenkins, Kubernetes II

51

Page 52: Jenkins Acceleration

Jenkins, Kubernetes II

52

Page 53: Jenkins Acceleration

Jenkins, Kubernetes II❖ Aufbau Testprojekt Jenkins Master/Slave CI

❖ Schritt 2: Einrichtung der Test-Jobs

❖ CB/CI Jobs für Symfony 2.7.n, 2.8.n, 3.1.n

❖ CB/CI Job für Sylius Shop 0.19.0

❖ Laufzeit-Tests und Überwachung durch lokalen Kubernetes-Proxy und dem kubectl CLI-Tool

53

Page 54: Jenkins Acceleration

Jenkins, Kubernetes II

54

Page 55: Jenkins Acceleration

Jenkins, Kubernetes II

55

Page 56: Jenkins Acceleration

Jenkins, Kubernetes II

56

Page 57: Jenkins Acceleration

Jenkins, Kubernetes II

57

Page 58: Jenkins Acceleration

Jenkins, Kubernetes II❖ Fazit

❖ Der Slide-Beispiel-Cluster läuft auf cloud.google.com In einem deutschen Rechenzentrum - die Daten sind also wirklich sicher !!! ;)

❖ IRL sollte man auf eigene Hardware vertrauen - der Kubernetes Cluster kann ohne Probleme auf eigenen bare metals ausgerollt/einfach konfiguriert werden

❖ Jenkins Kubernetes Cluster hilft gesund zu skalieren

58

Page 59: Jenkins Acceleration

Jenkins, Parallele Tests … speedUp our test runtime

Jenkins, PHPUnit Parallels

Part 3, Parallele Tests

https://elasticbox.com/blog/elasticbox-jenkins-plugin-easy-continuous-integration-setup/

59

Page 60: Jenkins Acceleration

PHPUnit Parallels❖ Herausforderung

❖ PHPUnit Laufzeit-Optimierungen

❖ PHPUnit Parallelisierung mit „liuggio/fastest“

❖ PHPUnit Parallelisierung mit „paratest“

❖ Fazit

60

Page 61: Jenkins Acceleration

PHPUnit Parallels❖ Herausforderung

❖ Vielzahl von komplexen Business-Applikationen in PHP (> 60.000 LOC)

❖ möglichst hohe Testabdeckung in jedem Projekt

❖ Vielzahl an Tests (> 500)

❖ „ungesundes“ Verteilungs-Verhältnis zwischen Unit-/Integrations- und Funktionalen Tests

61

Page 62: Jenkins Acceleration

PHPUnit Parallels❖ Herausforderung

❖ Hauptproblem: PHPUnit nutzt für alle Operationen nur einen Kern in einem CLI Prozess!

❖ Anwendung des „Fail-Local-First“ Prinzip (lokales CB/CI vor PR)

❖ Nervige PHPUnit Wartezeiten vor dem Jenkins-Build

❖ Lange CI-Builds und Warteschlangen auf dem Jenkins

62

Page 63: Jenkins Acceleration

PHPUnit Parallels❖ PHPUnit Laufzeit-Optimierungen

❖ Nutzung von SQLite-InMemory TestDB’s mit funktionalen Wrappern für einige MySQL-Methoden

❖ Einführung von PHP 7 auf dem Jenkins und lokalen Entwicklungs-Umgebungen.

❖ Symfony Tweaks (Profiler-BL, Container-Build Hack)

❖ Strukturelle Aufräumarbeiten auf dem Jenkins

63

Page 64: Jenkins Acceleration

PHPUnit Parallels❖ PHPUnit Parallelisierung mit „liuggio/fastest“

❖ Was ist liuggio/fastest?

❖ Tool zur CLI Parallelisierung im Schwerpunkt PHPUnit-Warp unter Symfony

❖ Unterstützt verschiedene Storage-Adapter (DBAL, MongoDb, SQLite)

❖ Behat 2 Unterstützung (als Extension)

64

Page 65: Jenkins Acceleration

PHPUnit Parallels

65

Page 66: Jenkins Acceleration

PHPUnit Parallels

66

Page 67: Jenkins Acceleration

PHPUnit Parallels

67

Page 68: Jenkins Acceleration

PHPUnit Parallels❖ PHPUnit Parallelisierung mit „liuggio/fastest“

❖ Zusammenfassung

❖ Sehr schnelle Testausführung mit Möglichkeit zur gezielten Angabe der zu verwendenden Kerne je nach Test-Verzeichnis (findPipe)

❖ Unterstützung von DB-Splits (ORM/ODM) für Fixture-basierende Tests (→functional tests)

68

Page 69: Jenkins Acceleration

PHPUnit Parallels❖ PHPUnit Parallelisierung mit „brianium/paratest“

❖ Was ist brianium/paratest?

❖ Plugin für PHPUnit zur parallelen Ausführung von Laufzeit-Tests

❖ (ebenfalls) Unterstützung für DB-Splits (SQLite)

❖ Automatische PHPUnit XML-Config Auswertung

❖ bekanntestes Tool zur Test-Parallelisierung

69

Page 70: Jenkins Acceleration

PHPUnit Parallels❖ PHPUnit Parallelisierung mit „brianium/paratest“

❖ Zusammenfassung

❖ Schnelle Testausführung unter Anwendung des bekannten PHPUnit CLI Syntax

❖ Echtes PHPUnit-Plugin mit Anbindung an die PHPUnit XML-Projekt-Konfiguration.

❖ Einfache Installation und schnelle Test-Integration

70

Page 71: Jenkins Acceleration

PHPUnit Parallels❖ Fazit, positive Aspekte

❖ Verwendung von Parallelisierung in Test-Abläufen unter Verwendung von PHPUnit/BEHAT sparen wertvolle Entwicklung- und Code-Integrations-Zeit

❖ Können in zeitkritischen Prozess-Entscheidungen von Vorteil sein (testabgedeckte Hotfix-Deployments)

❖ Unterstützen Entwickler bei Anwendung der „Fail-Local-First“ Regel (häufigere lokale Testausführung)

71

Page 72: Jenkins Acceleration

PHPUnit Parallels❖ Fazit, negative Aspekte

❖ Initialer Konfigurations-/Integrationsaufwand im jeweiligen Projekt und dem betreffenden Build-Server

❖ Prozesse mit XDebug-Profiler Relevanz unterliegen Einschränkungen in der Parallelisierung (bspw. Generierung der CodeCoverage-Metric)

72

Page 73: Jenkins Acceleration

Questions ?

73

Page 74: Jenkins Acceleration

Comments?

https://joind.in/talk/470d0

74

Page 75: Jenkins Acceleration

Thank You!❖ References und Links

❖ Jenkins, Jenkins Scaling, Deployment Pattern ▶︎ http://jenkins.io | https://github.com/carlossg/jenkins-kubernetes-plugin ▶︎ https://cloud.google.com/solutions/jenkins-on-container-engine ▶︎ http://www.rightscale.com/blog/cloud-management-best-practices/dynamic-scaling-jenkins-cloud ▶︎ https://puppet.com/blog/continuous-delivery-vs-continuous-deployment-what-s-diff ▶︎ https://cloud.google.com/solutions/jenkins-on-container-engine

❖ Kubernetes▶︎ http://kubernetes.io | http://kubernetes.io/docs/user-guide/kubectl-cheatsheet ▶︎ https://www.infoq.com/articles/scaling-docker-with-kubernetes

❖ PHPUnit Test Parallelization (Github) ▶︎ https://github.com/liuggio/fastest | https://github.com/brianium/paratest

❖ Slide Projectfiles (Github) ▶︎ https://github.com/dunkelfrosch/docker-jenkins-php ▶︎ https://github.com/dunkelfrosch/docker-jenkins-slave-php-7

75


Recommended