continuous delivery (y 3) · 2013-12-18 · metodologías Ágiles de desarrollo de software domingo...

27
Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Continuous Delivery (y 3) Sesión 11a

Upload: others

Post on 25-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Continuous Delivery (y 3)Sesión 11a

Page 2: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante �2

Page 3: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Entornos de prueba

• La última parte de la tubería de despliegue consiste en probar los builds compilados en distintos entornos de prueba

• Distintos entornos• Tests de integración y aceptación• UAT• Tests de capacidad• Producción

• A su vez, cada uno de ellos puede tener distintas configuraciones y estar formado por múltiples máquinas• Pruebas con distintos clientes y navegadores• Pruebas con distintas bases de datos y servicios (si se va a

desplegar la aplicación en distintos entornos de producción)

�3

Page 4: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Desplegar de la misma forma

• Es esencial usar el mismo proceso para desplegar en los distintos entornos• Características diferentes de los entornos

• Distintas IP (como mínimo)• Distintos sistemas operativos• Distinta configuración del middleware (localización de las bases de

datos y servicios externos)• El script de despliegue debería ser el mismo en todos los entornos:

1. Configurar el entorno2. Desplegar los binarios3. Pruebas de humo

• Los entornos deben tener siempre la misma configuración inicial, dependiente solo de los tests que se quieren realizar

�4

Page 5: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Gestión de entornos de prueba y producción

• Cuanto menos control tenemos sobre el entorno en el que el código se ejecuta, más probabilidades hay de comportamientos no esperados

• Nos interesa tener control sobre todos y cada uno de los bits del entorno en el que se despliega nuestra aplicación

• Los cambios en los entornos deben realizarse sólo mediante procesos automatizados y registrados

• En cada entorno se debe definir claramente (y guardar en el control de versiones):• Configuración• Software que se despliega• Topología de la red• Estado

• El objetivo final es necesitar solo dos parámetros para realizar el despliegue:• Identificador del entorno de despliegue• Identificador del build a desplegar

�5

Page 6: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Herramientas de empaquetado

• En cada entorno hay que desplegar:• Conjunto de ficheros binarios• Ficheros de configuración• Ficheros estáticos en el control de versiones

• Es muy recomendable utilizar un sistema de empaquetado para desplegar la aplicación en el entorno: RPMs en el mundo Linux • Cada release se empaqueta y se sube a un repositorio• Las herramientas de gestión de entornos se encargan de instalar el

paquete de la misma forma que instalan el resto de software

�6

Page 7: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Virtualización de entornos

• La virtualización permite crear y configurar distintos entornos en una única máquina física• Muy económico• Entornos controlables• Ejecuciones repetibles

• Software más popular• VirtualBox (Oracle)• vSphere Hypervisor (VMware)

�7

Page 8: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Vagrant

• Software open source, creado por Mitchel Hashimoto (@mitchellh)• Escrito en Ruby• Permite automatizar la creación, puesta en marcha, configuración y

aprovisionamiento de entornos virtuales

�8

Vagrant web site

Page 9: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Instalación de Vagrant

• Funciona inicialmente con VirtualBox• Fácil instalación mediante paquetes nativos del SO• Se instala el comando vagrant!• Posibles comandos:

�9

Page 10: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Inicializando y descargando una box

• Se crea un directorio y se ejecuta el comando vagrant init para crear un fichero Vagrantfile que contiene una configuración por defecto

!

!

• Se descarga una máquina virtual vacía (box) de una URL con el comando vagrant box add nombre URL

�10

$ mkdir prueba-vagrant!$ cd prueba-vagrant!$ vagrant init

$ vagrant box add precise32 http://files.vagrantup.com/precise32.box!Downloading box from URL: http://files.vagrantup.com/precise32.box!Extracting box...te: 568k/s, Estimated time remaining: 0:00:02))!Successfully added box 'database' with provider 'virtualbox'!

Page 11: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Boxes

• Las boxes son esqueletos de máquinas virtuales de la plataforma de virtualización con la que Vagrant esté trabajando

• Lista de boxes oficiales: https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Boxes

• Lista de boxes de la comunidad: http://www.vagrantbox.es • Contienen lo básico para poder poner en marcha Vagrant:

• Gestor de paquetes• ssh• Usuario ssh• Chef o Puppet (aunque no es necesario, lo veremos después)

• Se guardan en el directorio ~/.vagrant.d/boxes

�11

Page 12: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Cómo usar una box

• Un primer ejemplo• Fichero Vagrantfile!

!!!!

• Para poner en marcha la máquina virtual y conectarse por ssh: $ vagrant up $ vagrant ssh

�12

Vagrant.configure("2") do |config|! config.vm.box = "precise32"!end

Page 13: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Carpeta compartida

• Vagrant comparte automáticamente el directorio de la máquina host (el directorio con el fichero Vagrantfile) en el directorio /vagrant de la máquina virtual

�13

$ vagrant up!Bringing machine 'default' up with 'virtualbox' provider...![default] Booting VM...![default] Waiting for machine to boot. This may take a few minutes...![default] Machine booted and ready!![default] Mounting shared folders...![default] -- /vagrant![default] VM already provisioned. Run `vagrant provision` or use `--provision` to force it!$ vagrant ssh !Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)!! * Documentation: https://help.ubuntu.com/!Welcome to your Vagrant-built virtual machine.!Last login: Fri Sep 14 06:22:31 2012 from 10.0.2.2!vagrant@precise32:~$ pwd !/home/vagrant!vagrant@precise32:~$ ls /vagrant!Vagrantfile

Page 14: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Aprovisionamiento

• Es posible automatizar la instalación de software en las máquinas virtuales definiendo un script en el fichero bootstrap.sh en el mismo directorio del Vagrantfile:

!

• Y añadiendo una instrucción en Vagrantfile:

�14

#!/usr/bin/env bash!!apt-get update!apt-get install -y apache2!rm -rf /var/www!ln -fs /vagrant /var/www

Vagrant.configure("2") do |config|! config.vm.box = "precise32"! config.vm.provision :shell, :path => "bootstrap.sh"!end

Page 15: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Puesta en marcha

• El comando vagrant reload --provision vuelve a lanzar la máquina virtual y ejecuta el aprovisionamiento:

�15

$ vagrant reload —-provision!... se ejecuta el script bootstrap.sh !$ echo "Hola mundo" > hola.txt!$ vagrant ssh!vagrant@precise32:~$ wget -qO- 127.0.0.1/hola.txt!Hola mundo

Page 16: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Configuración de la red

• El fichero Vagrantfile permite también configurar la red de la máquina virtual con distintas opciones• Reenvío de puertos• Asignación de dirección IP estática• Definición de redes privadas entre máquinas (documentación de Vagrant)!

• Ejemplo de reenvío de puertos!!!!!

• Si hacemos vagrant reload podremos acceder en la máquina host al servidor web en http://127.0.0.1:4567

�16

Vagrant.configure("2") do |config|! config.vm.box = "precise32"! config.vm.provision :shell, :path => "bootstrap.sh"! config.vm.network :forwarded_port, host: 4567, guest: 80!end

Page 17: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Múltiples máquinas

• Es posible controlar distintas máquinas con un único Vagrantfile!!!!!!!!

• Es posible arrancar, conectarse, etc. a cualquier máquina convagrant up <machine-name>

• Es posible comunicar una máquina con otra a través de la red privada

�17

Vagrant.configure("2") do |config|! config.vm.provision "shell", inline: "echo Hello"!! config.vm.define "web" do |web|! web.vm.box = "apache"! end!! config.vm.define "db" do |db|! db.vm.box = "mysql"! end!end

Page 18: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Otros comandos

• vagrant halt: para la máquina• vagrant destroy: elimina el estado de la máquina (no borra la box)• vagrant status: muestra el estado de las máquinas

�18

Page 19: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Herramientas de gestión de entornos

• Por defecto la configuración (aprovisionamiento) de la máquina Vagrant se hace con un script de shell

• Es posible utilizar otras herramientas de mayor nivel, independientes del shell y del SO usado, como Puppet o Chef

�19

Vagrant.configure("2") do |config|! config.vm.provision "puppet_server" do |puppet|! puppet.puppet_server = "puppet.example.com"! puppet.puppet_node = "node.example.com"! puppet.options = "--verbose --debug"! end!end

Page 20: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Introducción a Puppet

• Permite automatizar la gestión toda la infraestructura de máquinas de una empresa

• Terminología:• Nodo: máquina que mantiene una configuración determinada• Puppet master: servidor de Puppet que chequea la

configuración de los nodos cada 30 minutos• Puppet agent: agente de Puppet que se ejecuta en cada

nodo y se comunica con el Puppet master• Estado deseado: Configuración definida para cada uno de

los nodos• Cada nodo envía al Puppet master datos sobre su estado actual• Si un nodo no se encuentra en la configuración deseada, el

maestro le envía detalles de su configuración y el agente realiza los cambios necesarios en el nodo para volver al estado deseado

�20

Page 21: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Introducción a Puppet

�21

http://puppetlabs.com/puppet/what-is-puppet

Page 22: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Introducción a Puppet

�22

http://puppetlabs.com/puppet/what-is-puppet

Page 23: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Descripción de la configuración de un nodo

• La configuración de un nodo se describe mediante la definición de recursos• Cada recurso es una instancia de un tipo de recurso, tiene un nombre, unos

atributos (definidos por el tipo) y unos valores para cada atributo• Puppet usa su propio lenguaje para definir los recursos!!!!!!!

• En los recursos se define el estado deseado

�23

user { 'dave': ensure => present, uid => '507', gid => 'admin', shell => '/bin/zsh', home => '/home/dave', managehome => true, }

Page 24: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Tipos de recursos

• Es conveniente tener a mano la chuleta de tipos de recursos

�24

• Otros importantes• notify• exec• cron• user• group

• The Trifecta• file• package• service

Page 25: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Consola de administración

• La versión enterprise de Puppet (gratuita hasta 10 nodos) tiene herramientas y utilidades para simplificar la gestión, como la consola de administración

�25

Page 26: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Vídeo de Puppet enterprise

�26

http://www.youtube.com/watch?v=j8ImF23jZAg#t=1

Page 27: Continuous Delivery (y 3) · 2013-12-18 · Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Entornos de prueba • La última parte de la tubería

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Lecturas

• Jez Humble, Continuous Delivery, pp. 152-168

�27