Abe Estrada

GitLab en Docker Local

Después de migrar mi blog a GitLab utilizando el sistema de CI para hacer el “build” de las páginas con hugo, decidí intentar tener una réplica de GitLab más los Runners para poder hacer lo mismo que hago en el sitio de GitLab pero de forma “offline” en mi computadora.

GitLab CE es un proyecto de Software Libre que permite descargar el código y ejecutarlo en mi computadora, así que empecé a buscar documentación sobre la versión de Docker de GitLab, luego de varios intentos, este es el archivo necesario para ejecutar el servicio de GitLab en una máquina virtual dentro de Docker con un Runner para la ejecución del código al momento de hacer git push.

docker-compose.yaml

version: '2'

services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.dev'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
                external_url 'http://gitlab.dev'
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - './gitlab/config:/etc/gitlab'
      - './gitlab/logs:/var/log/gitlab'
      - './gitlab/data:/var/opt/gitlab'
    network_mode: 'bridge'

  runner:
    image: 'gitlab/gitlab-runner:v1.6.1'
    restart: always
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock'
      - './gitlab/runner:/etc/gitlab-runner'
    links:
      - 'web:gitlab.dev'
    network_mode: 'bridge'

Por el momento se tiene que utilizar network_mode: 'bridge' para tener las dos máquinas virtuales en esta red compartida para que se puedan comunicar. Es un bug que en un futuro puede ser solucionado.

Luego se crean los directorios necesarios.

$ mkdir -p gitlab/{config,data,logs,runner}

Y se corren las máquinas virtuales con el siguiente comando docker-compose up -d.

Una vez que la máquina virtual esta ejecutandose en el “background” se accede a http://gitlab.dev y para tener acceso a esa url es necesario agregarla al archivo de hosts o en mi caso estoy utilizando devdns que es un ejecutable que redirecciona todas las llamadas de cualquier dominio .dev a localhost.

Tarda un poco en iniciar, así que hay que estar dando ‘refresh’ para ver cuando la instancia de GitLab ha iniciado.

El nombre de usuario es root y hay que asignarle una contraseña para iniciar.

Una vez que se tiene acceso a la aplicación, hay que agregar el Runner dentro del area de administración. Con el token que se ha generado podemos hacerlo desde la terminar.

Para esto hay que entrar a la shell de la máquina virtual que se esta ejecutando con la imágen del Runner con el siguiente comando: docker exec -it gitlab_runner_1 /bin/bash (en mi caso la máquina virtual se llama gitlab_runner_1) y hay que contestar la información que nos pide.

En el archivo /gitlab/runner/config.toml hay que agregar una linea para poder comunicar la instancia del runner con la instancia de gitlab:

config.toml

links = ["gitlab_web_1:gitlab.dev"]

Una vez hecho esto, el runner ha sido agregado.

Luego podemos crear repositorios en la instancia de GitLab CE que tenemos ejecutandose localmente en nuestra computadora y que se ejecute el código dentro del archivo .gitlab-ci.yml dentro de la instancia de runner que tambien tenemos en la computadora, como en mi caso, un blog con Hugo.

Para actualizar la versión de GitLab solo es necesario ejecutar el siguiente comando.

$ docker-compose pull
$ docker-compose up -d

Docker va a descargar la imágen más reciente y podrá ser ejecutada utilizando la información y repositorios sin modificar, ya que son guardados independientes de la imágen de GitLab.

Referencias