Continuous Integration im Rechenzentrum
Transcript of Continuous Integration im Rechenzentrum
![Page 1: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/1.jpg)
Continuous Integration im Rechenzentrum
Michael Prokop
![Page 2: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/2.jpg)
Roadmap
• Begriffsklärung + Gründe für CI• CI-Server Jenkins• CI mit Debian-Paketen• Weitere Beispiele für Einsatz von
CI/CD im Rechenzentrum• Best Practices
![Page 3: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/3.jpg)
Begriffsklärung
• Continuous Integration
• Continuous Deployment
• Continuous Delivery
![Page 4: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/4.jpg)
Warum CI?
![Page 5: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/5.jpg)
Unabhängigkeit
Quelle: http://decarabia.soup.io/post/241926962/Image
![Page 6: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/6.jpg)
Skalierbarkeit
Quelle: http://up.arab-x.com/May12/M9b65492.jpg
![Page 7: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/7.jpg)
Reproduzierbar
Quelle: http://www.flickr.com/photos/route79/13120127/
![Page 9: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/9.jpg)
Versionskontrolle
• Nur was unter Versionskontrolle ist zählt
• Distributed VCS ftw!
![Page 10: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/10.jpg)
% makealleine ist NICHT genug
Quelle: http://xkcd.com/303/
![Page 11: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/11.jpg)
Jenkinsdas “Wordpress der CI-Server”
![Page 12: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/12.jpg)
Jenkins
• Open Source (MIT Lizenz)
• wöchentliche && LTS-Releases
• >60k Installationen (Stand Ende März)
• >700 Plugins (Stand Mitte April)
• Community
![Page 13: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/13.jpg)
FAQ #1 - Java?!
• ja, RAM hilft
• nein, man braucht keinen Javacode anzugreifen
• nein, unterstützt nicht nur Java-Projekte
![Page 14: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/14.jpg)
FAQ #2: Blau?! Gelb?!
• http://jenkins-ci.org/content/why-does-jenkins-have-blue-balls
![Page 15: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/15.jpg)
Getting Started% curl -L -o jenkins.war \http://mirrors.jenkins-ci.org/war/latest/jenkins.war
% java -jar jenkins.war% $BROWSER http://0.0.0.0:8080
Disclaimer: bitte die (Upstream-)Software-Pakete nutzen
![Page 16: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/16.jpg)
![Page 17: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/17.jpg)
![Page 18: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/18.jpg)
![Page 19: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/19.jpg)
![Page 20: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/20.jpg)
![Page 21: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/21.jpg)
![Page 22: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/22.jpg)
![Page 23: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/23.jpg)
Bestandteile einer Buildpipeline, u.a.
• Build Artifacts (*.jar, *.deb, *.rpm,...)
• Stages (development, testing, production,...)
• Q/A-Tests (unit/component/system/...)
• Notifications
![Page 24: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/24.jpg)
https://www.youtube.com/watch?v=1EGk2rvZe8A
![Page 25: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/25.jpg)
CI mit Debian-Paketenjenkins-debian-glue
![Page 26: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/26.jpg)
Debian Packaging
• dpkg [v3] + debhelper [v8]
• dh-make, dh-make-perl, dh-make-php, dh-make-ruby/gem2deb
• fpm (https://github.com/jordansissel/fpm)
• {cvs,svn,git,...}-buildpackage
• cowbuilder/pbuilder/sbuild/...
• reprepro/dak/freight/...
![Page 27: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/27.jpg)
jenkins-debian-glue.org
• Debian-Pakete kontrolliert bauen
• Auch für Nicht-Debian-Entwickler benutzbar (reprepro/freight/cowbuilder/...)
• Unterstützt Subversion + Git ootb
• Vorwiegend Shell, ein wenig Ruby/Python/Perl (je nach Einsatz) -> leicht adaptierbar
![Page 28: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/28.jpg)
jenkins-debian-glueim Praxiseinsatz
• Grml (http://jenkins.grml.org/)
• hostet u.a. dpkg, FAI, initramfs-tools
• PostgreSQL (https://wiki.postgresl.org/wiki/Apt)
• Icinga (http://icingabuild.dus.dg-i.net)
• LLVM Debian/Ubuntu (http://llvm.org/apt/)
![Page 29: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/29.jpg)
Source-Pakete
• (Upstream-)Source (orig.tar.gz)
• Debian-Änderungen (debian.tar.gz) [opt.]
• Control-Datei (.dsc)
Wichtig: nur einmal pro Paket Erstellen
![Page 30: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/30.jpg)
Binary-Pakete
• *_all.deb/*_amd64.deb/*_i386.deb
• *.changes, *.dsc, *.tar.gz
Wichtig: pro Architektur einmal Bauen (Ausnahme für “Architecture: all”)
![Page 31: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/31.jpg)
Repository
• reprepro und freight Handling ootb
• http://mirrorer.alioth.debian.org/
• https://github.com/rcrowley/freight/
• standardmässig ein Repository pro Projekt
• sog. Release-Repository + trunk-release-Repository einfach aktivierbar
-> kein manuelles Setup/Management notwendig
![Page 32: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/32.jpg)
Q/A-Tests
• lintian: Paketqualität
• autopkgtest: Paket-Tests in definierter Umgebung
• piuparts: Install/Deinstall/Upgrade-Tests
• perlcritics/checkbashism/...: Code-Policies
Resultat als TAP/jUnit/...-Report in Jenkins
![Page 33: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/33.jpg)
jenkins-debian-glue
• *-source -> Source-Paket
• *-binaries -> Binary-Paket(e)
• *-repos -> Repository-Handling (optional)
• *-piuparts -> Install/Deinstall/Upgrade-Testing (optional)
![Page 34: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/34.jpg)
Bsp. für Dependencies
![Page 35: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/35.jpg)
Bsp. für Dependencies
![Page 36: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/36.jpg)
Deployment von j-d-g
• siehe http://jenkins-debian-glue.org/
• in <15 Minuten (auch auf EC2) mit minimalem Aufwand testbar
![Page 37: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/37.jpg)
Default Deployment von jenkins-debian-glue
![Page 38: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/38.jpg)
Weitere Einsatzbeispiele im Rechenzentrum
Puppet, Custom ISOs, Dokumentation,...
![Page 39: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/39.jpg)
puppet-lint
• https://github.com/rodjek/puppet-lint
• Integration in VCS pre-commit-Hook (z.B. auch gemeinsam mit Syntax-Check)
• https://gitorious.org/puppet-helpers/puppet-helpers
![Page 40: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/40.jpg)
Puppet Environments
• z.B.:
• development
• staging
• production
• https://puppetlabs.com/blog/git-workflow-and-puppet-environments/
![Page 41: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/41.jpg)
Puppet Testing
• RSpec-Puppet (http://rspec-puppet.com/)
• https://puppetlabs.com/blog/the-next-generation-of-puppet-module-testing/
• https://github.com/camptocamp/puppet-spec
![Page 42: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/42.jpg)
Verifzieren vom System
• RSpec tests
• http://serverspec.org/
• mspectator
• https://github.com/raphink/mspectator
• Tests::Server
• http://search.cpan.org/dist/Test-Server/
![Page 43: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/43.jpg)
Custom Grml ISOs
• grml-live.git (http://grml.org/grml-live/): templates/boot/isolinux/* anpassen
• Bootoptionen (z.B. netscript=http://example.org/path/to/deployment.sh)
• Bootsplash Layout (z.B. Firmenlogo)
• % sudo grml2iso -c templates -o custom.iso grml.iso
• Teil von grml2usb (http://grml.org/grml2usb/)
![Page 44: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/44.jpg)
![Page 45: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/45.jpg)
![Page 46: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/46.jpg)
![Page 47: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/47.jpg)
Admin-Doku
• z.B. mit Sphinx (reStructured TeXt, Such-Feature in HTML-Ausgabe inkludiert!)
• automatisch via Jenkins-Job bauen aus VCS
• immer aktuelle Dokumentation für alle zugänglich (HTML, PDF,...)
![Page 48: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/48.jpg)
![Page 49: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/49.jpg)
![Page 50: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/50.jpg)
Vagrant/Veewee
• Vagrant base boxes + VMs mit Veewee automatisch bauen
• https://github.com/jedi4ever/veewee
• Testen/Entwicklung mit Vagrant
• http://www.vagrantup.com/
• Entwickler können Puppet/Chef/...-Rezepte schreiben und testen!
![Page 51: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/51.jpg)
Best Practices... oder nicht jeder muss diegleichen Schmerzen erleben
![Page 52: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/52.jpg)
Automatisierenwas weh tut
Quelle: http://www.flickr.com/photos/ctrl-l/3579073698/
![Page 53: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/53.jpg)
Timestamper Plugin
![Page 54: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/54.jpg)
Test Anything Protocol+ Plugin
![Page 55: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/55.jpg)
Bruce Schneier Plugin
... knows Alice and Bob's shared secret.
![Page 56: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/56.jpg)
“discard old builds”
Quelle: http://www.flickr.com/photos/epsos/5575089139/
![Page 57: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/57.jpg)
Hardware nutzen
teuer
schnelle
Entwicklerzeit ist
![Page 58: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/58.jpg)
Homogenität
Quelle: http://www.flickr.com/photos/baggis/226567107/
![Page 59: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/59.jpg)
Builds triggernund nicht pollen
![Page 60: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/60.jpg)
Jenkins Jobs Handling
• Erstellen von Jobs automatisieren
• Configs in VCS speichern
• https://wiki.jenkins-ci.org/display/JENKINS/SCM+Sync+configuration+plugin
• jenkins-job-builder & CO
• https://github.com/openstack-infra/jenkins-job-builder
• ... viele weitere Tools: https://gist.github.com/mika/5237127
![Page 61: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/61.jpg)
Externe Abhängigkeiten beseitigen
Beispiele was schiefgehen kann (BTDT):
• Github
• PyPI
• RubyGems
• Percona Repository
• ....
![Page 62: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/62.jpg)
There are only two hard problems in Computer Science:cache invalidation, naming things
and off-by-one errors.
![Page 63: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/63.jpg)
Jenkins Master als Controlinstanz
+ Jenkins Slaves fürs Bauen
![Page 64: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/64.jpg)
Dashboards
• View auf Repository
• View auf Build-Status
• Frontend für Bauen von Releases
• ...
![Page 65: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/65.jpg)
Low-Hanging Fruitsfür Speedup
• tmpfs
• eatmydata
• lokaler Package-Mirror
![Page 66: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/66.jpg)
Puppet mit mcollective
mcollective ftw!
% mco rpc package apt_update
% mco package update \
jenkins-debian-glue \
-W /jenkins-slave/
![Page 67: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/67.jpg)
Achtung vor Catch-22
1) CI-Upgrade geht nicht wegen Bug,Bugfix von Plugin hängt aber
von neuer CI-Version ab2) Buildskripte die unter dem CI-System stecken kommen vom CI-System selbst
....
![Page 68: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/68.jpg)
Wartungsfenster auch für CI-Umgebung
schaffen
![Page 69: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/69.jpg)
Recap
• Keine Angst vor Jenkins
• Verfügbare Jenkins-Plugins anschauen
• Automatisierung (Paketmanagement, Configuration Management,...)
• Kein manuelles SSH (fabric, mcollective,....)
• Tests schreiben
• Dashboards
![Page 70: Continuous Integration im Rechenzentrum](https://reader034.fdocument.pub/reader034/viewer/2022042513/58a1ab7c1a28abb5488ba174/html5/thumbnails/70.jpg)
Fragen || Wünsche?
@mikagrmlmika @ github
michael-prokop.at/blog/grml-solutions.com