Compartir a través de


Cómo Implementar SonarQube en un cluster de Azure Kubernetes e integrarlo con un canal de Azure DevOps (es-MX)

 Articulo Original: https://blogs.msdn.microsoft.com/atverma/2018/11/26/deploy-sonarqube-to-azure-kubernetes-service-cluster-and-integrate-with-azure-devops-build-pipeline/

 Esta es la siguiente parte de la serie sobre desarrollo y despliegue.

  • Angular, ASP.NET Core Web API y SQL Server para Azure Kubernetes
  • Aplicaciones de función que utilizan el tiempo de ejecución de Azure Functions 2.0

En este artículo, vamos a compartir los pasos necesarios para implementar SonarQube en el clúster de Azure Kubernetes e integrarlos con un canal de Azure DevOps para configurar el análisis de código para las aplicaciones web Angular y ASP.NET Core creadas en partes anteriores de esta serie. Los anteriores artículos de esta serie son: 

Azure Kubernetes Service (AKS): implementación de Angular, ASP.NET Core y SQL Server en Linux

ASP.NET Core 2.1 Web API: carga la configuración de la aplicación desde appsettings.json, variables de entorno Dockerfile, Azure Key Vault Secrets y Kubernetes ConfigMaps / Secrets

Funciones de Azure 2.0: crear, depurar e implementar en el servicio de Kureetes de Azure (AKS)

Funciones de Azure 2.0: crear una aplicación de función desde la imagen de Docker (funciones activadas por Cosmos DB, Blob storage, Event Hub y enlaces de servicio SignalR)

Agregue funcionalidad web en tiempo real a la aplicación Angular utilizando ASP.NET Core SignalR, el servicio Azure SignalR y los enlaces del servicio Azure SignalR para Azure Functions 2.0

Las herramientas utilizadas para desarrollar estos componentes son Visual Studio para Mac / VS Code / VS 2017, AKS Dashboard, Docker for Desktop y kubectl.

SonarQube

SonarQube proporciona la capacidad no solo de mostrar la salud de una aplicación, sino también de resaltar los problemas recientemente presentados. Voy a configurar SQL Server como base de datos backend para SonarQube.

Crear una base de datos de SQL Server

Cree una base de datos de SQL Server llamada 'SonarDB' en la instancia de servidor SQL existente que había creado durante la primera parte de esta serie. SonarQube requiere que la recopilación de la base de datos debe distinguir entre mayúsculas y minúsculas y el acento. Puede especificar la intercalación mientras crea la base de datos o actualizarla, por ejemplo, fragmentos de código para crear / cambiar la intercalación a SQL_Latin1_General_CP1_CS_AS sigue  

CREATE DATABASE SonarDB
COLLATE SQL_Latin1_General_CP1_CS_AS;

ALTER DATABASE SonarDB
COLLATE SQL_Latin1_General_CP1_CS_AS;

Cree una cuenta de inicio de sesión SQL que SonarQube necesite para conectarse a la base de datos 'SonarDB'.

Crear un volumen persistente

Se necesita un reclamo de volumen persistente para almacenar los datos de SonarQube. El fragmento de código yaml para crear un almacenamiento de 5 GB se muestra a continuación. El recurso de implementación va a montar archivos en esta reclamación de almacenamiento. Puedes leer más sobre Volúmenes persistentes.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonar-data-claim
spec:
  accessModes:
  - ReadWriteOnce
  resources:
   requests:
    storage: 5Gi

Crear un servicio de Kubernetes

El siguiente paso es crear un servicio Kubernetes para SonarQube. Como puede ver en el siguiente fragmento de código yaml, el puerto 80/9000 está definido y el tipo es LoadBalancer, es decir, este servicio tendrá puntos finales externos. Kubernetes utilizará para seleccionar 'app: sonar-deploy' para asignarlo a la implementación como se verá a continuación. Puedes leer más sobre Servicios.

apiVersion: v1
kind: Service
metadata:
  name: sonar-svc
  labels:
    name: sonar-svc
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9000
  selector:
    app: sonar-deployment

Crear un despliegue de Kubernetes

El siguiente paso es crear una implementación de Kubernetes para SonarQube. El fragmento de código yaml se muestra a continuación y algunos punteros son

La imagen de la ventana acoplable que se utiliza para crear este recurso es image: sonarqube
Puede cambiar el número de pods actualizando réplicas: 1
Aplicación de etiquetas: la implementación de la sonda tiene que coincidir con el selector definido en el servicio
La reclamación de volumen persistente creada anteriormente se utiliza para el almacenamiento, es decir, persistentVolumeClaim: claimName: sonar-data-claim.
Se especifican el nombre de usuario, la contraseña y la URL de JDBC, que deben actualizarse en función de los valores específicos de su base de datos 'SonarDB' y del usuario de inicio de sesión.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: sonar-deployment
  labels:
    app: sonar-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: sonar-deployment
    spec:
      terminationGracePeriodSeconds: 15
      initContainers:
      - name: fix-the-volume-permission
        image: busybox
        command:
        - sh
        - -c
        - chown -R 1000:1000 /opt/sonarqube/extensions
        securityContext:
          privileged: true
        volumeMounts:
        - name: sonarqube-data
          mountPath: /opt/sonarqube/extensions
      - name: fix-the-volume-permission1
        image: busybox
        command:
        - sh
        - -c
        - chown -R 1000:1000 /opt/sonarqube/data
        securityContext:
          privileged: true
        volumeMounts:
        - name: sonarqube-data
          mountPath: /opt/sonarqube/data
      containers:
      - name: sonarqube
        image: sonarqube
        ports:
        - name: sonarqube
          containerPort: 9000
        env:
        - name: SONARQUBE_JDBC_USERNAME
          value: sonar
        - name: SONARQUBE_JDBC_PASSWORD
          value: SONAR_SQL_LOGIN_PASSWORD
        - name: SONARQUBE_JDBC_URL 
          value: jdbc:sqlserver://mssql-deployment:1433;databaseName=sonardb;user=sonar;password=SONAR_SQL_LOGIN_PASSWORD
        volumeMounts:
         - name: sonarqube-data
           mountPath: /opt/sonarqube/extensions
           subPath: extensions
         - name: sonarqube-data
           mountPath: /opt/sonarqube/data
           subPath: data
      volumes:
      - name: sonarqube-data
        persistentVolumeClaim:
           claimName: sonar-data-claim

Después de que los recursos de SonarQube se desplieguen en el clúster AKS, navegue hasta el punto final público e inicie sesión con las credenciales predeterminadas, es decir, el nombre de usuario y la contraseña son "admin". Puede cambiar la contraseña. Para esta muestra, los usuarios incorporados están provistos para autenticación, sin embargo, puede configurar proveedores de identidad externos. Puede leer más sobre los proveedores de identidad externos y la autenticación basada en encabezados http.

Habilitar el complemento de SonarQube en Azure DevOps

Debe habilitar la extensión de SonarQube en Azure DevOps. Busque la extensión de SonarQube en el mercado y habilítela.

https://msdnshared.blob.core.windows.net/media/2018/11/Screen-Shot-2018-11-25-at-9.43.04-PM-1024x345.png

Generar Token en SonarQube

Los DevOps de Azure necesitarán un token para conectarse a la instancia de SonarQube. Debe generar el token en el portal de SonarQube navegando a SonarQube> Seguridad> Generar tokens. Mantenga una nota de la ficha.

https://msdnshared.blob.core.windows.net/media/2018/11/Screen-Shot-2018-11-25-at-9.18.16-PM-1024x543.png

Crear proyectos en SonarQube

El siguiente paso es crear proyectos para Angular App y ASP.NET Core Web API en el portal de SonarQube. Las claves del proyecto serán necesarias en la compilación de DevOps de Azure, por lo tanto, tome nota de estos valores.

https://msdnshared.blob.core.windows.net/media/2018/11/Screen-Shot-2018-11-25-at-9.05.16-PM-1024x253.png

Crear una nueva conexión de servicio en Azure DevOps

Para conectar Azure DevOps a SonarQube, deberá crear una nueva conexión de servicio en Azure DevOps. Los principales punteros son

Especifique un nombre de conexión
Especifique la URL del servidor como dirección de punto final de SonarQube
Especifique el valor del token que se genera en el paso anterior

https://msdnshared.blob.core.windows.net/media/2018/11/Screen-Shot-2018-11-25-at-9.14.01-PM-1024x579.png

Configurando la compilación de Azure DevOps para la aplicación Angular

Los tres pasos necesarios para la integración de SonarQube al impedir la instalación de npm y la compilación de npm son

  • Preparar la configuración del análisis
    • Este paso debe ejecutarse antes de construir
    • Seleccione el punto final del servidor SonarQube
    • Especifique la clave del proyecto y el nombre del proyecto para la aplicación angular
    • Especifique la raíz del directorio de fuentes, es decir, la ruta al directorio raíz que contiene los archivos de origen
  • Ejecutar análisis de código
    • Este paso debe ejecutarse después de la construcción
  • Publicar el resultado de Quality Gate

https://msdnshared.blob.core.windows.net/media/2018/11/Screen-Shot-2018-11-25-at-9.29.47-PM-1024x552.png

Configuración del canal de compilación de Azure DevOps para la aplicación web básica de ASP.NET API

Los tres pasos necesarios para la integración de SonarQube, a excepción de Restaurar y Construir, son

  • Preparar la configuración del análisis
    • Este paso debe ejecutarse antes de construir
    • Seleccione el punto final del servidor SonarQube
    • Especifique la clave del proyecto para la aplicación de la API web principal de ASP.NET
    • Seleccione integrar con la opción MSBuild
  • Ejecutar análisis de código
    • Este paso debe ejecutarse después de la construcción
  • Publicar el resultado de Quality Gate

https://msdnshared.blob.core.windows.net/media/2018/11/Screen-Shot-2018-11-25-at-9.25.54-PM-1024x521.png

Construcción de web API web con Angular y ASP.NET Core

La API con Angular y la web API central de ASP.NET se pueden ver en un análisis detallado en el portal de SonarQube.

https://msdnshared.blob.core.windows.net/media/2018/11/Screen-Shot-2018-11-25-at-9.32.36-PM-1024x169.png

Esto completa este artículo sobre la implementación de SonarQube en el clúster del servicio de Azure Kubernetes y la integración con el sistema de desarrollo de Azure DevOps. Los recursos de Kubernetes necesarios para implementar SonarQube en el clúster AKS se pueden descargar desde GitHub.