Configurar SonarQube en Azure DevOps

En esta nueva guia vamos a detallar los pasos para poder analizar nuestro código en SonarQube, configurado en una pipeline de Azure DevOps.

Aunque esta configuración viene bastante bien explicada en el propio configurador de SonarQube, os voy a detallar las tareas que debemos configurar para llevar a cabo este análisis.

Primero, instalaremos la extensión de Sonarqube en nuestro tennant de Azure DevOps. Eso, se realiza desde la propia tienda de extensiones que podemos localizar en la parte superior derecha de nuestro portal.

Aunque nos aparecerán varias extensiones de SonarQube, nosotros debemos instalar la oficial.

Configurar conexión a SonarQube

Una vez finalizada la instalación de la extensión, podemos proceder con la configuración de la conexión a nuestro SonarQube. Esto lo realizaremos desde Project Settings > Service Connections.

Aquí, crearemos un nuevo Service Connection e indicaremos los datos de conexión.

Una vez terminada la configuración de la conexión, procederemos a añadir las tareas necesarias en nuestra pipeline.

SonarQube Prepare

El primer paso es la «preparación» de SonarQube. Aquí debemos indicar los datos de conexión al proyecto de SonarQube que corresponda con nuestra Pipeline.

- task: SonarQubePrepare@5
      inputs:
        SonarQube: 'SonarQube  de Mi Dominio'
        scannerMode: 'CLI'
        configMode: 'manual'
        cliProjectKey: 'devops-project01'
        cliSources: 'MyScheme'
        extraProperties: |
          # Comment if you have a project with mixed ObjC / Swift
          sonar.language=swift
          
          # Project description
          #sonar.projectDescription=prjDescription
          
          # Path to source directories
          sonar.sources=MySchemePRD
          # Path to test directories (comment if no test)
          #sonar.tests=MySchemeTest
          
          # Destination Simulator to run surefire
          # As string expected in destination argument of xcodebuild command
          # Example = sonar.swift.simulator=platform=iOS Simulator,name=iPhone 6,OS=9.2
          sonar.swift.simulator=platform=iOS Simulator,name=iPhone 11,OS=13.3
          
          # Xcode project configuration (.xcodeproj)
          # and use the later to specify which project(s) to include in the analysis (comma separated list)
          # Specify either xcodeproj or xcodeproj + xcworkspace
          sonar.swift.project=MyScheme.xcodeproj
          sonar.swift.workspace=MyScheme.xcworkspace
          
          # Scheme to build your application
          sonar.swift.appScheme=MyScheme
          
          # Specify your appname when different from targeted scheme.
          # Or when slather fails with 'No product binary found'
          # You can also provide a list of framework names to analyse for coverage.
          # This will be something like "myApp" or "myApp,myFramework"
          # sonar.coverage.binaryNames=myApp,myFramework
          
          # Configuration to use for your scheme. if you do not specify that the default will be Debug
          sonar.swift.appConfiguration=Debug
          
          ##########################
          # Optional configuration #
          ##########################
          # Encoding of the source code
          sonar.sourceEncoding=UTF-8
          # SCM
          # sonar.scm.enabled=true
          # sonar.scm.url=scm:git:http://xxx
          
          # JUnit report generated by run-sonar.sh is stored in sonar-reports/TEST-report.xml
          # Change it only if you generate the file on your own
          # The XML files have to be prefixed by TEST- otherwise they are not processed
          sonar.junit.reportsPath=sonar-reports/
          
          # Lizard report generated by run-sonar.sh is stored in sonar-reports/lizard-report.xml
          # Change it only if you generate the file on your own
          # sonar.swift.lizard.report=sonar-reports/lizard-report.xml
          
          # Cobertura report generated by run-sonar.sh is stored in sonar-reports/coverage-swift.xml
          # Change it only if you generate the file on your own
          #sonar.swift.coverage.reportPattern=sonar-reports/cobertura.xml
          sonar.swift.coverage.reportPattern=sonar-reports/coverage-swift.xml
          #sonar.coverageReportPaths=sonar-reports/coverage-swift.xml
          # OCLint report generated by run-sonar.sh is stored in sonar-reports/oclint.xml
          # Change it only if you generate the file on your own
          sonar.swift.swiftlint.report=sonar-reports/*-swiftlint.txt
          
          # Change it only if you generate the file on your own
          # sonar.swift.tailor.report=sonar-reports/*tailor.txt
          
          # Paths to exclude from coverage report (surefire, 3rd party libraries etc.)
          # sonar.swift.excludedPathsFromCoverage=pattern1,pattern2
          #sonar.swift.excludedPathsFromCoverage=.*Tests.*
          
          # Ability to skip tests (such as UI Tests running long time)
          # Example = sonar.swift.skipTests=UITests
           sonar.c.file.suffixes=-
           sonar.cpp.file.suffixes=-
           sonar.objc.file.suffixes=-

Las primeras líneas son obligatorias (hasta extraProperties) pero, como indico en el ejemplo, podemos añadir otras configuración que faciliten el análisis del código y así evitar errores en la ejecución.

SonarQube Analyze

La siguiente tarea consiste en el propio análisis del código. Esta tarea solo requiere de una línea de configuración, pero será la que mas tiempo lleve en su ejecución.

    - task: SonarQubeAnalyze@5

SonarQube Publish

Por ultimo, crearemos la tarea encargada de enviar el resultado del análisis a SonarQube.

- task: SonarQubePublish@5
      inputs:
        pollingTimeoutSec: '300'

Una vez creadas las 3 tareas, ya podemos ejecutar nuestra pipeline y, una vez finalizada, comprobar el resultado del análisis en el portal de nuestro servidor de SonarQube.

Si queréis ver mas guías relacionadas con otras herramientas y/o configuraciones de Azure DevOps, dímelo en comentarios.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.