Continuous Delivery Un caso de estudio
Transcript of Continuous Delivery Un caso de estudio
![Page 1: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/1.jpg)
Continuous DeliveryUn caso de estudio
#nerdearlaBuenos Aires, 2015
![Page 2: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/2.jpg)
aka
![Page 3: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/3.jpg)
Technical Learningsof Continuous
Delivery for MakeBenefit Glorious
Nation of Sysadmins
![Page 4: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/4.jpg)
whoamioficio: sysadminIRC: osvaldo at freenode #sysarmy
![Page 5: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/5.jpg)
it all started with a ...
![Page 6: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/6.jpg)
Codigo:Trunk. Codigo en desarrolloBranch. Versiones de Release(3.10,3.11,3.12,..)Tag. Fixes, bugs, etc. (3.10.1,3.10.2 .., 3.10.18,3.11.0,..)
3 Ambientes:DEV. Próximo releaseQA. Release en produciónPROD.
como era el desarrollo
![Page 7: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/7.jpg)
codigo + deploy steps
crear carpetasejecutar sqldeployar configuracionrollback steps
Documentation:JIRA Issues - code commits with jira_id on subject
tareas:
como era el deployment
![Page 8: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/8.jpg)
Lunes: Code freezeMiércoles: Deploy a producción
Cada 15 dias
08:00 Arrancaba el deploy...terminaba cuando terminaba
como eran los releases
![Page 9: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/9.jpg)
ReleasesProblemas?
FeriadosRollbacksTiempo de implementación paranuevas funcionalidad
![Page 10: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/10.jpg)
empecemos por elprincipio
follow the money
(en nuestro caso:)
follow the code
![Page 11: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/11.jpg)
flujo de codigo
Developers -> commit code in SVN
Release Team -> Push/Tag Code -> Deploy Code
Coordinación via: IRC
![Page 12: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/12.jpg)
Problemas
Dependencia en el Release TeamProceso manual
flujo de codigo
![Page 13: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/13.jpg)
¿Qué hacer?
![Page 14: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/14.jpg)
Departamento de InfrastructuraRelease Team
![Page 15: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/15.jpg)
Continuous DeliveryContinuous IntegrationContinuous Deployment
![Page 16: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/16.jpg)
Continuous DeliveryEstas haciendo continuous delivery cuando:
Tu código es deployable a lo largo de su ciclo de vida.Tu equipo prioriza mantener el código deployable porencima de trabajar en nuevas funcionalides.Cualquiera puede obtener feedback instántaneo yautomatizado de la disponibilidad para salir aproducción de sus sistemas siempre que alguienhaga un cambio sobre ellos.Puedes deployar cualquier versión del software acualquier ambiente en cualquier momento con soloapretar un botón.
![Page 17: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/17.jpg)
Continuous DeliveryPara lograr continuous delivery usted necesita:
una relación de trabajo muy cercana y colaborativaentre todos los involucrados en el deployment(también conocido como "cultura DevOps".la mas completa automatización de todos loselementos que componen el proceso de delivery,usualmente conocido como DeploymentPipeline.
![Page 18: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/18.jpg)
Continuous Delivery se confunde a menudocon Continuous Deployment. Continuous Deployment significa que cada cambioentra en el pipeline y automáticamente llega aproducción, resultando muchos deployments aproducción a diario.Continuous Delivery solo significa que tienes lacapacidad para hacer deploys frecuentes pero puedeselegir no hacerlos.
![Page 19: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/19.jpg)
se refiere por lo general a lacapacidad de integrar, buildear y testear el código dentrode un ambiente de desarrollo.
Continuous Integration
Unit TestingAutomated Acceptance TestsUser Acceptance Tests
![Page 20: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/20.jpg)
¿Por dondeempezamos?
![Page 21: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/21.jpg)
show me the code
aka
Source Code Versioning
![Page 22: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/22.jpg)
GitVentajas
Branchesmejor interface web (github/gitlab)repositorios distribuidos (oficinas distribuidas)interface svn (facilita la migración)
problema adicional con SVNoficinas distribuidas
geograficamentesolucion:
![Page 23: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/23.jpg)
comenzar migración a gitseparar componentesseparar configuración del códigoreescribir deployment scripts. separación delcódigo y los datos de configuración
objetivos
Etapa 1
![Page 24: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/24.jpg)
un grupo de proyectos empezo a utilizar git/github.se logró separar en componentes funcionalidad de laaplicación (frontend mostly).se paso la configuración a repositorios git (git-crypt).se armó el pipeline de un componente desde el commitde codigo comenzando por testing hasta stagingincluyendo unit testing, smoke tests y automatedacceptance tests.nuevo set de scripts de deployments (bash).
logros
primer pipeline: la prueba de concepto fue un exito
Etapa 1
![Page 25: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/25.jpg)
disparar el deploy del componente automaticamente alcomitear nuevo codigo (github webhooks + jenkins git plugin)empaquetar los componentes
deployar paquetes -no source code- en ambientesartifactory
deployar paquetes automáticamente en ambientes dedesarrollo: testing y stagingun solo set de scripts (bash) de deploy para todos losambientes. configuracion de ambientes mediante includes
objetivos
Etapa 2
![Page 26: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/26.jpg)
logrosEtapa 2
![Page 27: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/27.jpg)
automatizar deploy de servidores de CI (aka jenkins)infrastructura como códigoutilizar paquetes nativosutilizar ansible en vez de bashdesarrolladores con el boton para deployar enproducción
objetivos
Etapa 3
![Page 28: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/28.jpg)
deploys directo a producciónconfig flags: paquetes con la configuración defuncionalidades de la aplicacióntres paquetes por componente:
codigo (aplicación)conf (configuración ambiente)flags (funcionalidad aplicación)
pipeline de nuevo componente en un dia (hasta prod!)
logros
Etapa 3
![Page 29: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/29.jpg)
Smoke testsUAT (gnu parallel para acelerar casperjs)Canary deploymentsBlue/Green deploymentsfocused A/B testing (optimizely.com)
facilitando los deploys
![Page 30: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/30.jpg)
LeccionesConvention over configurationtreat servers like cattle not petsautomate everythinginfrastructure as codeuse dev/qa environmentshave meaninful dev/qa environmentsempower developers - with great power came greatresponsabilities blameless postmortems
![Page 31: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/31.jpg)
Herramientaslogging
splunkelk (logstash+kibana)
metricas
graphitenewrelic
repositories
artifactoryaptly
monitoreo
nagiospagerduty
source code versioning
githubautomatizacion
ansible / bashserver CI
jenkins
![Page 32: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/32.jpg)
ChatopsIRChipchatslacklets-chat
Bots
hubotIntegracion
jenkinsgitlab/githubbash/curl
![Page 33: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/33.jpg)
![Page 34: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/34.jpg)
# check artifacts Check artifacts versions in environment (available and deployed)exec = require('child_process').exec;module.exports = (robot)> robot.respond /check (.*)/i, (msg) > env = msg.match[1] switch env when "prod" #server = "repos2mng" server = "onlinemainnms" script="ssh "+server+" /usr/local/acme/bin/checkartifactsservers.sh" else #server = "testingrepos2" server = "stagingnms" env = "stage" script="ssh "+server+" /usr/local/acme/bin/checkartifactsservers.sh" console.log(script) child = exec script, (error,stdout,stderr) > msg.send "artifacts in "+env+"\n" + stdout + "\n" + stderr
CODE for hubot check prod
![Page 35: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/35.jpg)
![Page 36: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/36.jpg)
web panel
![Page 37: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/37.jpg)
ansiblefpmaptly
arquitectura modular
inputoutput
multi-ambiente
paquetes nativos
infrastructure as code: xcdc
![Page 38: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/38.jpg)
Tipsvagrant (providers: lxc, vmware, azure)vagrant plugins (hosts manager, package cache)git push update (definir dos remotes, read-only via ssh,read-write via https, bonus: git credentials cache)use rest. /api/ (slim framework, flask)jenkins
nodes (using different remote user)backup scripts (backup jenkins´ configuration in git)
![Page 39: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/39.jpg)
Document everythingstatic blog tools
jekylloctopresshugopelycan
wysiwygghost
static sitesmkdocsgitbook
apidocjs.com
use markdowngists
![Page 40: Continuous Delivery Un caso de estudio](https://reader034.fdocuments.in/reader034/viewer/2022042701/55bacad9bb61eb346f8b4573/html5/thumbnails/40.jpg)
Gracias!