Jenkins Acceleration

296 Aufrufe

Veröffentlicht am

Jenkins eine Retrospektive, Möglichkeiten zur horizontalen Skalierung unter Verwendung von Kubernetes sowie Parallelisierung von PHPUnit Tests.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
296
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
0
Aktionen
Geteilt
0
Downloads
12
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Jenkins Acceleration

  1. 1. 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
  2. 2. 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
  3. 3. 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
  4. 4. Jenkins, Einführung, … eine Retrospektive Jenkins, 
 Retrospektive Part 1, Intro-/Retrospektive https://elasticbox.com/blog/elasticbox-jenkins-plugin-easy-continuous-integration-setup/ 4
  5. 5. 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
  6. 6. 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
  7. 7. 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
  8. 8. Jenkins ❖ Operativer Syntax ❖ Agile Development ❖ Continuous Build ❖ Continuous Integration ❖ Continuous Delivery ❖ Continuous Deployment 8
  9. 9. 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
  10. 10. Jenkins 10
  11. 11. Jenkins 11
  12. 12. Jenkins 12
  13. 13. Jenkins 13
  14. 14. 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
  15. 15. Agenda, Jenkins 15
  16. 16. 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
  17. 17. Jenkins 17
  18. 18. Jenkins 18
  19. 19. 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
  20. 20. Jenkins 20
  21. 21. 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
  22. 22. Jenkins 22
  23. 23. Jenkins 23
  24. 24. Jenkins 24
  25. 25. 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
  26. 26. Jenkins, Scaling, … Kubernetes & Co Jenkins, 
 Kubernetes Scaling Part 2.1, Jenkins Scaling https://elasticbox.com/blog/elasticbox-jenkins-plugin-easy-continuous-integration-setup/ 26
  27. 27. 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
  28. 28. 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
  29. 29. 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
  30. 30. Jenkins, Kubernetes 30 base kubernetes service definitions inside master and minion node
  31. 31. Jenkins, Kubernetes 31 complete 3 node sample (1 master, 2 minions, 4 pods, 8 container, 2 services 1 replication controller)
  32. 32. 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
  33. 33. Jenkins, Kubernetes 33
  34. 34. Jenkins, Kubernetes 34
  35. 35. Jenkins, Kubernetes 35
  36. 36. Jenkins, Kubernetes 36
  37. 37. Jenkins, Kubernetes 37 Meta-Informationen öffentliche IP
  38. 38. Jenkins, Kubernetes 38
  39. 39. Jenkins, Kubernetes 39
  40. 40. Jenkins, Kubernetes 40
  41. 41. 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
  42. 42. Jenkins, Kubernetes 42
  43. 43. 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
  44. 44. Jenkins, Kubernetes 44
  45. 45. Jenkins, Scaling, … Kubernetes & Co Jenkins, 
 Kubernetes Scaling Part 2.1, Practical Example https://elasticbox.com/blog/elasticbox-jenkins-plugin-easy-continuous-integration-setup/ 45
  46. 46. 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
  47. 47. 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
  48. 48. Jenkins, Kubernetes II 48
  49. 49. Jenkins, Kubernetes II 49
  50. 50. Jenkins, Kubernetes II 50
  51. 51. Jenkins, Kubernetes II 51
  52. 52. Jenkins, Kubernetes II 52
  53. 53. 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
  54. 54. Jenkins, Kubernetes II 54
  55. 55. Jenkins, Kubernetes II 55
  56. 56. Jenkins, Kubernetes II 56
  57. 57. Jenkins, Kubernetes II 57
  58. 58. 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
  59. 59. 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
  60. 60. PHPUnit Parallels ❖ Herausforderung ❖ PHPUnit Laufzeit-Optimierungen ❖ PHPUnit Parallelisierung mit „liuggio/fastest“ ❖ PHPUnit Parallelisierung mit „paratest“ ❖ Fazit 60
  61. 61. 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
  62. 62. 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
  63. 63. 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
  64. 64. 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
  65. 65. PHPUnit Parallels 65
  66. 66. PHPUnit Parallels 66
  67. 67. PHPUnit Parallels 67
  68. 68. 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
  69. 69. 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
  70. 70. 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
  71. 71. 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
  72. 72. 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
  73. 73. Questions ? 73
  74. 74. Comments? https://joind.in/talk/470d0 74
  75. 75. 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

×