test-driven devops meissa gmbh · michael jerger testdrivendevops_0_8 23/05/17 / seite 1...
TRANSCRIPT
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 1
Test-Driven DevOps
Michael Jerger
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 2
Agenda
Vorstellung
Tests für Developer
Herausforderung Operations
Ansatzpunkte für agile DevOps
Testen mit dda-pallet
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 3
Agenda
Vorstellung
Tests für Developer
Herausforderung Operations
Ansatzpunkte für agile DevOps
Testen mit dda-pallet
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 4
meissa GmbH?
Fokus: DevOps, Maintainer von dda-pallet
Sitz Reutlingen, SW-Entwicklung Java & Uni Tübingen
Arbeiten dezentral, d.h. 80% Remote-Arbeit
Zusammenarbeit auf Augenhöhe
https://www.meissa-gmbh.de
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 5
Was ist dda-pallet?
Funktionales DevOps System
Test Driven
Schnörkellos und direkt
Linux-servers: functional – bash.
Cloud services: functional – api.
Adressiert den kompletten LifeCycle, OpenSource, cloud zentriert, ...
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 6
… pallet ...
... ist ein clojure DevOps Framework von Hugo Duncan.
… wir komponieren pallet zu einem DevOps System.
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 7
… dda ...DomainDrivenArchitecture DDD Prinzipien in der funktionalen Welt:
„Separate Domain from Infrastructure“
„enable Domain Language“
Bash & cloud Abstraktion = Infrastruktur.
Domain Language bestehend aus
Architektur Konventionen
Netzwerk-Layouts oder
Applikations Stacks
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 8
Agenda
Vorstellung
Testing für Developer
Herausforderung Operations
Ansatzpunkte für agile DevOps
Testen mit dda-pallet
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 9
Testarten für Dev
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 10
Agenda
Vorstellung
Tests in der Softwareentwicklung
Herausforderung Operations
Ansatzpunkte für agile DevOps
Testen in dda-pallet
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 11
naiv?
Naiv landen wir komplett in Infrastruktur Integration!meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 12
Ops = viel State
Installierte Betriebssystem
System-Konfiguration
Update-Zustand
Installierte Applikationen und deren Zustand
Logfiles und deren Nutzungmeissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 13
State – was tun?
State isolieren
Container
State explizieren
facts
Dockerhost
ZabbixServer
Maria DB
(defn collect-netstat-fact [] (collect-fact fact-id-netstat '("netstat" "-tulpen") :transform-fn parse-netstat))
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 14
Ops = Heterogene Technik
Unix / Windows/ *sh / Powershell
Perl / PHP / C / Java / Python / Ruby / GO / Lisp / JavaScript
Make / ant / mvn / gradle / lein / grunt
Config von HW Firewall / Router / VPN
Config von Applikationen
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 15
Heterogenität – was tun?
Heterogenität kapseln , (dünner) Anti Corruption Layer
Data-API Bash-Interaktion
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 16
Heterogenität – was tun?
Komplexität in übergreifendes Tool verschiebenDomain: Infrastruktur:
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 17
Ops = Infrastructure
Netzwerk, Firewall, Routing, Cloud
Integration in Ops Services
Repositories: Linux-Packages, Software-Artefakte, Web-Downloads
Security: Krypto-Keys & Credentialsmeissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 18
Infrastructure – was tun?
Infrastruktur Artefaktecontinous & getestetemeissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 19
Agenda
Vorstellung
Tests in der Softwareentwicklung
Herausforderung Operations
Ansatzpunkte für agile DevOps
Testen mit dda-pallet
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 20
Soll/Ist-Abgleich testen
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 21
Fkt. Integration testen
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 22
Integrationstest
Whitebox, controll & execute on target
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 23
Integrationstest
Whitebox controlled remote, executed on target
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 24
Integrationstest
Whitebox collect facts on target
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 25
Integrationstest
Blackbox
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 26
ServerTest-ServerSpec-Goss
describe port(80) do it { should be_listening }end
{:netstat {:apache2 {:port "80"}}
port: tcp:80: listening: true
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 27
Agenda
Vorstellung
Tests in der Softwareentwicklung
Herausforderung Operations
Ansatzpunkte für agile DevOps
Testen mit dda-pallet
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 28
Recap: Test Kontext
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 29
Infrastruktur: UnitTest File
=> (vhost/vhostconfdefaultredirecttohttpsonly :domainname "meissagmbh.de" :serveradminemail "admin@meissagmbh.de")["<VirtualHost *:80>" " ServerName meissagmbh.de" " ServerAdmin admin@meissagmbh.de" " " " ErrorLog \"/var/log/apache2/error.log\"" " LogLevel warn" " CustomLog \"/var/log/apache2/access.log\" combined" " " " RewriteEngine on" " RewriteCond %{HTTPS} !on" " RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]" " " "</VirtualHost>"]
REPL
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 30
Recap: Plan
meissa GmbH
Infrastruktur: UnitTest Plan
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 32
Integration Test
apply & test
(def default-vhost-config {:domain-name "localhost.localdomain" :listening-port "443" :server-admin-email "admin@localdomain" ... })
{:netstat {:apache2 {:port "443"}}
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 33
Integration Testdda-servertest-crate
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 34
Resource on target
Proto RecvQ SendQ Local Address Foreign Address State User Inode PID/Program nametcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 9807 1001/sshd tcp6 0 0 :::80 :::* LISTEN 0 44161 4135/apache2 tcp6 0 0 :::4369 :::* LISTEN 108 33687 27416/epmd
(defn collect-netstat-fact [] (collect-fact fact-id-netstat '("netstat" "-tulpen") :transform-fn parse-netstat))meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 35
Recap: Test Kontext
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 36
Domain: Generate Config
(def archivaconfig {:fqdn "artifacts.meissagmbh.de" :smtpmailhost "mailserver" :smtpmailuser "mailaccount" :smtpmailpassword "mailpwd"})
=> (sut/archivahttpdconfig archivaconfig){:limits {:serverlimit 150, :maxclients 150}, :jkconfiguration {:jkStripSession "On", :jkWatchdogInterval 120}, :vhosts {:default {:domainname "artifacts.meissagmbh.de", :listeningport "443", :serveradminemail "[email protected]gmbh.de", :maintainancepagecontent ["<h1>Webserver Maintainance Mode</h1>"], :modjk {:port "8009", :host "127.0.0.1", :worker "mod_jk_www", :maintaintimoutsec 90, :socketconnecttimeoutms 62000}, :certletsencrypt {:letsencryptmail "[email protected]gmbh.de"}}}}
REPLmeissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 37
Domain: Unit Test
REPL
(deftest testhttpdvhost [] (testing "httpd vhost domain test" (is (= {:limits ..., :vhosts {:default {:domainname "artifacts.meissagmbh.de", ...}, :certletsencrypt {:letsencryptmail "[email protected]gmbh.de"}}}} (sut/archivahttpdconfig archivaconfig) )) ))
=> (runtests)
Testing de.meissagmbh.pallet.crate.archiva.apptest
Ran 1 tests containing 1 assertions.0 failures, 0 errors.{:test 1, :pass 1, :fail 0, :error 0, :type :summary}
(runtests)meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 38
Boundaries with Validation
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 39
Recap: Test Kontext
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 40
Fkt. Integration testen
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 41
Smoke-Test Image / Instance
meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 42
Fazit
Respekt vor den Unterschieden
Von der Softwareentwicklung lernen
Effizientes DevOps Testen möglich!meissa GmbH
Michael Jergerwww.DomainDrivenArchitecture.org
TestDrivenDevOps_0_823/05/17 / Seite 43
Kontakt
Kennenlernen - meetup
https://www.meetup.com/de-DE/dda-pallet-DevOps-Hacking-with-Clojure
Ausprobieren & Unterstüzung - GitHub
https://github.com/DomainDrivenArchitecture/dda-pallet-masterbuild
Informiert bleiben - Blog:
https://DomainDrivenArchitecture.org
meissa GmbH