Importancia de GIT

Dentro del desarrollo de software existen distintos tipos de herramientas que nos ayudan a solventar alguna necesidades específicas, las cuales facilitan la parte de desarrollo, implementación, despliegue, documentación, o testing. El día de hoy yo les hablaré de una herramienta para desarrollo de software profesional que nosotros internamente usamos en cada uno de nuestros proyectos, GIT.

Pero para poder hablar de git, primero tenemos que saber qué es, de dónde surge y cuál es su función.

Git es un sistema de control de versiones, el cual es distribuido, es decir, que bajo un mismo proyecto múltiples programadores pueden trabajar y desarrollar en conjunto. Es de código abierto así que es totalmente gratuito, se puede adaptar fácilmente a un proyecto pequeño así como a uno grande, cuenta con una gran documentación en la web y es muy usado por los programadores, es una herramienta muy útil a la hora de hacer correcciones a bugs y documentación de proyecto ya que cuenta con una línea del tiempo de desarrollo.

Git es un sistema multiplataforma, lo que quiere decir que podemos usarlo con Windows, Linux o Mac OS. Git también cuenta con plataformas de desarrollo colaborativo, o también llamadas red social de los desarrolladores, donde se alojan los repositorios, el código se almacena de forma pública pero se puede hacer privado con una cuenta de pago, algunos ejemplos de esto son github.com o gitlab.com.

En el caso de nuestra empresa, nosotros usamos git y lo combinamos con el uso de gitlab ya que este nos ayuda a hacer CI/CD (continuous integration / continuous delivery) que son terminos muy utilizados en el DevOps.

Para ponerlos un poco más en contexto CI es un proceso en donde cada cambio que realizamos en nuestro código debe ser testeado y verificado por las pruebas que hemos escrito con anterioridad.

CD es el mismo proceso anterior, solo que de una manera más automatizada y además nuestros tests de aceptación o acceptance tests deben ser de una gran calidad. Porque Continuous Delivery se asegura de que cada cambio realizado esté listo para ser lanzado a producción.

Para trabajar eficientemente con git es necesario tener un gitflow eficiente pero, ¿qué es un gitflow?, según la pagina oficial de Github https://github.com/doapps/software/wiki/Gitflow.

Gitflow es un flujo de trabajo de basado en git que fue publicado y popularizado por Vincent Driessen. El flujo de trabajo de Gitflow define un modelo de ramificación estricto, diseñado en torno a la versión del proyecto. Esto proporciona un marco robusto para la gestión de proyectos grandes.

¿Por qué usar Gitflow?

Por los siguientes motivos:

  1. Desarrollo Paralelo
  2. Colaboración
  3. Área de puesta en escena de la versión
  4. Soporte para reparaciones de emergencia

Nuestro gitflow es uno de los más estándares, comenzamos con dos ramas principales que son máster y develop, la rama máster está protegida y nunca se sube nada directamente a ninguna de estas cuando se va a realizar una nueva funcionalidad. Nunca se trabaja sobre ninguna de ellas lo que se hace es posicionarse en develop, actualizar con el repo remoto y después crear otra rama en la que se trabajará con el prefijo feature, una vez terminas la funcionalidad se sube esa nueva rama al repo remoto para ser revisada por medio de pipelines, y de ser aprobada, se integra con develop.

Cuando se va a corregir un bug el proceso es bastante parecido, solo que en lugar de feature se usa el prefijo Hot-fix, cuando el proyecto esté listo para mandarse a producción se hace un merge entre develop y máster para crear la primer versión o relace esto se repite conforme a los relace que son lanzados.

Como pueden ver, git es una herramienta muy útil para los desarrolladores que cuando es manejada debidamente, acorta tiempos de desarrollo y ayuda con la gestión de software, en el siguiente enlace les dejaré algunos de los comandos que son más usados en git por si les interesa.

https://github.com/miguel199529/Notas/blob/master/GIT.md

Miguel Ángel López
www.girasolo.com
www.ThinkBigPink.com

¿Qué es DevOps?

¿Alguna vez has escuchado hablar sobre DevOps? existen varios puntos de vista sobre el término DevOps ( Develop / Operations ), pero la gran mayoría coinciden en que es una cultura que promueve la comunicación entre el departamento de desarrollo (Development) y el departamento de Administración de sistemas (Operations). 

La cultura DevOps tiene como objetivo acelerar la entrega de software de manera ágil asegurando la calidad del software, todo esto, por medio de buenas prácticas, herramientas de integración de código, pruebas automatizadas, administración de infraestructura, etc.

Las prácticas más populares de la cultura DevOps son las siguientes:

Infraestructura como código: Infraestructura como código es un método de automatización que está basada en prácticas de desarrollo de software. Los cambios realizados a los sistemas y sus configuraciones específicas son bien definidas y capturadas en archivos de configuración (scripts, playbooks, manifests, módulos).

Integración continua ( CI ): La integración continua es una práctica de desarrollo de software mediante la cual los desarrolladores combinan los cambios en el código en un repositorio central de forma periódica, tras lo cual se ejecutan versiones y pruebas automáticas.

Entrega continua ( CD ): La entrega continua es una práctica de desarrollo de software mediante la cual se preparan automáticamente los cambios en el código y se entregan a la fase de producción.

Herramientas DevOps más populares: Red Hat Ansible, Jenkins,Terraform, Chef, Docker, GIt, GitLab, Kubernetes, Nagios, Puppet.

DevOps en BigPink

Nosotros en BigPink adoptamos una cultura DevOps que va desde la configuración de los proyectos, testing y pruebas de integración de código hasta entornos automatizados con despliegue continuo ( continuous delivery ), para ello, implementamos las siguientes practicas y herramientas:

Configuración de proyectos: Todos los proyectos son configurados con GIT como sistema de control de versiones de software, así como el uso estricto de linters para detectar errores de estilo y mantener el código limpio.

Infraestructura como código (IaC): Toda la infraestructura la manejamos como código por medio de configuración de plantillas cloud formation para Amazon Web Services. 

Integración continua (CI): Para la integración del código utilizamos GitLab como plataforma de repositorios privados en donde por medio de Pipelines ejecutamos varias pruebas (build, linters, testing, etc.) para asegurar la calidad antes de que el código sea integrado en el repositorio central.


Entrega continua (CD): Para lograr la entrega continua se automatiza el despliegue de nuestros proyectos por medio de Pipelines programadas en GitLab que se conectan a nuestra infraestructura previamente montada en Amazon Web Services, una vez pasadas las pruebas de integración del código.

Edgar Leyva
www.girasolo.com
www.ThinkBigPink.com