> Manuales > Manual de Git

Qué es GitLab, qué le diferencia de sus competidores como GitHub o Bitbucket y qué herramientas engloba, además de los repositorios remotos Git, para gestionar los proyectos de desarrollo.

GitLab nació como un sistema de alojamiento de repositorios Git, es decir, un hosting para proyectos gestionados por el sistema de versiones Git. Sin embargo, alrededor de esta herramienta han surgido muchas otras herramientas muy interesantes para programadores y equipos de desarrollo, que envuelven todo el flujo del desarrollo y el despliegue de aplicaciones, test, etc.

Sin duda, para dar una idea de lo que es GitLab, lo más rápido sería compararlo con uno de sus competidores, GitHub, pues éste último es especialmente conocido en el mundo del desarrollo de software. Todos más o menos estamos familiarizados con lo que ofrece, la gestión de repositorios, las issues, los pull request, GitHub Pages, etc. GitLab sería algo muy similar a lo que encontramos en GitHub, aunque a veces con otros nombres. Otras alternativas de programas o servicios para Git como Bitbucket están muy por detrás en posibilidades.

Aunque GitHub es un mounstruo, en cuanto a número de repositorios y funcionalidad, GitLab ha conseguido llegar aún más lejos, ofreciendo un conjunto más amplio de servicios que harán las delicias no solo de desarrolladores, sino también de devops.

Instalar en tu servidor o usarlo como servicio web

La principal diferencia entre GitLab y sus competidores es que GitLab se ofrece como un software libre que puedes descargar e instalar en cualquier servidor. Esta posibilidad permite usar GitLab para una empresa, profesional u organización en sus propios servidores, sin ningún coste adicional.

Nota: Obviamente, si instalas tu propio GitLab para usarlo en tu propia empresa, te obliga a mantener el servidor, configurarlo, actualizar el software, etc. Trabajo que no deja de representar un gasto de tiempo, lo que al final se traduce en dinero. Es el motivo por lo que muchas empresas prefieren acabar pagando para disfrutar de GitLab como servicio.

La otra alternativa es usar GitLab directamente de GitLab.com, pagando por el servicio. Esto permite disponer de todo el poder de GitLab y sus herramientas colindantes, sin invertir tiempo en configuración, aprovechando sus ventajas desde el primer minuto. Además, las versiones del servicio "en la nube" tienen muchas herramientas adicionales, funcionalidades que superan con diferencia a la versión que se ofrece para instalar como software libre.

Por último, GitLab también se ofrece sin coste para publicar repositorios de software libre, igual que su competidor GitHub. En este caso, aunque GitLab pueda disponer de algunos servicios extra que justifiquen trabajar con la herramienta, lo cierto es que GitHub sigue siendo el sitio preferido donde ubicar un proyecto, dado que diversos sistemas de gestión de dependencias, como npm, Composer, etc., trabajan directamente contra ellos.

Nota: Para quien desee aprovechar las ventajas de GitLab en un proyecto publicado en GitHub existe la posibilidad de hacer un espejo del repositorio. GitLab, cada vez que el repo se actualiza en GitHub es capaz de traerse los cambios. Los desarrolladores desde GitLab, con el repositorio siempre actualizado, pueden realizar uso de los servicios extra, como los procesos de integración continua o despliege continuo.

En resumen, si queremos usar GitLab gratis, para alojar en remoto un repositorio Git en general, la mejor alternativa es que lo instalemos gratuitamente en una de nuestras máquinas. Sin embargo, si queremos ahorrarnos tiempo y no nos importa pagar un poco, la versión en la nube está mucho más completa y nos permite olvidarnos del servicio y concentrarnos en el desarrollo de nuestros programas.

Cómo usar GitLab

GitLab es una herramienta basada en Git, que usas de la misma manera que cualquier otra herramienta similar. Generalmente usas Git a través de la línea de comandos, o a través de programas de interfaz gráfica, o del propio editor de código. Toda esa operativa que ya conoces y que hemos explicado en el Manual de Git, no cambia.

Además del hosting remoto para repositorios GitLab ofrece una interfaz web para controlar el repositorio y muchas otras herramientas. Ofrece la posibilidad de examinar el código en cualquiera de sus versiones, realizar acciones relacionadas con el sistema de repositorios como mergear el código de versiones de proyecto o gestionar las "pull request" (que en GitLab se llaman "merge request"), gestionar problemática de tu software diversa, automatizar procesos como el despliegue o la ejecución de pruebas del software, etc. Toda esta operativa la realizas, o configuras, en GitLab por medio de una web.

Por tanto, para usar GitLab simplemente necesitas las mismas herramientas que ya utilizas en tu día a día, el terminal o un programa de interfaz gráfica para gestionar tu repositorio, así como el navegador web para acceder a el ecosistema de herramientas disponible en el sitio de GitLab. Por supuesto, todas estas herramientas las puedes usar desde cualquier ordenador conectado a Internet, independientemente de su sistema operativo.

Nota: ya, si nos referimos a cómo usar nuestra propia instalación de GitLab, y qué necesitamos para instalar el software libre en nuestros propios servidores, la respuesta es que lo más normal es que instales GitLab en un servidor Linux, ya que es su entorno natural. Generalmente instalar GitLab es tan sencillo como instalar cualquier otro software en Linux, solo que necesitarás configurar además una serie de programas adicionales, que usa GitLab por debajo, para que el servicio funcione de manera fina. Esta parte puede que no sea tan fácil para una persona que no tenga conocimientos sólidos de administración de sistemas.

Funcionalidades de GitLab

En GitLab podemos gestionar principalmente proyectos, Grupos y Sinppets. Los proyectos son los protagonistas del sistema, básicamente repositorios de software gestionados por GitLab y todo el ecosistema GitLab. Los grupos son básicamente empresas y usuarios. Los snippets por su parte son como pedazos de código que puedes dejar para hacer cualquier cosa.

Como decimos, dentro de los proyectos es donde se aglutinan la mayoría de las funcionalidades que vamos a resumir:

Overview:

Es un listado de todo el proyecto, los archivos, los README.md. Es parecido a lo que vemos cuando accedemos a un proyecto con GitHub. Te da el resumen del repositorio, archivos, commits, etc.

Luego tiene dos subsecciones: En Activity del proyecto te ofrece toda la actividad, de una manera estadística. En Cycle Analytics además te ofrece algo muy novedoso, no disponible en otras herramientas. Básicamente informa el tiempo que se tarda en realizar una funcionalidad, desde que tienes la idea hasta que se incorpora al software, de modo que cualquier persona, incluso sin conocimientos de programación, puede saber el tiempo que ocupó el hacer las tareas. Una información muy valiosa que puede ayudar a futuro a estimar mejor el tiempo de trabajo necesario para nuevas funcionalidades. Obviamente, cuantas más issues tengas en el sistema, más datos tendrás para saber el tiempo que necesitas para las próximas tareas.

Repository:

Dentro de la sección "Repository" tenemos varias opciones diversas que afectan al repositorio del proyecto.

Tenemos "Files", donde se puede navegar por los directorios y archivos, cuyo código podemos ver, e incluso editar los ficheros. Está disponible una visualización por ramas y dispone de utilidades diversas para poder hacer cosas relacionadas con el repositorio remoto, ahorrando la necesidad de lanzar comandos. Tiene un buscador de archivos muy potente.

En "Commits" encontramos un listado de todos los commits realizados contra el repositorio, junto con datos específicos de cada uno de ellos.

Las ramas "Branches" sirven para ver las ramas que tenemos en el repositorio.

La siguiente sección, "Tags", es importante también, pues es el mecanismo disponible en Git para definir puntos del estado del código, correspondientes a cada release.

Además esta sección tiene otras áreas también importantes, que os dejamos para vuestra propia investigación. Especialmente sería destacable la parte de "Locked files", disponible solo en GitLab como servicio, que es algo que no ofrece el propio sistema de control de versiones Git pero que han implementado dentro de GitLab, que permite bloquear un fichero para que solo ciertas personas lo puedan editar.

Issues:

Este es otra de las grandes utilidades de GitLab, que permite definir cualquier problema que se detecta en el software y darle seguimiento. Seguro que las conocemos porque es una de las partes fundamentales de GitHub y habremos navegado por ellas en decenas de ocasiones.

Básicamente nos permite ver las issues generadas en un proyecto, mantener discusiones sobre ellas, y controlar los flujos de trabajo para su resolución, permitiendo definir las personas que deben resolverla, el tiempo estimado y el usado, la fecha límite, el peso de las tareas, etc.

En GitLab han publicado otra interesante innovación que es un tablero de issues (Issue Boards), que permite visualizar las tareas, de una manera similar a los boards de Trello. Como gestores somos capaces de definir los tableros y las etiquetas. GitLab, por medio de la gestión de las Issues, es capaz actualizar el estado de las tareas, permitiendo visualizar su evolución por medio de los tableros.

Otra cosa muy interesante es el "Service desk", que te ofrece un email que lo puedes proporcionar al cliente. Sin que el cliente se registre en GitLab, ni tenga acceso al proyecto, puede enviar mensajes a ese email, adjuntando texto, imágenes y archivos. GitLab, al recibir el correo, da de alta automáticamente una issue con ese contenido.

Merge Request:

Son como las Pull Request de GitHub. Te permiten controlar todas las solicitudes de combinación o unión de código de distintas ramas o forks. Es muy importante que los merges se resuelvan mediante la interfaz gráfica, ya que nos ofrece muchas posibilidades interesantes, como automatización de tests, la posibilidad de revisión de los cambios por parte de componentes del equipo, implementar diversas políticas de control sobre el código del proyecto, etc.

CI/CD:

Es una de las maravillas que dispone GitLab, una herramienta sencilla y muy útil para los procesos de integración continua y despliegue continuo. Existen muchas herramientas que se pueden integrar para automatizar los procesos y llegar a crear flujos de trabajo completamente automatizados. De modo que se lancen los test y si todo va bien se puedan realizar una serie de tareas definida, que pueden llegar a producir el despliegue automático de las aplicaciones.

Solo disponer de esta sección es suficiente motivo para pasarse a GitLab. No llega la complejidad de herramientas específicas como Jenkins, pero resuelve de manera muy potente problemas similares.

GitLab es mucho más

Gitlab no se queda aquí, existen decenas de herramientas para hacer un montón de procesos, plugins, integraciones con diversos servicios útiles en el día a día de los equipos de desarrollo, etc.

Tenemos un vídeo en el que explicamos con mucho más detalle todas las posibilidades de GitLab y lo comparamos con otros sistemas similares. Además estamos impartiendo el Curso de GitLab en EscuelaIT, en el que podrás aprender lo básico para comenzar con Git, pero sobre todo la manera de sacar todo el partido de las herramientas disponibles en GitLab.

Puedes dar una vuelta por GitLab y examinar las opciones y posibilidades. Al ritmo que van, seguro que cuando entres habrán sacado novedades representativas. Pero si quieres que te guiemos en esa visita, puedes consultar el siguiente vídeo. También encontrarás en este vídeo un resumen de lo que se denomina el "GitLab Flow", un conjunto de prácticas que son aconsejables para mantener un flujo adecuado en todo lo que sería el desarrollo de software, que nos asegure la calidad y facilidad de mantenimiento y trabajo en equipo.

Jon Torrado

CTO de GamersWalk. Entusiasta del desarrollo web con fuerte conocimiento en Symf...

Manual