Ich hatte kürzlich ein Gespräch mit einem Kunden, der mit Azure DevOps arbeitet und SonarCloud implementieren möchte. Mein Kollege hatte schon vor 4 Jahren einen Artikel darüber geschrieben, aber die Tools entwickeln sich weiter, daher hier ein Update.
SonarCloud hat Sie hervorragend durch die Einrichtung auf ihrer Seite geführt (siehe die Dokumente). Es gibt jedoch eine Lücke bei dem, was Sie auf der Azure DevOps-Seite tun müssen. Mein Ziel ist es, diese Lücke zu schließen.

Ich gehe davon aus, dass Sie bereits eine Organisation und Ihr Projekt in SonarCloud eingerichtet haben. Falls nicht, tun Sie dies und bewahren Sie das erforderliche Azure DevOps PAT (Personal Access Token) mit den Code-Berechtigungen (Lesen und Schreiben) für die spätere Verwendung auf. Gut, jetzt werden wir jedes Tool für die Interaktion mit dem anderen aktivieren.
Aktivieren Sie SonarCloud für die Pull Request-Analyse mit Azure DevOps
Aktivieren Sie zunächst SonarCloud für die Interaktion mit Azure DevOps. Dies können Sie auf der Registerkarte Verwaltung einrichten.

Wählen Sie im Pull Request-Menü den Provider Azure DevOps Service und geben Sie ein Azure DevOps Personal Access Token mit Code (Lese- und Schreibberechtigung) ein (ich habe dasselbe wie beim Importieren der Organisation verwendet).
Vergessen Sie nicht, auf beide Speicherschaltflächen zu klicken!!!

Auslösen von SonarCloud-Analysen aus Azure DevOps Pipelines
Richten Sie anschließend Azure DevOps für die Interaktion mit SonarCloud ein. Gehen Sie zurück zur Projektstartseite und wählen Sie Mit Azure DevOps Pipeline als Ihre Analysemethode.

Diese führt Sie durch die Installation der notwendigen Erweiterung in Ihrer AzureDevOps-Organisation und gibt Ihnen ein Token, mit dem Sie eine Dienstverbindung zu SonarCloud in Ihrem Azure DevOps-Projekt erstellen können.


Da ich ein JavaScript-Projekt analysieren möchte, wähle ich die Option Andere, um meine Pipeline zu konfigurieren. Dadurch erhalte ich detaillierte Anweisungen zur Konfiguration der SonarCloudPrepare-Aufgabe .

Die Pipeline für mein JS-Projekt sieht folgendermaßen aus:
# Node.js
# Build a general Node.js project with npm.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript
trigger:
branches:
include:
- 'main'
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
fetchDepth: 0
- task: NodeTool@0
inputs:
versionSpec: '16.x'
displayName: 'Install Node.js'
- task: SonarCloudPrepare@1
inputs:
SonarCloud: 'SonarCloud' # name of your SonarCloud service connection
organization: 'mboden' # name of the SonarCloud organization as given above
scannerMode: 'CLI'
projectKey: 'mboden_sonarcloud-demo' # SonarCloud project key as given above
projectName: 'sonarcloud-demo' # SonarCloud project name as given above
displayName: 'SonarCloud Configure'
- script: |
npm install
displayName: 'Install Dependencies'
- script: |
npm run tslint
displayName: 'Lint'
- script: |
npm run build
displayName: 'Build'
- script: |
npm run test
displayName: 'Test'
- task: SonarCloudAnalyze@1
inputs:
jdkversion: 'JAVA_HOME_11_X64'
displayName: 'SonarCloud Analyze'
- task: SonarCloudPublish@1
inputs:
pollingTimeoutSec: '300'
displayName: 'SonarCloud Publish'
Wenn Sie diese Pipeline in Azure DevOps einrichten und einmal ausführen, werden bereits einige Ergebnisse für den Hauptzweig in SonarCloud angezeigt.

Jetzt möchte ich einen Themenzweig analysieren und die Pull Request Quality Gates von SonarCloud nutzen. Dazu muss ich einige Zweigrichtlinien für den Hauptzweig einrichten.

Durch die Aktivierung von Check for comment resolution muss jeder Prüfer der Pull-Anfrage die von SonarCloud in der Pull-Anfrage gemachten Kommentare auflösen. Um die Überprüfung von Pull Requests in SonarCloud zu aktivieren, muss eine Build-Validierung für die Pipeline eingerichtet werden.

Ich wähle die Sonarcloud-Demo-Pipeline, die ich zuvor erstellt habe, lasse alle Einstellungen auf den Standardwerten und gebe ihr einen schönen Anzeigenamen.

Jetzt ist alles vorbereitet, um eine Verzweigung zu erstellen, einen Code einzuchecken, der die Validierung nicht besteht, und ihn in das Repo zu verschieben. Anschließend werde ich eine Pull-Anfrage erstellen, um zu sehen, welche Quality Gates fehlgeschlagen sind. Wie wir sehen können, hat SonarCloud alle Prüfungen durchgeführt und wir können nicht nur sehen, dass die Quality Gates nicht bestanden wurden, sondern SonarCloud hat auch Kommentare mit den notwendigen Änderungen erstellt.

Ein Klick auf Quality Gate Failed leitet Sie direkt zu SonarCloud weiter.

Nachdem Sie dies einmal für eine Pull-Anfrage ausgeführt haben, erhält Azure Devops die ersten Analyseergebnisse und Sie können Statusprüfungen einrichten. Dadurch wird verhindert, dass die Pull-Anfrage zusammengeführt wird, solange die Quality Gates fehlgeschlagen sind. Wechseln Sie dazu erneut zu den Zweigrichtlinieneinstellungen für Ihren Standardzweig.

Wählen Sie die Statusprüfung aus und geben Sie entweder ein benutzerdefiniertes Genre und einen Namen an oder belassen Sie es bei den Standardeinstellungen. Klicken Sie auf Speichern.
Hinweis: Die Pipeline muss mindestens einmal für einen Pull Request laufen, bevor die entsprechenden Statusprüfungen in der Dropdown-Liste erscheinen.

Das war's! Wir haben die Code-Qualitätsprüfungen von SonarCloud erfolgreich in die Azure DevOps-Pipelines und Pull-Anfragen integriert und verhindern, dass Pull-Anfragen zusammengeführt werden, bevor die Quality Gates bestanden und erkannte Probleme behoben sind.
Links
Sonarcloud-Projekt: Sonarcloud AzurePipe Projekt
Azure DevOps Projekt: Azure DevOps Sonarcloud Demo-Projekt
Azure DevOps Pull Request: Azure DevOps Pull-Anfrage 2
Verfasst von

Marius Boden
Marius Boden is passionate about technology and software development. Being a hybrid of developer, architect and DevOps consultant, he can keep track of the big picture and help teams at any point in the development lifecycle to get to the next level.
Contact