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:
Publicar un comentario