Continuous Delivery med Tutum och Docker

Preview:

Citation preview

Kristoffer Vidmokristoffer.vidmo@cag.se

Continuous Delivery

med Tutum och Docker

Daniel Marelldaniel.marell@cag.se

Code Night #42016-02-11

Joina Slacken

https://cagdemo.slack.com

Ta del av användbara länkar

● Arkitektur och utveckling● .NET och Java● Continuous Delivery och DevOps● Molnbaserade tjänster och miljöer● Verktyg och metoder för att implementera

Continuous Delivery

Vår bakgrund och vad vi gör

● Stegvis förändring mot Continuous Delivery● Helhetslösning, startar igång och följer upp● Hjälper till under hela resan, inte bara en

rapport● Pipelines● Tjänstemockar

Vad vi gör

● Sparar flera tusen timmar per år● Antal fel minskar drastiskt● Tiden att åtgärda ett fel minskar drastiskt

Puppet Labs - State of DevOps 2015

Resultat

● Systemutveckling i ett CD-sammanhang

● Build pipelines● Automatiserad test● Mikrotjänster● Automatisering, scriptning● Molnplattformar med AWS och Azure● REST- och SOAP-tjänster● A och B-testning● Blue-Green och Zero downtime deploy

Vi vill bli fler

Problemet med IT

IT är ett hinder

inte en möjliggörare

IT på 2000-talet?Manuell

- test

- deploy

- verifiering

Utveckling SystemtestAcceptans-test

Prod

Vilken av alla 100 saker är det som går fel...

Krav

Stora releaser varje kvartal

Utveckling SystemtestAcceptans-test

Prod

95% av tiden från krav till prod är väntetid

Krav

Överlämningar krav - utv - test - prod

Utveckling SystemtestAcceptans-test

Prod

Hur var det nu det skulle fungera?

Krav

Feedback kommer för sent

● Paketerar applikationer i containers

● Baserat på Linux LXC● En container körs som process i

hosten● Copy-on-write filsystem● Docker image

Vad är Docker?

https://www.docker.com/products/docker-toolbox$ docker run -it --rm ubuntu bash

DockerfileFROM java:8-jreCOPY target/myapp.jar /EXPOSE 8080CMD java -jar /myapp.jar

https://www.docker.com/products/docker-toolbox$ docker run -it --rm ubuntu bash

● Repeterbara deployments i produktion● Applikationer med konfliktande

beroenden● Isolation av applikationer● Distribuerad hantering av virtuella

miljöer (repo)● Låg overhead

Problem som Docker löser

https://www.docker.com/products/docker-toolbox$ docker run -it --rm ubuntu bash

appapp

Utveckling Drift

Virtualiserad miljö

app app

Körmiljö för containers

Containers vs Virtualisering

Hur det började

Webbsajt:http://welcomeapp.se

Webapp:https://app.welcomeapp.se

Server API:https://api.welcomeapp.se

Antal användare100 000Antal operationer per användare 10Tid timmar 4Operationer per sekund snitt 69Belastningstopp faktor 10Operationer per sekund, peak 694

Lastberäkning

● Installera testmiljö och produktionsmiljö● Installera Build Pipeline● DNS och certifikat● Wireframes● Infomodell● Utveckla frontend-applikation● Utveckla server-applikation● Chat med websockets/RabbitMQ● App Store och Google Play

Det blev mycket att göra

Infomodell

Pipeline

prod

GoogleAnalytics

Logging

Dashboardoperation status

uattest

DNS

coderepo

Alarms

DashboardKPIs

Backup S3

Welcome! Frontend application

load balancer

cluster

web server 1

web server 2

Web browser

web app

Welcome! Backend server

load balancer

cluster

server1

server3

server2

server4

MongoDBweb browser

web app

RabbitMQ

Frontend:https://app.welcomeapp.se

Backend:https://api.welcomeapp.se

Loggar:https://papertrailapp.com/systems/WelcomeApiAutolarge/events

Welcome! Demo

Test-, driftmiljöer och pipeline

Dockerhost

Jenkins

RabbitMQMongoDBdata

MongoDB

api server app web server

www web server

deploy

Alt. 1a

Dockerhost

Test-, driftmiljöer och pipeline

Jenkins

RabbitMQMongoDBdata

MongoDB

api server app web server

www web server

deploy

Alt. 1a

Dockerhost

Test-, driftmiljöer och pipeline

Jenkins

www stack

app stack

api stack

deploy

docker-compose

Alt. 1b

mongo: image: mongo

rabbitmq: image: 'tutum.co/@tutumuser@/rabbitmq:latest'

server: build: api links: - mongo:mongo - rabbitmq:rabbitmq environment: - SE_CAGLABS_WELCOME_SERVER_ENVIRONMENT=test ports: - "8080:8080"

docker-compose.yml

DockerhostDockerhost

Dockerhost

Test-, driftmiljöer och pipeline

Dockerhost

Jenkins docker container

deploy

Docker swarmAlt. 1c

Heroku

Alt. 2

Tutum Alt. 3

TutumÄr en plattform där du kan

bygga,

deploya

och hantera containers

samt dess infrastruktur

TutumSkapa noder och gruppera dem i

kluster

TutumSkapa containers och gruppera dem i

stackar

TutumMolnbaserad miljö, enkelt snabbt och

smidigt

TutumWebbaserat, men har REST api

Demo

Pipeline med Jenkins

produattest

kod-repo

Utvecklar-dator

Pipeline med Jenkins

Pipeline med Jenkins

produattest

kod-repo

Artifaktrepo

app build 42

Pipeline med GoCD

produattest

kod-repo

Artifaktrepo

app build 42

Pipeline med GoCD

Stort tack och mycket cred till Mikael Sennerholm (Avega) för pipelinesetup med GoCD till Tutum

● Demo systemproduktionslina● Demo automatisk test● Demo lasttestning med loader.io● Skala upp service, ny nod● Skala upp service, lastbalansering

Recommended