continuous delivery med tutum och docker
TRANSCRIPT
Kristoffer [email protected]
Continuous Delivery
med Tutum och Docker
Daniel [email protected]
Code Night #42016-02-11
● 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
”Docker is the
Most Disruptive Technology
For Software Development in the Last Decade”
Compared with Cloud computing, Hadoop, and NoSQL … in terms of long-term effect on the software industry, these technologies are
miles behindhttps://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