Joaquín Cañadas <jjcanada@ual.es>
Configuración de proyectos Jenkins y repositorios privados en GitLab para que se lance la construcción automáticamente en Jenkins cada vez que se realice un push en el repositorio en GitLab
Requisitos
Configuración
1. Usuario de GitLab
Copie el API token privado de su cuenta en GitLab en Profile Settings → Account. Lo necesitará más adelante para la configuración del servidor Jenkins.

2. Configuración del servidor Jenkins
Vaya a Administrar Jenkins → Configuración del sistema
Descienda hasta la sección Gitlab

Introduzca:
-
Un nombre para la conexión al servidor GitLab
-
La URL del servidor GitLab
-
Añada las credenciales para GitLab usando el token de su usuario:
-
Seleccione GitLab API token
-
Pegue el token copiado anteriormente
-
Escriba un identificador de la credencial
-

Una vez añadida la credencial, seleccionelá. Pruebe la conexión con Test connection.
3. Configuración del proyecto Jenkins
Cree una nueva tarea en Jenkins.
-
En la sección Gestión de Código Fuente:
-
Seleccione Git
-
Introduzca la URL del repositorio en GitLab
-
Añada las credenciales para acceder al repo en GitLab
-
Si ha utilizado la URL https del repositorio, tendrá que introducir las credenciales tipo usuario/contraseña de GitLab.
-
Si por el contrario ha utilizado la URL git del repositorio, tendrá que intruducir unas credenciales tipo SSH username con Private key.
Para evitar tener que introducir su clave privada personal en Jenkins, se debe crear una nueva pareja de claves ssh denominadas de despliegue, de manera que:
-
al repositorio GitLab se le añade la clave pública de despliegue,
-
y en Jenkins se añade la clave privada de despliegue.
De esta forma, Jenkins usará la clave privada para acceder al repositorio privado en GitLab.
-
-
Seleccione la credencial añadida.
-
-
En Advanced settings, introduzca:
-
Nombre del repositorio remoto, normalmente origin que identifica al repositorio remoto entre otros posibles remotos. En nuestro caso, lo hemos llamado gitlab ya que origin está usado por en el ejemplo para el remoto en GitHub
-
Refspec:
_+refs/heads/*:refs/remotes/gitlab/* +refs/merge-requests/*/head:refs/remotes/gitlab/merge-requests/*_
El valor predeterminadode Refspec es
_+refs/heads/*:refs/remotes/REPOSITORYNAME/*_
observe que hemos usado gitlab en REPOSITORYNAME, aunque el valor habitual sería origin
-
-
-
En la sección Build Triggers:
-
Seleccione Build when a change is pushed to GitLab
Copie la URL que se muestra en la misma línea como GitLab CI Service URL porque la usará más tarde para definir el GitLab web hook.
-
-
Añada un nuevo paso post-build seleccionando Publish build status to GitLab commit (GitLab 8.1+ required)
-
Guarde los cambios!
4. Configuración del repositorio GitLab
En GitLab vaya a su repositorio y haga clic en Settings
Haga clic en Web Hooks
-
En URL introduzca la URL que ha copiado anteriormente en Jenkins asociada al GitLab CI Service URL, que es de la forma
http://JENKINS_URL/project/JENKINS_PROJECT_NAME
-
Selecione Merge Request Events y Push Events
-
Clic en Add Webhook
-
Clic en Test Hook para probar el nuevo web hook. Verá dos resultados:
-
GitLab mostrará Hook successfully executed
-

-
El proyecto Jenkins comenzará a ejecutarse

La conexión ya está hecha!
Pruebe a realizar cambios en los archivos del repositorio, guardarlos y hacer push en GitLab. Tras la construcción en Jenkins, verá que en el repositorio GitLab aparece un nuevo icono con el resultado del build:

Si hace clic sobre él, verá la página del commit asociado al build.

Y en la lista de commits, a partir de ahora aparecerá un nuevo icono con el estado del build asociado a cada commit.
