Skip to content

GitLab

El presente documento consiste en una referencia ágil para introducirse a GibLab remitiéndonos a los comandos necesarios para su instalación con Docker y algo de DevOps (pipeline).

GitLab bajo Linux Debian/Ubuntu

Aunque se puede crear una cuenta gratuita en el sitio oficial, es posible usar GitLab localmente o en un servidor administrado por ti. Para Linux Debian o Ubuntu, se puede instalar ejecutando los siguientes comandos:

bash
sudo apt update
sudo apt upgrade -y
sudo apt install -y curl openssh-server ca-certificates perl
sudo apt install -y postfix
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo EXTERNAL_URL="https://gitlab.mydomain.com" apt install gitlab-ce

postfix es el servicio para enviar emails (SMTP), usado para notificaciones. Suele requerir un dominio (o subdominio) si se publica como sitio de Internet. De hecho, al instalarlo se solicita el modo de configuración, y se puede indicar 2 para sitio de Internet o 5 para uso local.

En caso de requerir reconfigurar el dominio (o subdominio) para GitLab, podría editarse la configuración ejecutando sudo vim /etc/gitlab/gitlab.rb para la variable external_url. Luego se necesitaría ejecutar sudo gitlab-ctl reconfigure.

En caso de no indicar una contraseña en el proceso de instalación de GitLab, ésta se puede encontrar en el archivo /etc/gitlab/initial_root_password (durante las próximas 24 horas).

GitLab bajo Docker

También es posible usar GitLab localmente con la imagen para Docker. Con el siguiente comando descargamos y ejecutamos GitLab CE (Community Edition)

bash
docker run gitlab/gitlab-ce

GitLab con cuenta en la Nube

Podemos usar directamente GitLab a través de Internet con su servicio aplicando, por ejemplo, a una cuenta gratuita. Para ello nos dirigimos al sitio: https://about.gitlab.com

Configurando clave SSH

bash
ssh-keygen -t rsa -b 2048 -C "GitLab access"

Este comando puede preguntar por el nombre del archivo y una palabra de paso. Suponiendo que el archivo lo llamemos gitlab obtenemos otro archivo con la llave pública que debemos reportar en la plataforma de GitLib. El contenido lo podemos ver con el siguiente comando:

bash
cat gitlab.pub

GitLab desde el Navegador

Accedemos desde un navegador a GitLab y creamos un repositorio. Luego podemos abrir la línea de comandos ubiándonos en un directorio para el ejemplo, y suponiendo que obtenemos la URL del repositorio hacemos lo siguiente:

bash
git clone https://gitlab.com/user/test.git
echo "Hi there!" > index.html
git add .
git commit -m "Initial stage"
git push

En el ejemplo, el repositorio corresponde a user con nombre test.
Se clona el repositorio, se agrega el archivo index.html y se confirman los cambios. Finalmente, se hace push al repositorio para actualizar nuestro proyecto de ejemplo.

Conexion con SSH

En términos generales, se genera localmente una clave SSH que deberá ser reportada en el perfil de la plataforma de GitLab. Para generar la clave localmente se puede ejecutar:

bash
ssh-keygen -t rsa -b 2048 -C "[email protected]"

Este comando solicita el nombre del archivo y genera tanto un archivo para la llave privada y otro público (extensión .pub). La opción -C se refiere a un comentario y se suele colocar un email.

El archivo publico se puede visualizar ejecutando algo como lo siguiente:

bash
cat mykey.pub

mykey.pub se refere al nombre obtenido para el archivo público y debe sustiturise respectivamente.

Una vez se pega la llave pública en el perfil de la plataforma, para clonar se sigue el siguiente formato de comando:

bash
git clone [email protected]:myrepo.git

Integración Continua con GitLab

El ejemplo en ejecución

Ahora podemos elaborar una imágen de Docker para el entorno de ejecución del proyecto de ejemplo. Para ello podemos crear un archivo Dockerfile con el siguiente contenido:

Dockerfile
FROM debian:buster-slim
WORKDIR /var/www/html
COPY index.html /var/www/html
RUN apt update && apt install -y git-core curl zip unzip
RUN apt install -y nginx
EXPOSE 80
CMD ["service", "nginx", "start"]

Se guarda y se ejecutan las siguientes sentencias:

shell
docker build -t test .
docker run -it -p 8100:80 --name webapp test

Y ejecutamos dentro del contenedor el siguiente comando:

bash
service nginx start

Este ejercicio nos aporta una prueba de concepto. Si se usa exit se detiene el contenedor y el servicio.

Configuración de Pipeline

yaml
stages:
  - init
  - deploy

hello:
  stage: init
  script:
    - echo "Hi there!"

deploy:
  stage: deploy
  script:
    - cd /var/www/html
    - git pull https://gitlab.com/user/test.git

Configuración de Runner

bash
wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
chmod 777 /usr/local/bin/gitlab-runner
gitlab-runner register
gitlab-runner run