f500.project_deploy_module

Módulo de despliegue de proyectos (deploy_helper)

El módulo incluido es el módulo propuesto deploy_helper para ansible-modules-extra.

Explicación general, comenzando con un ejemplo de la estructura de carpetas para un proyecto:

raíz: lanzamientos: - 20140415234508 - 20140415235146 - 20140416082818

compartido:
    - sesiones
    - subidas

actual: -> lanzamientos/20140416082818

La carpeta 'lanzamientos' contiene todos los lanzamientos disponibles. Un lanzamiento es una compilación completa de la aplicación que se está desplegando. Esto puede ser un clon de un repositorio, por ejemplo, o una sincronización de una carpeta local en tu sistema. Tener carpetas con marcas de tiempo es una forma de tener lanzamientos distintos, pero puedes elegir tu propia estrategia como etiquetas de git o hashes de commit.

Durante un despliegue, se debe crear una nueva carpeta en la carpeta de lanzamientos y realizar cualquier paso de construcción requerido. Una vez que la nueva construcción esté lista, el procedimiento de despliegue se 'finaliza' reemplazando el enlace simbólico 'actual' con un enlace a esta construcción.

La carpeta 'compartido' alberga cualquier recurso que se comparte entre lanzamientos. Ejemplos de esto son los archivos de sesión del servidor web o archivos subidos por los usuarios de tu aplicación. Es bastante común tener enlaces simbólicos desde una carpeta de lanzamiento que apunten a una subcarpeta compartida, y la creación de estos enlaces se automatizaría como parte de los pasos de construcción.

El enlace simbólico 'actual' apunta a uno de los lanzamientos. Probablemente el más reciente, a menos que un despliegue esté en curso. La raíz del servidor web para el proyecto pasará a través de este enlace simbólico, por lo que el 'tiempo de inactividad' al cambiar a un nuevo lanzamiento se reduce al tiempo que toma cambiar el enlace.

Para distinguir entre compilaciones exitosas y las que están sin terminar, se puede colocar un archivo en la carpeta del lanzamiento que está en progreso. La existencia de este archivo lo marcará como sin terminar, y permitirá que un procedimiento automatizado lo elimine durante la limpieza.

Uso típico:

- nombre: Inicializar la raíz del despliegue y recoger datos
  deploy_helper: path=/ruta/a/la/raíz
- nombre: Clonar el proyecto a la nueva carpeta de lanzamiento
  git: repo=git://foosball.example.org/ruta/al/repo.git dest={{ deploy_helper.new_release_path }} version=v1.1.1
- nombre: Agregar un archivo sin terminar, para permitir la limpieza al finalizar con éxito
  archivo: path={{ deploy_helper.new_release_path }}/{{ deploy_helper.unfinished_filename }} state=touch
- nombre: Realizar algunos pasos de construcción, como ejecutar tu gestor de dependencias
  composer: comando=install working_dir={{ deploy_helper.new_release_path }}
- nombre: Crear algunas carpetas en la carpeta compartida
  archivo: path='{{ deploy_helper.shared_path }}/{{ item }}' state=directory
  con_items: ['sesiones', 'subidas']
- nombre: Agregar enlaces simbólicos desde el nuevo lanzamiento a la carpeta compartida
  archivo: path='{{ deploy_helper.new_release_path }}/{{ item.path }}'
        src='{{ deploy_helper.shared_path }}/{{ item.src }}'
        state=link
  con_items:
      - { path: "app/sesiones", src: "sesiones" }
      - { path: "web/subidas",  src: "subidas" }
- nombre: Finalizar el despliegue, eliminando el archivo sin terminar y cambiando el enlace simbólico
  deploy_helper: path=/ruta/a/la/raíz release={{ deploy_helper.new_release }} state=finalize

Recuperando datos antes de ejecutar un despliegue

- nombre: Ejecutar 'state=query' para recoger datos sin cambiar nada
  deploy_helper: path=/ruta/a/la/raíz state=query

Recuerda establecer el parámetro 'release' cuando realmente llames a 'state=present' más tarde

- nombre: Inicializar la raíz del despliegue
  deploy_helper: path=/ruta/a/la/raíz release={{ deploy_helper.new_release }} state=present

todas las rutas pueden ser absolutas o relativas (al parámetro 'path')

- deploy_helper: path=/ruta/a/la/raíz
                 releases_path=/var/www/proyecto/lanzamientos
                 shared_path=/var/www/compartido
                 current_path=/var/www/activo

Usando tu propia estrategia de nombrado para lanzamientos (una etiqueta de versión en este caso):

- deploy_helper: path=/ruta/a/la/raíz release=v1.1.1 state=present
- deploy_helper: path=/ruta/a/la/raíz release={{ deploy_helper.new_release }} state=finalize

Usando un nombre de archivo sin terminar diferente:

- deploy_helper: path=/ruta/a/la/raíz
                 unfinished_filename=README.md
                 release={{ deploy_helper.new_release }}
                 state=finalize

Posponiendo la limpieza de compilaciones más antiguas:

- deploy_helper: path=/ruta/a/la/raíz release={{ deploy_helper.new_release }} state=finalize clean=False
- deploy_helper: path=/ruta/a/la/raíz state=clean

O ejecutando la limpieza antes del nuevo despliegue

- deploy_helper: path=/ruta/a/la/raíz state=clean
- deploy_helper: path=/ruta/a/la/raíz state=present

Manteniendo más lanzamientos antiguos:

- deploy_helper: path=/ruta/a/la/raíz release={{ deploy_helper.new_release }} state=finalize keep_releases=10

O, si usas 'clean=false' en la finalización:

- deploy_helper: path=/ruta/a/la/raíz state=clean keep_releases=10

Eliminando toda la carpeta raíz del proyecto

- deploy_helper: path=/ruta/a/la/raíz state=absent

Depurando los datos devueltos por el módulo

- deploy_helper: path=/ruta/a/la/raíz
- debug: var=deploy_helper

Licencia

LGPL

Información del Autor

Ramon de la Fuente, ramon@delafuente.nl

Acerca del proyecto

Deploy_helper module for building (Capistrano like) deploy roles

Instalar
ansible-galaxy install f500.project_deploy_module
Licencia
lgpl-3.0
Descargas
6.8k
Propietario
Open source contributions by Future500