Test-Driven DevOps meissa GmbH · Michael Jerger TestDrivenDevOps_0_8 23/05/17 / Seite 1...

43
Michael Jerger www.DomainDrivenArchitecture.org TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Transcript of Test-Driven DevOps meissa GmbH · Michael Jerger TestDrivenDevOps_0_8 23/05/17 / Seite 1...

Page 1: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 1

Test-Driven DevOps

Michael Jerger

meissa GmbH

Page 2: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/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

Page 3: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 4: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 5: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 6: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 7: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 8: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 9: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 9

Testarten für Dev

meissa GmbH

Page 10: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 11: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 11

naiv?

Naiv landen wir komplett in Infrastruktur Integration!meissa GmbH

Page 12: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 13: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa 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

Page 14: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 15: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 16: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 17: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 18: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 18

Infrastructure – was tun?

Infrastruktur Artefaktecontinous & getestetemeissa GmbH

Page 19: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa 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

Page 20: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 20

Soll/Ist-Abgleich testen

meissa GmbH

Page 21: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 21

Fkt. Integration testen

meissa GmbH

Page 22: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 22

Integrationstest

Whitebox, controll & execute on target

meissa GmbH

Page 23: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 23

Integrationstest

Whitebox controlled remote, executed on target

meissa GmbH

Page 24: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 24

Integrationstest

Whitebox collect facts on target

meissa GmbH

Page 25: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 25

Integrationstest

Blackbox

meissa GmbH

Page 26: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 27: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 28: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 28

Recap: Test Kontext

meissa GmbH

Page 29: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 29

Infrastruktur: UnitTest File

=> (vhost/vhost­conf­default­redirect­to­https­only      :domain­name "meissa­gmbh.de"     :server­admin­email "admin@meissa­gmbh.de")["<VirtualHost *:80>" "  ServerName meissa­gmbh.de" "  ServerAdmin admin@meissa­gmbh.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

Page 30: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 30

Recap: Plan

meissa GmbH

Page 32: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 33: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 33

Integration Testdda-servertest-crate

meissa GmbH

Page 34: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 34

Resource on target

Proto Recv­Q Send­Q 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

Page 35: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 35

Recap: Test Kontext

meissa GmbH

Page 36: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 36

Domain: Generate Config

(def archiva­config  {:fqdn "artifacts.meissa­gmbh.de"   :smtp­mail­host "mail­server"   :smtp­mail­user "mail­account"   :smtp­mail­password "mail­pwd"})

=> (sut/archiva­httpd­config archiva­config){:limits {:server­limit 150, :max­clients 150}, :jk­configuration {:jkStripSession "On",  :jkWatchdogInterval 120}, :vhosts {:default  {:domain­name   "artifacts.meissa­gmbh.de",   :listening­port "443",   :server­admin­email   "[email protected]­gmbh.de",   :maintainance­page­content   ["<h1>Webserver Maintainance Mode</h1>"],   :mod­jk   {:port "8009",    :host "127.0.0.1",    :worker "mod_jk_www",    :maintain­timout­sec 90,    :socket­connect­timeout­ms 62000},   :cert­letsencrypt   {:letsencrypt­mail    "[email protected]­gmbh.de"}}}}

REPLmeissa GmbH

Page 37: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 37

Domain: Unit Test

REPL

(deftest test­httpd­vhost []  (testing     "httpd vhost domain test"    (is (=          {:limits ...,           :vhosts           {:default            {:domain­name             "artifacts.meissa­gmbh.de",             ...},             :cert­letsencrypt             {:letsencrypt­mail              "[email protected]­gmbh.de"}}}}          (sut/archiva­httpd­config archiva­config)          ))    ))

=> (run­tests)

Testing de.meissa­gmbh.pallet.crate.archiva.app­test

Ran 1 tests containing 1 assertions.0 failures, 0 errors.{:test 1, :pass 1, :fail 0, :error 0, :type :summary}

(run­tests)meissa GmbH

Page 38: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 38

Boundaries with Validation

meissa GmbH

Page 39: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 39

Recap: Test Kontext

meissa GmbH

Page 40: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 40

Fkt. Integration testen

meissa GmbH

Page 41: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger meissa GmbH

Michael Jergerwww.DomainDrivenArchitecture.org

TestDrivenDevOps_0_823/05/17 / Seite 41

Smoke-Test Image / Instance

meissa GmbH

Page 42: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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

Page 43: Test-Driven DevOps meissa GmbH · Michael Jerger  TestDrivenDevOps_0_8 23/05/17 / Seite 1 Test-Driven DevOps Michael Jerger 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