Integración contínua GitHub | Jenkins | SonarQube | Nexus - Javiermartinf98/mirepositorio GitHub Wiki

Integración contínua GitHub | Jenkins | SonarQube | Nexus

Para poder comenzar a trabajar con estas herramientas sera necesario intalar algunos puligns en Jenkins a parte de los predetermindaos.

  • SonnarQube scanner for Jenkins
  • Maven integration

Alguno de los errores que nos podemos encontrar serán:

  • Enlazar sonar con jenkins (token)
  • Apuntar al servicio de kubernetes de Sonar en vez de a la URL de sonar
  • Generar credenciales jenkins <-> git (ssh-keygen desde el pod)
  • Para hacer la compilacion en jenkins a traves de git SCM necesitamos generar un deploy key desde el repo que quieres clonar en el cual estan los Jenkins files y configurarlo desde la configuración del job.

Una vez hecho lo anterior, el objetivo de la Integración Continua es de automatizar todas las tareas que son repetitivas (compilar, ejecución de pruebas, construcción, desplegar proyectos, documentación... etc). Estas tareas deben ser ejecutadas lo más a menudo posible y de manera automática para así poder detectar fallos cuanto antes.

Lo primero que tendremos que realizar sera la Deploy Key que sirve para lanzar proyectos desde un repositorio en GitHub.com a su servidor usando una clave SSH que otorga acceso a un solo repositorio, en el siguiente enlace se muestra como hacerlo: como crear una deploy key .

Para este ejemplo usaremos un proyecto que está en GitHub, se hará un analisis con Sonarqube y se subirá de nuevo a un repositorio de nexus, todo esto orquestado por Jenkins.

Tambien hay que crear una credencial en jenkins, entrando en Manage Jenkins > Credentials > System > Global Credentials, haremos click en "Add Credentials".

image

Apareceran varias opciones:

  • Kind: seleccionaremos 'SSH Username with private key'
  • ID: pondremos el nombre que queramos dar a la clave, importante marcar la casilla 'Enter direcly' donde tendremos que pegar la clave privada de nuestra deploy key creada en el apartado anterior, una vez terminado clicamos en "Create".

image

Una vez finalizado los pasos anteriores abrimos SonarQube, en el apartado Administration > Security > Users podremos crear el token o clave que necesitaremos más adelante para tener permisos de acceso.

image

Clicamos en el icono resaltado en la imagen, para empezar a crear nuestro token.

image

Elegimos el nombre y clicaremos en "Generate", guardaremos el dígito que nos genera para usarlo mas adelante.

image

Para añadir el token que hemos generado en SonarQube, nos dirigiremos de nuevo a Manage Jenkins > Credentials > System > Global Credentials y haremos click en "Add Credentials".

  • kind seleccionaremos 'Secret text', donde insertaremos la clave que nos generó automaticamente el sonar al crear el token.
  • por útimo daremos un nombre a la credencial que contiene el token de sonar, para finalizar hacemos click en "Create".

image

El siguiente paso es informar a Jenkins donde se encuentra el servidor de sonar, para ello vamos a la siguiente seccion: **Manage Jenkins > Configure System ** y buscaremos el apartado de SonarQube servers, tenemos que añadir uno nuevo. "Add SonarQube".

Hay que añadir el servidor de sonar a Jenkins:

  • ID: Le daremos un nombre.
  • URL: hay que pegar la direccion http que corresponda a nuestro server de Sonar.
  • Authentication token: se debe añadir el token creado anteriormente en Sonar para dicho proyecto. Salvamos los cambios.

image

Al igual que hemos añadido a Jenkins nuestro server de Sonar, tenemos que añadir tambien nuestra versión de Maven. Nos dirigirnos a Manage Jenkins > Global Tool Configuration y allí buscaremos la sección de Maven, añadimos una nueva, "Add Maven".

Para crear un nombre de la versión que luego usaremos más adelante en el Pipeline, en el apartado name pondremos LATEST y marcaremos la casilla de instalar automáticamente y allí tendremos que elegir la versión de maven que queramos emplear, utilizaremos la versión 3.8.6 y al final pulsaremos sobre "Save".

image

A continuación entraremos en Nexus, crearemos un repositorio para ello, seleccionaremos el engranaje y clicaremos en "Repository", por último clickaremos en "create repository". Usaremos la opción que dice maven2(hosted).

image

Pondremos un nombre al repositorio, el tipo de artefacto que almacena nuestro repositorio será de tipo "Mixed". Los demás ajustes serán por defecto.

image

Una vez creado nuestro repositorio podremos visualizar los ajustes, etcétera. Necesitaremos copiar nuestra URL que más adelante tendremos que insertar en nuestro "Pipeline de Jenkins" y "POM.xml".

image

Crearemos un fichero "settings.xml" dentro de jenkins para analizar el código del proyecto. Para ello, nos dirigiremos a "Manage Jenkins > Managed Files" clickaremos en "Add a New Config". Marcaremos la casilla de Maven settings.xml El archivo creado tendrá un ID que usaremos más adelante en el Pipeline.

image

Modificaremos el archivo "settings.xml". En el fragmento "" indicaremos un "id" y una "URL". La "URL" será nuestra URL del repositorio de nexus.

image

En el fragmento pondremos en "id" el nombre de nuestra clave de nexus, "user" nuestro usuario de nexus y "password" nuestra contraseña.

image

Modificaremos el "POM.xml" de nuestro proyecto maven. Para tener acceso al repositorio de nexus y poder subir el proyecto, deberemos indicar la url de nexus en el archivo pom.xml.

Para ello tendremos que crear la etiqueta . Esta etiqueta de utiliza para buscar el "POM.XML" de Maven cuando lanzamos un Maven deploy y deberá ir dentro de la etiqueta . Dentro de esta etiqueta crearemos otra donde indicaremos tanto el id, como la URL de nuestro repositorio nexus. La etiqueta id hará referencia a nuestro token de nexus.

image

Volveremos de nuevo a SonarQube para crear esta vez un proyecto sonar, pulsaremos en + que aparece al lado de la barra de búsqueda y pulsaremos en "crear nuevo proyecto" dandole un nombre a nuestro proyecto, pulsaremos en "Set Up".

image

Pulsaremos en "Generate" seleccionaremos Java como lenguaje de proyecto y Maven como tecnología de compilación. Copiaremos el codigo proporcionado por Sonarqube para añadirlo al pipeline de nuestro proyecto de Jenkins.

image

Crearemos el pipeline en jenkins. Para ello seleccionaremos "new item" daremos un nombre a la tarea. Utilizaremos la opción de Pipeline.

image

Una vez creado nos vamos a su configuración. Buscaremos la sección de script y escribiremos nuestro código.

image

En este caso tendremos que referenciar:

  • Tools: Referenciamos la versión de "maven" que creamos anteriormente. (LATEST)
  • Stages:
  • GetCode (Lo usamos para la descarga del repositorio de git.

    • Git branch: Es la rama del repositorio de git. (Por defecto master o main)
    • CredentialsId: La deploykey SSH privada generada anteriormente en jenkins.
    • Url : La dirección del repositorio.
  • SonarQube analysis:

    • Dir: Es la ruta del repositorio de maven donde se encuentra el "pom.xml".
    • ConfigFileProvider (Configuración del archivo settings.xml)
    • fileId: ID que nos proporciona jenkins al crear el archivo "settings.xml".
    • variable: Creamos una variable del fichero "settings.xml" para referenciarlo.
    • WithSonarQubeEnv : Token del proyecto generado de Sonarqube.
  • sh : Comando a realizar.

    • -X: Se utiliza para sacar mas información por consola.
    • -s: Se utiliza para llamar al setting + $NOMBRE_VARIABLE_SETTINGS
    • sonar:sonar ...: Copiamos el código generado por SonarQube.

image

Una vez finalizemos podremos lanzar el pipeline desde jenkins.

image

⚠️ **GitHub.com Fallback** ⚠️