domingo, marzo 21, 2021

Instalacion de Gitlab (Community Edition) en Ubuntu 20.04

Recientemente instale Gitlab en una maquina personal con la finalidad de hacer algunas pruebas, me tope con varios problemas y decidí documentar como al final lo instale y cree un pipeline sencillo.

Varios de los problemas con los que me tope eran derivados de la validez del certificado que se intenta generar en la instalación de Gitlab y del dominio de DNS, si tienes un dominio valido y quieres utilizar un certificado puedes hacerlo, la instalación de Gitlab intentara crear uno con letsencrypt, pero para este caso no usare un certificado o un dominio.


Las instrucciones para la instalación de Gitlab Community Edition se encuentran aquí:

https://about.gitlab.com/install/?version=ce#ubuntu


sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

Es opcional instalar y configurar el correo:

sudo apt-get install -y postfix

Con la siguiente instrucción puedes instalar Gitlab y definir el URL, en las instrucciones de Gitlab aconseja usar un dominio valido y el protocolo https, pero para fines de pruebas lo haremos con http y usare la dirección IP del servidor, (usa la ip de tu servidor)

sudo EXTERNAL_URL="http://192.168.1.210" apt-get install gitlab-ce

Igual esto se puede cambiar después desde el archivo:

/etc/gitlab/gitlab.rb

Editando el parametro external_url y reconfigurando gitlab:

sudo gitlab-ctl reconfigure


Con esto deberás tener tu servicio corriendo y puedes ir a http://localhost (o la ip de tu servidor) desde tu navegador web y tendrás que definir un password de root para Gitlab con el cual podrás administrar la aplicación

Para registrar un nuevo usuario puedes hacer logout del usuario root para volver a la pagina de login y ahí esta el botón de Register Now:



Por default los nuevos usuarios que se registren tienen que ser aprobados así que entras de nuevo como el usuario root 

Admin Area -> Users 

En esa sección encontraras un apartado llamado Pending Approval y ahí tienes la acción para aprobar al usuario recién creado 

El usuario nuevo ahora podrá hacer login,  y al ser la primera vez que este usuario esta entrando pedirá que te asignes un rol:





Una de las primeras cosas a realizar es agregar tu llave publica de SSH de la maquina donde estarías trabajando, esto lo puedes hacer en:

User Settings ->  SSH Keys


En caso de no tener una, usar el comando ssh-keygen

Al menos de que elijas otra localidad tu llave publica se encontrara en /home/usuario/.ssh/id_rsa.pub


Crea un nuevo Proyecto para comprobar la funcionalidad, elige Initialize repository with a README
para que el repositorio no este vacío.

Una vez creado el proyecto veras un botón Clone con la dirección para clonar el repositorio, si tu external_url es un dominio la dirección que veras aquí será en base a esa información, en mi caso estoy usando la dirección IP.



Desde tu maquina de trabajo clona el repositorio:

git clone git@192.168.1.220:jesus/ansible-hello2.git

Y crea estos tres archivos o una versión similar, yo aquí tengo la referencia a una maquina en mi red con la ip 192.168.1.210 a la cual entro con el usuario a6 y del cual tengo configuradas llaves de ssh, para fines prácticos este código no se usara en el pipeline aun.

hosts
192.168.1.210 ansible_user=a6
ping-playbook.yml
---
- hosts: all
  remote_user: a6
  tasks:
          - name: ping server
            ping:
.gitlab-ci.yml
build-job:
  stage: build
  script:
    - echo "Hello There!"

test-job1:
  stage: test
  script:
    - echo "This job tests something"

Empuja estos nuevos archivos a tu repositorio en Gitlab

git add hosts ping-playbook.yml .gitlab-ci.yml
git commit -a
git push

Los archivos hosts y ping-playbook.yml son parte un playbook de ansible muy simple, y el archivo .gitlab-ci.yml es un pipeline que solo manda unos mensajes, a continuación haremos el setup simplemente para que el pipeline se ejecute por los runners, configuraremos uno con docker.



Es necesario instalar docker

sudo apt-get install docker.io


Prueba que docker este funcionando:

sudo usermod -aG docker nombredetuusuario

Ejecuta un docker de prueba:

docker run hello-world


Ya que tengas docker instalado, instala lo siguiente gitlab-runner, los runners son los encargados de correr los Jobs de los pipelines, puedes tener distintos tipo, para este caso usaremos uno basado en docker.

 sudo apt-get install gitlab-runner


De regreso a Gitlab, ve a tu  proyecto

Settings -> CI/CD -> Runners

En esa sección encontraras las instrucciones para instalar y registrar un runner en:

Show Runner Installation Instructions

Veras algo como:

sudo gitlab-runner register --url http://192.168.1.220/ --registration-token JKuz82V6zA2maiaYsLs

De nuevo puedes ver que estoy usando http y no https y la ip en lugar de un dominio, el registration token en tu caso será diferente así como la ip de tu servidor

Entre las preguntas que necesitas contestar están las siguientes:

Please enter the executor: docker+machine, kubernetes, docker-ssh, parallels, shell, ssh, virtualbox, docker, docker-ssh+machine:
docker
Please enter the default Docker image (e.g. ruby:2.1):
ubuntu:latest
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

De regreso a 

Settings -> CI/CD -> Runners

Podrás ver los runners que tienes registrados


En este punto es posible que el pipeline se intente ejecutar o lo puedes ejecutar desde 

CI/CD -> Pipeline - Run Pipeline

Pero es posible que el pipeline falle porque no lo tome el runner:




 en mi caso no tenia la imagen de docker necesaria e intente descargarla aunque tuve el siguiente error:


tony@x220:~$ docker pull gitlab/gitlab-runner-helper
Using default tag: latest
Error response from daemon: manifest for gitlab/gitlab-runner-helper:latest not found: manifest unknown: manifest unknown

Encontre que alguien la pudo descargar de la siguiente forma

tony@x220:~$ docker run --rm -it gitlab/gitlab-runner-helper:x86_64-6d9dd510
Unable to find image 'gitlab/gitlab-runner-helper:x86_64-6d9dd510' locally
x86_64-6d9dd510: Pulling from gitlab/gitlab-runner-helper
614f111fed99: Pull complete
Digest: sha256:2731a347dfb90e2a93a63a9d5f61ee19860ebb6cfeb1258ffaf8fb7afae33133
Status: Downloaded newer image for gitlab/gitlab-runner-helper:x86_64-6d9dd510
docker: Error response from daemon: No command specified.
See 'docker run --help'.
tony@x220:~$ docker tag  gitlab/gitlab-runner-helper:x86_64-6d9dd510 gitlab-runner-helper:11.2.0
tony@x220:~$


Ahora que tienes la imagen del contenedor necesaria ve de nuevo a tu pipeline y intenta correr el Job atorado: Retry This Job


Aquí Gitlab pudo tomar la configuración de .gitlab-ci.yml y ejecutar las instrucciones:






En una segunda parte de este tema incluiré in pipeline que pruebe el código de ansible y otro que la aplique a algún host





No hay comentarios: