9

Situation:ableiten automatisch obligatorisch Sonarqube Eigenschaften von pom-Datei in Jenkins

Ich möchte mein Projekt mit Sonarqube (5.4) von Jenkins (1.642.4) ausgelöst analysieren. Es ist ein Java-Projekt, das mit Maven erstellt wurde.

Ich sehe zwei Möglichkeiten, um die Analyse zu triggern:

  1. Beitrag Build Action „Sonarqube Analyse mit Maven“ aber es ist veraltet, so will ich nicht, es benutzen
  2. Beitrag Schritt "Build SonarQube Scanner ausführen "ist der empfohlene Weg.

Problem:

Wenn ich die veraltete Beitrag Build Action werden die Eigenschaften für Sonar Projektkonfiguration automatisch aus dem Projekt pom abgeleitet.

Es verwende ich die empfohlene Beitrag Schritt beim Aufbau, erhalte ich die Ausnahme

Sie müssen die folgenden obligatorischen Eigenschaften für ‚Unknown‘ definieren: sonar.projectKey, sonar.projectName, sonar.projectVersion, sonar.sources

Unerwünschte Lösung:

die Lösung ist, die erforderlichen Eigenschaften, über sonar-project.properties Datei im Java-Projekt oder über Parameter in Jenkins Schritt.

IMHO: das ist Duplizierung. Alle relevanten Informationen sind im Maven pom definiert: projectKey kann von artifactId abgeleitet werden, projectName und projectVerstion sind dieselben Eigenschaften in maven. Vor allem die Projektversion ist kritisch. Ich möchte die Projektversion nach jeder Veröffentlichung nicht aktualisieren (oder Code in Release-Plugin schreiben, um es automatisch zu aktualisieren). Build-Schritt in Jenkins, ohne neu zu definieren alle Projekteigenschaften für all mein Projekt

Was ich

will ich will die empfohlene Post verwenden Sonar glücklich zu machen. Stattdessen sollte sonar/jenkins/plugin/was auch immer die Eigenschaften von meiner maven pom Datei ableiten. Gibt es ein zusätzliches Plugin, das ich verwenden kann? Kann ich mein Jenkins-Sonar-Plugin neu konfigurieren?

Ich möchte keine Sonar spezifischen Informationen in meinem Pom/Projekt zur Verfügung stellen, weil das Projekt Sonar nicht interessieren sollte. Es sollte nur Informationen enthalten, die zum Erstellen des Projekts erforderlich sind.

Antwort

15

The documentation (obwohl etwas verwirrend, siehe unten) erklärt, wie man einen generischen Post-Build-Schritt (Nutzung von Umgebungsvariablen) statt der veralteten Post-Build-Aktion verwendet. Kurz:

  • Installieren Sie das neueste SonarQube Plugin (v2.4 ab sofort) in Jenkins
  • in System Config unter Sonarqube Server: Check Enable injection of SonarQube server configuration as build environment variables
  • in der Konfiguration Ihres Maven Projekt:
    • Scheck Prepare SonarQube Scanner environment
    • fügen Sie einen Post-Build-Schritt Invoke top-level Maven targets und nutzen die injiziert Umgebungsvariablen im Goals Feld zB:

      $ SONAR_MAVEN_GOAL -Dsonar.host.url = $ SONAR_HOST_URL -Dsonar.login = $ SONAR_AUTH_TOKEN

bearbeiten: wenn the documentationThe Post-build Action for Maven analysis is deprecated. sagt, bezieht er sich auf dem alten Post-Build Aktion die nicht mehr dokumentiert. Der Absatz nach dieser Warnung (zusammengefasst in dieser Antwort) ist wirklich das empfohlene Verfahren. Illustration here wenn es immer noch nicht klar ist.

+1

Vielen Dank für Ihre Antwort, aber in der verknüpften Dokumentation können Sie den folgenden Text sehen: "Die Post-Build-Aktion für Maven-Analyse ist veraltet. Die Post-Build-Aktion für Maven-Analyse ist veraltet." Leider entspricht diese Lösung nicht meinen Anforderungen. –

+1

Sie missverstehen die Dokumentation: Was veraltet ist, ist die Post-Build ** Aktion **. Was in meiner Antwort und in der Dokumentation (unterhalb der Warnung) beschrieben wird, ist der empfohlene Weg, einen Standard-Maven-Build-Schritt (und Umgebungsvariable-Injektion) zu verwenden. Siehe hierzu [Illustration] (http://i68.tinypic.com/x4er8y.png). –

+0

Sie haben Recht. Dieses Maven-Ziel wird als Post-Build-STEP ausgeführt. Daher bezieht sich die Abwertung nicht auf diese Lösung. Ich werde meine Antwort entfernen, denn wie Sie gesagt haben, ist es eine schlechte Idee wegen der nicht automatisierten Projektstrukturnutzung. Danke vielmals –

1

Mit Sonarqube Scanner als Post Build-Schritt Sie es mit zumindest dieser Eigenschaften in Analysis Eigenschaften konfigurieren:

sonar.projectKey=${POM_ARTIFACTID} 
sonar.projectName=${POM_DISPLAYNAME} 
sonar.projectVersion=${POM_VERSION} 
sonar.sources=src 
sonar.java.binaries=target 
sonar.language=java 
sonar.sourceEncoding=UTF-8 

POM_ * Variablen abgebildet werden von Jenkins von Maven GAV Info, hier: https://github.com/jenkinsci/jenkins/pull/933/files