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

Los siguientes plugins deben estar instalados en Jenkins: Jenkins GitLab Plugin y Jenkins Git Plugin

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.

gitlab token

2. Configuración del servidor Jenkins

Vaya a Administrar Jenkins → Configuración del sistema

Descienda hasta la sección Gitlab

jenkins-gitlab-global-conf

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

jenkins-gitlab-token-credentials

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.

  1. 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

      jenkins-scm-git-ssh
      • Si ha utilizado la URL https del repositorio, tendrá que introducir las credenciales tipo usuario/contraseña de GitLab.

        gitlab-repo-url-https
      • Si por el contrario ha utilizado la URL git del repositorio, tendrá que intruducir unas credenciales tipo SSH username con Private key.

        gitlab-repo-url-ssh

        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.

          jenkins-credential-ssh-deploy-key

          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

        jenkins-git-gitlab-details
  2. 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.

      jenkins-gitlab-build-chen-a-change-is-pushed
  3. Añada un nuevo paso post-build seleccionando Publish build status to GitLab commit (GitLab 8.1+ required)

    jenkins-publish-build-status
  4. 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

gitlab-webhook-test-success
  • El proyecto Jenkins comenzará a ejecutarse

jenkins-build-from-gitlab

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:

gitlab-build-passed-icon

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

gitlab-commit-build-passed-icon

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

gitlab-commit-list-build-passed-icon

Bibliografía