Dockerizar Gitlab Gitlab-Runner Centos 7

Vamos a Dockerizar Gitlab, Gitlab-Runner paso a paso en este docker.

Recordemos deshabilitar el selinux y firewall, importante tener una buena configuración de DNS o en el archivo HOSTS, nuestro dominio se llamara dominio.local y también vamos a crear una Network de docker llamada app para que los contenedores puedan resolver por nombre DNS

Descargamos una imagen de Centos 7:

docker search centos

docker pull centos:7

docker images

Crear un directorio de trabajo:

mkdir laboratorio
cd laboratorio

Creamos un Network en docker:

docker network create app
docker network ls
docker network inspect app

Creamos la variable para un volumen permanente:

export GITLAB_HOME="/home/kiss/srv/gitlab"
echo $GITLAB_HOME
rm -rf  $GITLAB_HOME/*

Instanciamos el contenedor:

docker run -dti \
--hostname gitlab.dominio.local \
--publish 443:443 \
--publish 80:80 \
--publish 22:22 \
--name gitlab.dominio.local \
--restart=on-failure \
--network app \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab --privileged centos:7 /usr/sbin/init

Consultamos el contenedor:

docker ps
docker container inspect gitlab.dominio.local

Descargar el gitlab y gitlab-runner

https://about.gitlab.com/install/

https://docs.gitlab.com/runner/install/linux-manually.html

Copiamos el instalador gitlab y gitlab-runner dentro del contenedor

docker cp gitlab-ce-13.10.0-ce.0.el7.x86_64.rpm gitlab/tmp
docker cp gitlab-runner_amd64.rpm gitlab/tmp

Ingresamos en le contenedor:

docker exec -ti gitlab.dominio.local bash

Instalamos los pre-requisitos:

yum update
yum install -y xterm curl openssh-server ca-certificates postfix policycoreutils-python vim net-tools git

Instalamos gitlab:

rpm -ivh /tmp/gitlab-ce-13.10.0-ce.0.el7.x86_64.rpm

Modificamos el worker_timeout para evitar que nos errores por timeout, error 502:

sed -i "s/\# unicorn\['worker_timeout'\] = 60/unicorn\['worker_timeout'\] = 300/g" /etc/gitlab/gitlab.rb

Editamos la URL y la colocamos con nuestro dominio:

sed -i 's/gitlab.example.com/gitlab.dominio.local/g' /etc/gitlab/gitlab.rb

Iniciamos el servicio de gitlab Esto lo debes ejecutar cada vez que inicies el contenedor, NOTA en este link oficial:

https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/4257

explica porque esta configuración, si no la aplicamos el Gitlab se quedara en la reconfiguración, es decir, pegado en esta sesión ** ruby_block[wait for redis service socket] action run**, entonces ejecutemos el siguiente comando dentro del contenedor:

(/opt/gitlab/embedded/bin/runsvdir-start &) && gitlab-ctl reconfigure

Veremos unos errores de sysctl referentes a valores del kernel, pero podemos continuar. (Luego corregiremos este BUG)

Nos salimos del contenedor y consultamos que IP tiene:

docker container inspect gitlab.dominio.local | grep IPAddress

La IP que nos arroje se la cargamos a nuestro archivo HOST en donde esta corriendo el contenedor:

echo "172.18.0.2        gitlab.dominio.local" >> /etc/hosts

También podemos utilizar la IP del HOST:

echo "192.168.1.5       gitlab.dominio.local" >> /etc/hosts

Probemos desde el HOST el ping

ping -c2 gitlab.dominio.local

Listo, con esto ya podemos cargar la pagina de gitlab y cambiar la clave de root, http://gitlab.dominio.local

http://gitlab.dominio.local

https://github.com/cgomeznt/Gitlab/blob/master/images/01.png

Instalamos Docker

Ingresamos en le contenedor para instalar el Docker:

docker exec -ti gitlab.dominio.local bash

https://docs.docker.com/engine/install/centos/

yum install -y yum-utils

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io

Iniciamos docker:

systemctl enable docker
systemctl start docker
systemctl status docker
docker run hello-world

Instalar gitlab-runner

https://docs.gitlab.com/runner/install/linux-manually.html

rpm -ivh /tmp/gitlab-runner_amd64.rpm
systemctl status gitlab-runner
gitlab-runner --version
        Version:      14.0.1
        Git revision: c1edb478
        Git branch:   refs/pipelines/326100216
        GO version:   go1.13.8
        Built:        2021-06-23T16:35:23+0000
        OS/Arch:      linux/amd64

El usuario gitlab-runner debe estar en el grupo Docker:

usermod -aG docker gitlab-runner
newgrp docker
id gitlab-runner

su - gitlab-runner
$ docker info

Instalamos una versión superior de git porque el git 1.8.3.1 No soporta git fetch-pack

https://stackoverflow.com/questions/56663096/gitlab-runner-doesnt-work-on-a-specific-project

git --version
git version 1.8.3.1 # No soporta git fetch-pack

yum -y install https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.7-1.x86_64.rpm
yum -y install git
git --version
git version 2.30.1

Registramos un runner dentro del gitlab debemos tener primero el token de gitlab, ingresemos a gitlab.dominio.local, y buscamos Admin area -> Overview -> Runner

https://github.com/cgomeznt/Gitlab/blob/master/images/Docker/02.png

Vamos a continuar dentro del contenedor y hacer un registro de gitlab-runner del tipo shell

gitlab-runner register

        Enter the GitLab instance URL (for example, https://gitlab.com/):
        http://gitlab.dominio.local
        Enter the registration token:
        uPKaQBaMJy2hN5Po25Fg
        Enter a description for the runner:
        [gitlab.dominio.local]: Runner para ejecutar shell
        Enter tags for the runner (comma-separated):
        shell-demo
        Registering runner... succeeded                     runner=uPKaQBaM
        Enter an executor: shell, virtualbox, kubernetes, ssh, docker+machine, docker-ssh+machine, custom, docker, docker-ssh, parallels:
        shell
        Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Veamos en el servidor de Gitlab nuestro registro del Gitlab-runner

https://github.com/cgomeznt/Gitlab/blob/master/images/CICD/12.png

Ahora vamos a revisar el runner que se asocia dentro de un proyecto de Gitlab, no deje de certificar que el servicio de gitlab-runner este iniciado y en donde este instalado el gitlab-runner debe ser capaz de resolver por DNS y IP al servidor gitlab.dominio.local. busca un proyecto y en el menú Settting -> CI/CD del proyecto -> Runners.

https://github.com/cgomeznt/Gitlab/blob/master/images/CICD/13.png

Probando el gitlab-runner, creamos un .gitlab-ci.yml. Dentro del .gitlab-ci.yml se configuran los pipeline GitLab CI/CD.

Crear un proyecto nuevo, yo lo llamare my-app y lo clonamos en nuestro directorio de trabajo:

git clone http://gitlab.dominio.local/root/my-app.git
        Clonando en 'my-app'...
        warning: Pareces haber clonado un repositorio sin contenido.

Nos pasamos al repositorio clonado:

cd my-app

Crear el archivo .gitlab-ci.yml. El archivo tendrá el siguiente contenido::

vi .gitlab-ci.yml

stages:
  - test
  - deploy

Test:
  stage: test
  tags:
  - shell-demo
  script:
    - echo "write your test here...!!!"

Deploy:
  only:
    refs:
      - master
  stage: deploy
  tags:
    - shell-demo
  script:
    - touch /tmp/prueba.txt

NOTA pendiente con el la linea del tags: ese nombre debe ser igual al nombre que le dieron al runner, es decir, desde aquí estamos invocando a un runner y debe coincidir los nombres

Agregamos los cambios, hacemos el commit y subimos los cambios a nuestro proyecto:

git add .gitlab-ci.yml && git commit -m "My First Commit" && git push origin master

Cuando realice cualquier push se vera algo como esto, estará en pending o running mientras ejecuta todo.

https://github.com/cgomeznt/Gitlab/blob/master/images/Docker/05.png

Si no hay errores, después de un rato vera esto

https://github.com/cgomeznt/Gitlab/blob/master/images/Docker/06.png

Ahora para ver las salidas debe hacer esto, hacer click en passed. Luego hacer click en Test y Deploy para ver el detalle

https://github.com/cgomeznt/Gitlab/blob/master/images/Docker/07.png
https://github.com/cgomeznt/Gitlab/blob/master/images/Docker/10.png

Este es el detalle de Test

https://github.com/cgomeznt/Gitlab/blob/master/images/Docker/08.png
https://github.com/cgomeznt/Gitlab/blob/master/images/Docker/09.png

Listo ya con esto tenemos Dockerizado Gitlab y Gitlab-Runner en un mismo contenedor, recuerda que cada vez que inicies el contenedor debes ejecutar este comando:

(/opt/gitlab/embedded/bin/runsvdir-start &) && gitlab-ctl reconfigure

Comentarios

Entradas populares de este blog

CI/CD con Gitlab Gitlab-runner y con un Docker Registry

Crear Aplicacion Básica en nodejs con base de datos en Mariadb (Virtualizada y Dockerizada)