Skip to content
This repository was archived by the owner on Apr 22, 2020. It is now read-only.

Commit f5d5bed

Browse files
committed
New: Add 'AL - Releaseability and 'AL - Pipeline' pages
1 parent c1f38d8 commit f5d5bed

4 files changed

Lines changed: 66 additions & 6 deletions

File tree

es/application-lifecicle.md

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,52 @@
11
# Ciclo de vida
22

3-
Vamos a definir _Ciclo de vida_ del software como las actividades, técnicas, tácticas, servicios, procesos y herramientas relacionadas con la creación y explotación de una aplicación en todos sus aspectos. Sabemos que el _desarrollo_ supone la actividad principal, pero no es la única actividad. Cuanto más entidad tiene el proyecto software en el que estamos inmersos, más personas trabajan en él y más importancia tiene el concepto _Ciclo de Vida_.
3+
## Definición
4+
5+
Conjunto de actividades, técnicas, tácticas, servicios, procesos y herramientas relacionadas con la creación y explotación de una aplicación en todos sus aspectos. Sabemos que el _desarrollo_ supone la actividad principal, pero no es la única actividad. Cuanto más entidad tiene el proyecto software en el que estamos inmersos, más personas trabajan en él y más importancia tiene el concepto _Ciclo de Vida_.
46

57
Podemos extender el _Ciclo de Vida_ a otras actividades más allá de la puesta en producción del software, añadiendo métricas y alarmas en el entorno de producción, con _feedback loops_ que derivan en tareas de mantenimiento, soporte o características nuevas y que suponen modificaciones del código fuente que nos llevan [al punto de partida](#ciclo-de-vida).
68

7-
Lo más habitual es encontrar el concepto de _Ciclo de Vida_ asociado a una serie de pasos ejecutados en orden análisis, diseño, desarrollo, pruebas, integración, despliegue, quizá a un proceso interativo e incremental que se repite una y otra vez en el tiempo. Bajo cierto punto de vista, si es necesario disponer de una herramienta de orquestación tipo Jenkins, su instalación, configruación, despliegue y mantenimiento también forma parte del _Ciclo de Vida_, al igual que el resto de herramientas, servicios, actividades, técnicas, tácticas y procesos.
9+
Lo más habitual es encontrar el concepto de _Ciclo de Vida_ asociado a una serie de pasos ejecutados en orden: análisis, diseño, desarrollo, pruebas, integración, despliegue. O quizá a un proceso interativo e incremental que se repite una y otra vez en el tiempo. Bajo cierto punto de vista, si utilizamos servicios, por ejemplo una herramienta de orquestación como pueda ser Jenkins, su instalación, configuración, despliegue, mantenimiento y operación también forma parte del _Ciclo de Vida_, al igual que el resto de herramientas, servicios, actividades, técnicas, tácticas y procesos.
10+
11+
## Ciclo de vida como evolución
12+
13+
Es posible trabajar en un proyecto unipersonal y desarrollar el software editando el código directamente en el servidor. En este caso _Ciclo de Vida_ supone acceder al servidor y editar el código. Seguramente hubo actividades previas como configurar el servidor instalando lo necesario: servicio web, base de datosm, etc. Tal vez tengamos el servicio web y el de base de datos en nuestro PC, junto con algún IDE, para desarrollar y probar las cosas antes de subirlas al servidor.
14+
15+
Todas esas actividades formarán parte de nuestro _Ciclo de Vida_:
16+
17+
- Instalr y configurar las herramientas de desarrollo y los servicios en nuestro PC
18+
- Instalar y configurar los servicios en el servidor
19+
- Desarrollar y probar en nuestro PC
20+
- Acceder al servidor para subir código o editar código existente
21+
22+
A medida que la aplicación y el equipo de desarrollo del proyecto crecen vamos a incorporar lo necesario para que nuestros "entregables" tengan la máxima calidad posible: herramientas de gestión y seguimiento de tareas, entornos de desarrollo / pruebas / preproducción / producción, herramientas de control de código fuente, tests unitarios, test funcionales, servicios de alojamiento de código, servicios de integración continua con procesos de promoción del código, y un largo etcétera.
23+
24+
## Ciclo de vida como adaptación
25+
26+
El _Ciclo de Vida_ de cada aplicación puede ser diferente adaptándose a la complejidad de cada contexto. Dentro de una misma aplicación pueden coexistir variantes del _Ciclo de Vida_ para acomodar distintos componentes. Podría darse el caso de una aplicación formada por dos componentes, uno para los usuarios y otro para los administradores del sistema, en los que estén involucrados dos equipos de desarrollo direrentes.
827

9-
Es posible trabajar en un proyecto unipersonal y desarrollar el software editandol el código directamente en el servidor. En este caso _Ciclo de Vida_ supone acceder al servidor, editar el código, y listo. Seguramente hubo actividades previas como configurar el servidor instalando lo necesario: servicio web, base de datosm, etc. Aunque no hayamos prestado demasiada atención, nuestro _Ciclo de Vida_ incluye esas tareas.
28+
## CI-CD-CD
1029

11-
A medida que la aplicación y el equipo de desarrollo del proyecto crecen vamos a incorporar lo necesario para que nuestros "entregables" tengan la máxima calidad posible: herramientas de gestión de tareas e incidencias, entornos de desarrollo / pruebas / preproducción / producción, herramientas de control de código fuente, tests unitarios, test funcionales, servicios de alojamiento de código, servicios de integración continua con procesos de promoción del código, y un largo etcétera.
30+
Se trata de tres conceptos estrechamente relacionados con el _Ciclo de Vida_ que nos vamos a encntrar tarde o temprano en desarrollo de software.
1231

13-
El _Ciclo de Vida_ de cada aplicación puede ser diferente adaptándose a la complejidad de cada contexto. Dentro de una misma aplicación pueden coexistir variantes en su _Ciclo de Vida_ para acomodar distintos componentes. Podría darse el caso de una aplicación formada por dos componentes, uno para los usuarios y otro para los administradores del sistema, en los que estén involucrados dos equipos de desarrollo direrentes.
32+
- CI - _Continuous Integration_ (Integración Continua): Práctica de desarrollo de software en la que los miembros de un equipo integran su trabajo frecuentemente. El objetivo es detectar fallos cuanto antes.
33+
34+
- CD - _Continuous Delivery_ (Entrega Continua): Enfoque en el desarrollo de software por el que se garantiza que el software pueda ser liberado en cualquier momento.
35+
36+
- CD - _Continuous Deployment_ (Despliegue Continuo): Proceso automatizado de despliegue de cambios en producción. En general está dirigido por un Pipeline en una serie de pasos o etapas que llevan nuestros cambios desde el PC del desarrollador hasta el servidor de producción en un único proceso.
37+
38+
El concepto de _Entregabilidad_ del software supone aquellas actividades que el equipo del proyecto debe hacer para desarrollar y mantener automatismos que permitan el Despliegue Continuo de la aplicación en el entorno de producción. La _Entrega Continua_ se refiere concretamente este punto.
39+
40+
Gracias a estos automatismos, si tenemnos un grado alto de _Entregabilidad_ podemos garantizar que el despliegue de nuestros cambios se puede hacer en cualquier momento de manera confiable.
41+
42+
Mediante prácticas de _Integración Continua_ mezclamos de manera frecuente nuestros cambios en la rama principal de desarrollo para garantizar que lo que estamos desarrollando es sostenible en la aplicación, que nada deja de funcionar. Esta garantía se certifica con la ejecución de _pruebas_ de diverso tipo: unitarias, funcionales, de integración, de aceptación, de seguridad, de rendimiento, etc.
43+
44+
## Modelo de ejemplo
1445

1546
Trataremos un _Ciclo de Vida_ "tipo" definiendo:
1647

1748
- Configuración y puesta en marcha del [entorno local](application-lifecicle/al-local-environment.md) (ver [entornos](environments.md))
18-
- [Pipeline](application-lifecicle/al-pipeline.md): Develop, Build, Test, Deploy, Release
1949
- [Entregabilidad]((application-lifecicle/al-releaseability.md))
50+
- [Pipeline](application-lifecicle/al-pipeline.md): Develop, Build, Test, Deploy, Release
2051
- Etiquetas y versionado semántico
2152
- Changelog
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Ciclo de vida: Entregabilidad: Entorno local
2+
3+
(TBD)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Ciclo de vida: Pipeline
2+
3+
Es el proceso definido para gestionar todas las actividades que suceden desde que cambiamos una línea de cóodigo en nuestra aplicación hasta que esos cambios se despliegan en un entorno de producción.
4+
5+
## Ramas
6+
7+
Desde el punto de vista del repositorio de código y sus ramas, los cambios que realizamos en el código fuente de la aplicación siguen una ruta de promoción _hacia produccion_, "viajando" desde nuestra rama de característica como punto de partida (feature branch), donde trabajamos de manera aislada, y realizando distintas pruebas como test unitarios, de integración, de seguridad o de rendimineto por el camino. Puede haber etapas donde nuestro código se someta a una revisión por una persona o un comité antes de integrarse en otra rama.
8+
9+
Un escenario típico es avanzar el desarrollo en "feature branches" (feature/*) y realizar peticiones de integración (pull requests / merge requests) hacia la rama principal de desarrollo, generalmente denominada "develop". En este caso la rama "develop" no debe ser una rama de trabajo, sino una rama de integración y promoción de cambios hacia otras ramas, generalmente "master".
10+
11+
(TBR) (TBC)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Ciclo de vida: Entregabilidad
2+
3+
Una actividad muy importante en cualquier aplicación es la entrega, el despliegue o la puesta en producción. Creamos software para ser entregado de alguna forma.
4+
5+
Nos sirve de muy poco un desarrollo que funciona en la máquina del desarrollador (Eh! En mi local funciona). El software es evolución y adaptación, las características nuevas pueden suponer cambios en las configuraciones del servidor; supone un riesgo trabajar con una receta de puesta en producción obsoleta, con pasos que no hayamos ejercitado nunca.
6+
7+
Se hace necesario pues trabajar en la _Entregabilidad_ de nuestra aplicación. Lo habíamos definido como "aquellas actividades que el equipo del proyecto debe hacer para desarrollar y mantener automatismos que permitan el Despliegue Continuo de la aplicación en el entorno de producción".
8+
9+
El equipo del proyecto hace desarrollos que suponen cambios en la aplicación. Estos desarrollos se realizan en ramas de características (_feature branches_). A medida que se avanza en el desarrollo todos los esfuerzos se dirigen a que los cambios resuelvan lo que esté previsto deban resolver, a la vez que se mantiene el funcionamiento del resto de la aplicación. Es decir, que no "se rompe" nada.
10+
11+
Una vez que los cambios están listos, se llevan a la rama principal de desarrollo. El equipo del proyecto debe garantizar que esos cambios son _potencialmente entregables_, que se van a poder desplegar en el entorno de producción en cualquier momento, revisando y modificando, si es necesario, los procesos y _scripts_ de despliegue. Estos automatismos son al fin y al cabo software, código fuente que ha pasado por ciclos de desarrollo y pruebas.
12+
13+
La _Entregabilidad_ del software supone que los automatismos se han revisado y se han probado con los nuevos cambios. Las pruebas que se han realizado fuera del entorno de producción garantizan que en el momento del despliegue todo irá bien.
14+
15+
Haciendo iteraciones cortas y aumentando la frecuencia de entregas tendremos una _Entregabilidad_ más confiable, porque habremos ejecutado más veces los automatismos de despliegue. Si pasa demasiado tiempo entre relases, esa garantía y esa confianza es menor.

0 commit comments

Comments
 (0)