continuous delivery of continuous delivery · 08/07/2016 · 7/8/2016 continuous delivery of...

52
7/8/2016 Continuous Delivery of Continuous Delivery file:///tmp/generated-slides/jfs16.html 1/52 CONTINUOUS DELIVERY OF CONTINUOUS DELIVERY Gerd Aschemann

Upload: phungbao

Post on 28-Jul-2018

261 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 1/52

CONTINUOUS DELIVERY OF CONTINUOUS

DELIVERY

Gerd Aschemann

Page 2: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 2/52

JAVA FORUM STUTTGART 2016

Gerd Aschemann

twitter:

[email protected]

http://aschemann.net

@GerdAschemann

Page 3: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 3/52

FRAGESTUNDE

Wer nutzt Continuous Integration?

Wer betreibt Continuous Delivery?

Wer setzt auf Infrastructure as Code (IaC)?

Wer baut seine CIP/CDP per IaC?

Wem sagt das alles gar nichts?

Page 4: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 4/52

AGENDA

Continuous Delivery

Platform as Code(PaC)

Lösungsarchitektur

Umsetzung

Fazit

Page 5: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 5/52

WAS IST CONTINUOUS DELIVERY?

Frei nach

Software ist jederzeit deploybar

Deploybarkeit hat Vorrang vor Erweiterungen

Aussagefähigkeit über Production-readiness nach jedem Change

Push-button Deployment beliebiger Versionen in beliebigeUmgebungen

Hohe AutomatisierungContinuous Delivery ist NICHT Continuous Deployment!

Martin Fowler

Page 6: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 6/52

CONTINUOUS DELIVERY CYCLE (?)

Build Deploy

TestRelease?

Cycle???

Page 7: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 7/52

CONTINUOUS DELIVERY CASCADE (???)

Develop+Unit Test Int. Test UAT Production

(OK?) yes (OK?) yes

no no

Page 8: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 8/52

CONTINUOUS DELIVERY LOOP (!)

Develop+Unit Test Int. Test UAT Production

Feedback (loop?)

Page 9: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 9/52

RÜCKBLICK: DEVELOPMENT

Development

Code Build Test

Commit/Push

(OK?)

yes

no

Page 10: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 10/52

DEVELOPMENT NOCH EINFACHER

Development

Code Test

Commit/Push

(OK?)

yes

no

Page 11: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 11/52

CONFIGURATION MANAGEMENT

Config Mgmt.

Configure Test

Use

(OK?)

yes

no

Page 12: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 12/52

JENKINS

Page 13: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 13/52

SCM­MANAGER

Page 14: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 14/52

SO NICHT: PET

Page 15: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 15/52

BESSER SO: CATTLE

Page 16: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 16/52

CM SYSTEMATISCH: WAS FEHLT?

Configuration Management am "lebendenHerzen"

Feedback-Loop ist sehr kurz!

Feedback-Loop ist sehr lang!?

"Blood, Sweat, and Tears"-Management

Keine systematische Qualitätssicherung!

Page 17: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 17/52

CM EBENEN

Infrastruktur: OS/Linux (Windows, OSX, Android, Embedded)

Plattform:

Build Server (Jenkins, Bamboo, Travis, … )

Source Code Repo (Apache/SVN, SCM­Manager, Gitlab, Github,… )

Artifact Repo (Nexus, Artifactory, … )

QS-Management (Findbugs/Checkstyle/PMD, Surefire/Failsafe, … Sonar Qube)

Application: Maven, Gradle, …

Page 18: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 18/52

PLATFORM AS CODE (PAC)

Vagrant

Puppet (+ Shell +Perl)

Jenkins (+ Maven)

Docker/Nexus

Page 19: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 19/52

ZIEL­ARCHITEKTUR (VEREINFACHT)

«Linux/Windows/OSX/...»

Developer-PC

«Linux»

Meta-Build-Server

PaC Development

Source Code Repository

Jenkins Test

Devops-Engineer

Prod

Operator

local deploydevelop

check out PaC

deliver

commit/push PaC

check out PaC

deliver

Page 20: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 20/52

DETAIL­VIEW: DEVELOPER

«Linux/Windows/OSX/...»

Developer-PC

LocalDevelopment

«Vagrant»

LocalVM

«Git»

Local_Repository

«Jenkins»

Jenkins Local«SCM-Manager»

SCM-Manager Local

«Nexus»

Nexus Local

Developer

pull/checkout upload/download

vagrant up / vagrant provision

Change

Test Test

Page 21: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 21/52

DETAIL­VIEW: META­BUILD­SERVER

«Linux»

Meta-Build-Server

Test

«Vagrant»

TestVM

«SCM-Manager»

Source Code RepositoryJenkins

«Git»

Test_Repository

«Jenkins»

Jenkins_Test«SCM-Manager»

SCM-Manager_Test

«Nexus»

Nexus Test

poll

pull/checkout upload/download

vagrant up / vagrant provision

Test Test

check out

Page 22: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 22/52

DETAIL­VIEW: PRODUKTION

«Linux»

Production Server

«Git»

Production_Repository

«SCM-Manager»

SCM-Manager Production

«Jenkins»

Jenkins Production«Nexus»

Nexus Production

Operator

pull/checkout upload/download

deploy deploy deploy

pull/checkout

Page 23: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 23/52

VAGRANT

Setup virtueller Maschinen

Provider

VirtualBox, libvirt (Qemu/KVM), Parallels, VMware, …

Cloud: AWS

Provisioner

Shell

Infrastruktur CM-Tools: Puppet, Chef, Ansible, SaltStack?,…

Page 24: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 24/52

VAGRANTFILE

Ruby-Syntax

Provider + Box

Konfiguration

Name

Speicher

Netzwerk (Port forwards)

Dateisystem(e): /vagrant

Provisioner

Page 25: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 25/52

VAGRANTFILE (DEMO)

Vagrant.configure(2) do |config| # ... config.vm.box = "ubuntu/trusty64" config.vm.provider "virtualbox" do |vbox, override| vbox.name = "devopssquare-jfs2016" vbox.memory = 2048 override.vm.network "private_network", ip: "192.168.50.17", virtualbox__intnet: true # Jenkins override.vm.network "forwarded_port", guest: 8080, host: "17080" # Nexus override.vm.network "forwarded_port", guest: 8081, host: "17081" ...

Page 26: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 26/52

MODULARES SETUP

Module

Kompositionen

Page 27: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 27/52

EXKURS: PUPPET

Eigentlich Master/Slave-CM (Polling)

CM-Logik in sog. Manifesten

Puppet-Module

Hier: Rein lokale Nutzung

Modul-Installation in VM

Manifest für Provisionierung

Page 28: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 28/52

BASE

modules/ (base/)

scripts/init.sh

puppet/init.pp

Page 29: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 29/52

BASE/SCRIPTS/INIT.SH

Install puppet

Install puppet modules

stdlib

etckeeper

Page 30: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 30/52

INIT.SH (DEMO)

... dir=`dirname $0`

basedir="${dir}/.."

$sudo apt-get update $sudo apt-get install -qq puppet

test -r /etc/puppet/modules/etckeeper || $sudo puppet module install thomasvandoren-etckeepertest -r /etc/puppet/modules/stdlib || $sudo puppet module install puppetlabs-stdlib

# Avoid warning from initial puppet run test -r /etc/puppet/hiera.yaml || $sudo touch /etc/puppet/hiera.yaml

$sudo puppet apply "$basedir/puppet/init.pp"

Page 31: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 31/52

BASE/PUPPET/INIT.PP

Purge packages (NFS, … )

Install packages (git, perl-test, … )

Setup hiera

Setup etckeeper!

Page 32: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 32/52

INIT.PP (DEMO)

# Delete some default packages ... package { 'nfs-common': ensure => "purged" } package { 'rpcbind': ensure => "purged" }

# The minimal set of packages we would like to see! package { "git": } package { "screen": } package { "apticron": }

# Some Packages required for testing package { "libwww-mechanize-perl": } package { "libtest-html-content-perl": } #... # Tweak etckeeper file_line { 'etckeeper:git': path => '/etc/etckeeper/etckeeper.conf', line => 'VCS="git"', } file_line { 'etckeeper:no-nightly-commit': path => '/etc/etckeeper/etckeeper.conf', line => 'AVOID_DAILY_AUTOCOMMITS=1',

Page 33: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 33/52

COMPOSITES

composites/

scripts/run.sh

lists/minimal

Page 34: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 34/52

RUN.SH (DEMO)

dir=`dirname $0`

modulesdir=/vagrant/modules test -d ${modulesdir} || modulesdir=${dir}/../../modules

compositesdir=/vagrant/composites test -d ${compositesdir} || compositesdir=${dir}/..

for comp in "$*" do echo "Applying '${comp}'" modules=`cat ${compositesdir}/lists/${comp}`

for module in ${modules} do ${modulesdir}/${module}/scripts/init.sh done done

Page 35: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 35/52

VAGRANTFILE: ERWEITERUNGEN/TIPPS

Environment

Boxname

Memory

IP/Port Ranges

Caching + Persistenz

Page 36: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 36/52

EXTENDED VAGRANTFILE

name = ENV['VAGRANT_NAME'] || "devopssquare-jfs2016-devel" memory = ENV['VAGRANT_MEMORY'] || 2048 ip_unique = ENV['VAGRANT_IP_UNIQUE'] || "17" port_unique = ENV['VAGRANT_PORT_UNIQUE'] || "#{ip_unique}" ... config.vm.hostname = name config.vm.synced_folder "cache/apt-archives", "/var/cache/apt/archives" config.vm.provider "virtualbox" do |vbox, override| vbox.name = name vbox.memory = memory override.vm.network "private_network", ip: "192.168.50.#{ip_unique}", virtualbox__intnet ... override.vm.network "forwarded_port", guest: 8055, host: "#{port_unique}055" ...

Page 37: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 37/52

JENKINS

Neu: modules/jenkins-native

scripts/init.sh: Wie gehabt

puppet/init.pp !!!

composite/lists: jenkins-only

NEU: scripts/test.pl

Page 38: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 38/52

JENKINS PUPPET (DEMO)

include jenkins

# Jenkins needs some packages for misc. Jobs $packages = [ 'git', ]

package { $packages : ensure => installed, }

$plugins = [ 'ansicolor', 'build-pipeline-plugin', 'conditional-buildstep', 'credentials', 'disk-usage', 'envinject', 'git', 'git-client', 'github', 'github-api', 'javadoc', 'jobConfigHistory', 'job-dsl',

Page 39: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 39/52

JENKINS TEST (DEMO)

Das ist ein Unit-Test!Ist das ein Unit-Test?

#!/usr/bin/env perl

use strict; use warnings;

use WWW::Mechanize; use Test::HTML::Content (tests => 1);

# Create a new mechanize object my $mech = WWW::Mechanize->new(); my $url = 'http://admin:admin@localhost:8080/'; # Associate the mechanize object with a URL $mech->get($url); # Test for the footer in the content of the URL xpath_ok($mech->content, '/html/body/footer', 'Jenkins HTML contains footer');

Page 40: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 40/52

JENKINS INTEGRATION TEST

Neu: modules/it-jenkins-minimal

scripts, composites: Wie gehabt

puppet/init.sh

Seed Job (Jenkins Job DSL)

HelloWorld

Integrations-Test: Wurden die Jobs ausgeführt?

Page 41: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 41/52

SEED JOB (INTEGRATION TEST)

mavenJob ("helloworld-install") { scm { github ("devopssquare/helloworld", "master") } triggers { scm("H/10 * * * *") } goals ('clean install') }

Page 42: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 42/52

JENKINS INTEGRATION TEST (DEMO)

#!/usr/bin/env perl

use strict; use warnings;

use WWW::Mechanize; use Test::HTML::Content (tests => 2);

# Create a new mechanize object my $mech = WWW::Mechanize->new();

# First test case my $url1 = 'http://admin:admin@localhost:8080/job/helloworld-seed'; # Associate the mechanize object with a URL $mech->get($url1); # Test for the footer in the content of the URL xpath_ok($mech->content, '/html/body/footer', 'Jenkins Job "helloworld-seed" HTML contains footer');

my $url2 = 'http://admin:admin@localhost:8080/job/helloworld-install'; # Associate the mechanize object with a URL $mech->get($url2); # Test for the footer in the content of the URL xpath_ok($mech->content, '/html/body/footer', 'Jenkins Job "helloworld-install" HTML contains footer');

Page 43: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 43/52

INTERMEZZO: DOCKER

Komponenten ohne viel Konfiguration (→ Plug’n’Play):

Nexus

SCM-Manager

SonarQube (+ PostgreSQL)

Volumes + Volume-Container für Persistenz!

Page 44: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 44/52

DOCKER SETUP

Neu: modules/data

Neu: modules/docker

class { 'docker': }

Page 45: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 45/52

NEXUS ALS DOCKER­CONTAINER

Neu: modules/nexus

Puppet Docker-Module erzeugt OS-Service (Nexus)

docker::run { 'nexus': image => 'sonatype/nexus', volumes => ['/data/nexus/sonatype:/sonatype-work'], ports => ['8081:8081'], require => File['/data/nexus/sonatype'] }

file { '/data/nexus': ensure => directory, owner => root, group => root, mode => 0777, } file { '/data/nexus/sonatype': ensure => directory, owner => root, group => root, mode => 0777, require => File['/data/nexus'] }

Page 46: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 46/52

JENKINS + NEXUS INTEGRATION TEST

Neu: modules/jenkins-settings-nexus-localhost

Neu: modules/it-jenkins-nexus-minimal

Neu: composites/lists/it-jenkins-nexus-minimal

Page 47: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 47/52

USE CASES

Kontinuierliche Fortentwicklung der CDP

Automatisierter regelmäßiger (Neu) Aufbau der CDP

Testen neuer Komponenten(versionen)

Testen neuer Prozesse

Schulung/Einarbeitung

Page 48: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 48/52

ENVIRONMENTS / CD STAGES

Development/Continuous Integration (Automatisierte Tests)

User Acceptance Test (Exploratives Testen)

(Performance/Exception/… Tests)

Produktion

Page 49: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 49/52

OFFENE FRAGEN

Was ist mit dem Zustand (in Produktion)?

Administrativer Zustand → PaC

Operativer Zustand → it depends

Repositories

Alte Instanz(en) vorhalten?

Backup?

Partielle Deployments?

Blue/Green-Deployments?

Page 50: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 50/52

FAZIT

CD-Plattform als PaC realisiert

Nutzung von Virtualisierung und Containern

Modularisierung und Aggregation

Puppet ist oft hakelig (Ansible auch!)

Ausblick:

Feedback-Loops/Monitoring fehlt

Unabhängigkeit von Puppet/Ansible/Salt/Chef???

Page 51: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 51/52

LINKS

Beispiele:

Slides:

https://github.com/devopssquare/demo­jsf2016

https://github.com/devopssquare/helloworld

https://github.com/devopssquare/helloworld­seed

http://aschemann.net/gerd/publications/cdofcd­

jsf16.pdf

Page 52: Continuous Delivery of Continuous Delivery · 08/07/2016 · 7/8/2016 Continuous Delivery of Continuous Delivery ... JENKINS PUPPET ... Puppet Docker-Module erzeugt OS-Service

7/8/2016 Continuous Delivery of Continuous Delivery

file:///tmp/generated-slides/jfs16.html 52/52

DANKE!