Version Management – Escogiendo “Branching Strategy” en un entorno de Integración continua

Una de las cosas importantes cuando se inicia el desarrollo de software es escoger la estrategia para mantener las versiones de los distintos componentes, ya sean fuentes, imágenes, código, archivos de configuración, documentación para los cuales tenemos diversas herramientas para realizarlo.

La estrategia de branching es una conducta que el equipo debe tomar respecto al software, que no depende del VCS, porque podemos realizar Trunk Based Development utilizando Git, no necesariamente estamos obligados a utilizar Git-Flow.

Veremos como hay quienes argumentan que la creación de branches aleja a los desarrolladores y los motiva a trabajar desunidos, motivo por el cual modelos más modernos apuntan a reducir la cantidad branches e incluso algunos colocan sólo un branch.

Sigue leyendo “Version Management – Escogiendo “Branching Strategy” en un entorno de Integración continua”

Añadiendo Jenkins al entorno para Integración continua

En el año 2010 cuando tuve por primera vez la necesidad de implementar prácticas de integración continua, continuous delivery y continuous deployment, tras ser sugerido por un colega que se encontraba trabajando en España para el BBVA de implementar éstas prácticas. En ese entonces sólo usábamos Collabnet Subversion para versionar el código, así que tuvimos que realizar muchos cambios al proyecto como convertir el proyecto a Maven, migramos a Gitlab Server, dejábamos los artefactos en Nexus Sonatype OSS, realizamos análisis con Sonarqube, jobs de Hudson CI para las construcciones, delivery y deploy sobre dos servidores de Apache Tomcat 6 con Replication Session. En las estaciones de trabajo teníamos Netbeans, con PMB y JRebel para el reload de código en caliente. A día de hoy ese entorno sigue funcionando tras casi 10 años de implementado.

En esta oportunidad toca añadir Jenkins, el fork de Hudson que tiene una gran acogida como herramienta de Continuous Integration, para ello se propone el siguiente escenario.

jenkins
Entorno propuesto
Sigue leyendo “Añadiendo Jenkins al entorno para Integración continua”

Generar nuestra Docker Machine conectada a nuestro Registry Mirror y Private Registry

Buenos días, siguiendo con la serie de post, en esta oportunidad muestro como poder crear nuestro servidor local de docker utilizando la docker-machine que se encuentra de Docker Toolbox, y enlazaremos desde la creación de la VM a nuestros servidores creados en las entradas anteriores:

El entorno quedaría como sigue:

Entorno configurado
Sigue leyendo “Generar nuestra Docker Machine conectada a nuestro Registry Mirror y Private Registry”

Generar nuestro Local Docker Container Registry Mirror (Caché) – SSL autofirmado

Buenos días, en esta oportunidad veremos como modificar la instalación de un Docker Registry que nos sirva como caché de imágenes de docker, esto debido a que es sabido que cuando utilizamos múltiples imágenes de Docker Hub las descargamos de internet en cada estación de trabajo, motivo por el cual si un equipo de desarrollo es grande, dependiendo de la cantidad de veces que realizen ciclos de construcciones y limpieza de las imágenes locales (dentro de la pc del developer) podría estar consumiendo ancho de banda y tiempo innecesario, que puede ser aprovecha de mejor manera.

Utilizaremos como base el pos anterior “Generar nuestro Local Docker Container Registry Server – SSL autofirmado“, para lo cual se plantea el siguiente esquema de configuración de nuestro entorno.

En el esquema planteado se propone utilizar dos servidores de Docker Registry:

  • icr-mirror-00.registry.com : Este registry estará configurado como mirror de Docker Hub (podría ser otro servidor), configurado sin autenticación.
    • Cuando realizemos un #docker pull
      • Se buscará la imagen en este servidor y si se encuentra la devolverá al cliente.
      • En caso de no encontrarla descargará la imagen del servidor (Docker Hub) , la devolverá al cliente y guardará una copia dentro de si mismo.
  • icr-docker-00.registry.com : Este registry será el que usemos para guardar las imágenes privadas, se encuentra protegido por usuario y contraseña.
Sigue leyendo “Generar nuestro Local Docker Container Registry Mirror (Caché) – SSL autofirmado”

Generar nuestro Local Docker Container Registry Server – SSL autofirmado

Buenos días,

Después de muchos años sin escribir en el blog, aprovechando la cuarentena por el COVID-19 aprovecho para publicar nuevamente.

Durante las clases que imparto en distintos entrenamientos que ofrezco, los alumnos me preguntaron cómo podían hacer para tener un Container Registry Server de forma local, al mismo estilo de Azure Container Registry (ACR), Amazon Elastic Container Registry (ECR), Google Container Registry (GCR), Docker Cloud Registry que sea capaz de persistir fuera de su entorno runtime de docker.

Esta solicitud me pareció interesante debido a que cuando empiezas a tener una gran cantidad de entornos de prueba, en muchos casos se puede llegar a destruir la instalación de docker, con lo cual las imágenes de docker descargadas, las construidas por tus propias iniciativas, se verían afectadas, asimismo a quienes empiezan a utilizar Jenkins con sus Jobs o Pipelines en el stage para el Continuous Delivery omiten las configuraciones que deben tenerse en cuenta para almacenar la imagen en un container registry externo.

El proyecto utiliza:

  1. Vagrant
  2. Virtualbox
  3. Docker CE, de la guía https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04
  4. docker-compose,
  5. Utilidad para autogenerar certificados firmados. https://github.com/ConnorAtherton/shell-helpers/blob/master/scripts/ssl_setup.sh
  6. Guía Oficial de Docker para montar un registry

Como se trata de tener un servidor lo más parecido al entorno real, le vamos a realizar una configuración para que sea accedido desde la red, esto lo logramos mediante un adaptador de tipo puente (brigde) el cual simula ser otro dispositivo conectado directo a la red.

Sigue leyendo “Generar nuestro Local Docker Container Registry Server – SSL autofirmado”

Desarrollo de Aplicaciones Web con Apache Tomcat – Parte 01 – Conceptos Basicos, Lo que se ve y no se ve

objetivos
objetivos

En las clases que dicto en la Universidad, o en cursos de entrenamiento a programadores es común encontrar a aquellos que omiten todo lo que sucede mientras se realiza una comunicación entre las aplicaciones cliente/servidor más aun cuando se tiene que migrar desde la programación de lenguajes como Foxpro, Clipper, Cobol, es por ello el objetivo de este primer videotutorial en el que he tratado de mantener consciente a aquel programador que empieza a desarrollar aplicaciones web de todo lo que ocurre desde que se inicia una petición en el cliente.

He comentado conceptos concernientes a:

  • Modelo OSI
  • Protocolos
  • Flujo de Datos
  • Estado de las peticiones
  • Html
  • Css
  • Javascript
  • DHTML
  • DOM
  • AJAX
  • WebSockets
  • WebServices
  • JSON

Haciendo las distinciones entre los Lenguajes de Marcado, Lenguajes de Hojas de Estilo, Lenguajes de Programación para utilizar en el navegador, limitaciones de Ajax y alternativas como Ajax Reverse, Comet, Ajax Push, Long Pooling.

Sigue leyendo “Desarrollo de Aplicaciones Web con Apache Tomcat – Parte 01 – Conceptos Basicos, Lo que se ve y no se ve”