class: center, middle, light # Despliegue automático con Drone.io ### Mauricio Collazos .footnote[] --- class: center > https://github.com/contraslash/automatic-deployment-drone ![img/qr.png](img/qr.png) --- # Definiciones - Devops: > Una cultura organizacional que busca optimizar los procesos repetitivos del software - Continuous Integration > Procesos que aseguran la estabilidad del código después de cambios o nuevos requerimientos - Continuous Deployment > Automatización de despliegue de código a ambientes de producción o similares --- # Lean Startup ![http://trailridgeconsulting.com/wp-content/uploads/2017/08/lean-startup-300x216.png](http://trailridgeconsulting.com/wp-content/uploads/2017/08/lean-startup-300x216.png) --- Ciclo de Desarrollo de Software ![https://online.husson.edu/wp-content/uploads/2016/03/627x627-SftwareDev-Feature-HUSS.jpg](https://online.husson.edu/wp-content/uploads/2016/03/627x627-SftwareDev-Feature-HUSS.jpg) --- # El ciclo de Devops ![https://www.suse.com/assets/img/devops-process.png](https://www.suse.com/assets/img/devops-process.png) --- # Beneficios de CI/CD - Comunicación de calidad - Aceleración en el proceso de desarrollo - Estabilidad de despliegues - Infraestructura replicable - Enfoque en el núcleo de negocio --- # Algunos conceptos claves - Mantener los buenos hábitos en las personas - Automatizar todo - Maneje las herramientas de la misma manera en la que maneja el producto - Medir todo --- # ¿Qué es Drone? Una plataforma liviana y poderosa de Entrega Continua construida para contenedores --- # ¿Qué es un contenedor? Un paquete ejecutable, liviano, autónomo que incluye todo lo necesario para ejecutarse. ![https://www.docker.com/sites/default/files/Whale%20Logo332_5.png](https://www.docker.com/sites/default/files/Whale%20Logo332_5.png) --- # Docker con baterias .left[ - Docker Swarm - Docker Machine ] .right[ ![https://www.linux.com/sites/lcom/files/styles/floated_images/public/docker-swarm-hero2.png](https://www.linux.com/sites/lcom/files/styles/floated_images/public/docker-swarm-hero2.png) ] --- # Ejemplo - Crear un swarm usando Docker Machine y AWS - Desplegar en el swarm Drone y Drone agent - Crear dos instancias, una para producción y otra para test --- # Crear un swarm usando Docker Machine y AWS ```bash docker-machine create -d amazonec2 \ --amazonec2-vpc-id $VPC \ --amazonec2-region $REGION \ --amazonec2-zone $ZONE \ --amazonec2-instance-type t2.small \ --amazonec2-subnet-id $SUBNET \ --amazonec2-security-group $SECURITY_GROUP \ $MANAGER_NAME ``` [Código completo](https://github.com/contraslash/aws-docker-swarm) ```bash eval $(docker-machine env $MANAGER_NAME) ``` --- # Desplegar en el swarm Drone y Drone agent ## Server ```bash docker service create \ --name drone\ --network traefik-network \ --label traefik.port=8000 \ --env-file /etc/drone/dronerc \ drone/drone:0.7 ``` ## Agent ```bash docker service create \ --name drone-agent\ --env-file /etc/drone/droneagentrc \ --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \ drone/drone:0.7 agent ``` [Código original](https://github.com/contraslash/swarm-services-recipes/blob/master/drone.md) --- # Traefik como Proxy Inverso ```bash docker service create \ --name traefik \ --constraint=node.role==manager \ --publish 80:80 \ --publish 443:443 \ --publish 8080:8080 \ --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ --network traefik-network \ traefik \ --docker \ --docker.swarmmode \ --docker.domain=example.com \ --docker.watch \ --web ``` [Código original](https://github.com/contraslash/swarm-services-recipes/blob/master/traefik.md) --- # Crear dos instancias, una para producción y otra para test ```yaml pipeline: compile_test: image: plugins/docker repo: registry.example.com:5000/user/repo username: username password: password registry: registry.example.com tags: [ test ] when: branch: [test] deploy_test: image: appleboy/drone-ssh username: username password: password host: test.example.com port: 22 script: - docker login -u username -p password registry.example.com:5000 - docker pull registry.example.com:5000/user/repo:test - docker service rm test - docker service create --name test --label traefik.port=8000 --label traefik.frontend.rule=Host:test.example.com --network traefik-network registry.example.com:5000/user/repo:test ``` --- # Mejores prácticas para el uso de ramos en CD ![http://guides.beanstalkapp.com/version-control/branching-best-practices/stage-1.png](http://guides.beanstalkapp.com/version-control/branching-best-practices/stage-1.png) ![http://guides.beanstalkapp.com/version-control/branching-best-practices/stage-3.png](http://guides.beanstalkapp.com/version-control/branching-best-practices/stage-3.png) [Traducción](http://blog.contraslash.com/mejores-practicas-para-el-manejo-de-ramas-en-git/) --- # Las cosas se pueden complicar ![https://media.giphy.com/media/UedEkAAyEhMLC/giphy.gif](https://media.giphy.com/media/UedEkAAyEhMLC/giphy.gif) --- # Vinculos utiles - https://www.suse.com/es-es/solutions/devops/ - https://www.edx.org/es/course/introduction-devops-transforming-linuxfoundationx-lfs161x - https://devopsworld.blog/2017/09/15/devops-tools/ - https://code.facebook.com/posts/270314900139291/rapid-release-at-massive-scale/ - https://stackify.com/continuous-delivery-vs-continuous-deployment-vs-continuous-integration/ - https://www.infoq.com/articles/merging-devops-agile - http://learninone.com/category/devops/ --- Dar las gracias y huir