Jenkins-Integration

Voraussetzungen und Hinweise

  • Diese Anleitung setzt voraus, dass Sie mit Jenkins und der Konfiguration von Freestyle-Projekten vertraut sind,
  • Um Berichte zur Ansicht in Jenkins zu veröffentlichen, müssen Sie HTML Publisher Plug-in
  • Die CppDepend-GUI wurde verwendet, um eine CppDepend-Projektdatei für die spätere Analyse zu erstellen
  • Es ist ein vorhandenes Freestyle-Projekt verfügbar, das die Assemblies, die das CppDepend-Projekt verarbeiten wird, bereits erfolgreich auscheckt und kompiliert
  • CppDepend muss auf allen Rechnern installiert sein, die als Jenkins-Build-Agent verwendet werden. Ich habe die Versionen 6 und 7 problemlos getestet
  • Die standardmäßige Jenkins-Content-Security-Policy verhindert, dass eingebettete CppDepend-Berichte korrekt angezeigt werden. Diese Anleitung enthält Anweisungen zum Neukonfigurieren der Policy

Nach oben

Aufrufen von CppDepend

Derzeit gibt es kein dediziertes Jenkins-Plugin für CppDepend, daher sind wir in der Tiefe der Integration etwas eingeschränkt.

Der erste Schritt ist der Aufruf von CppDepend. Dies erreichen wir durch Hinzufügen Windows-Batchbefehl ausführen Schritt zu unserem Projekt hinzu und setzen dann Befehl Feld zum Aufrufen CppDepend.Console.exe Übergeben des Dateinamens unseres Projekts.

CppDepend.Console.exe "%WORKSPACE%\myproject\source\Applications\WebCopy\WebCopy.cdproj"

CppDepend.Console.exe erfordert, dass der Projektdateiname vollqualifiziert ist. Sie können die Umgebungsvariable %WORKSPACE% verwenden, um den vollqualifizierten Pfad des Agent-Workspace zu erhalten und Ihren Projektdateinamen daran anzuhängen

Ich habe CppDepend und andere ähnliche Tools, die von Builds verwendet werden, in SVN eingecheckt, sodass sie automatisch in den Workspace eines Build-Agenten ausgecheckt werden. In meinem Fall kann ich daher einen relativen Pfad verwenden, der auf CppDepend.Console.exe Alternativ können Sie den Pfad ganz weglassen, wenn der Speicherort der CppDepend-Binärdateien Teil des OS-Pfads ist.

CppDepend Jenkins

Absolute oder relative Pfade in einem CppDepend-Projekt verwenden

Standardmäßig sind alle Pfade und Dateinamen im CppDepend-Projekt absolut. Jenkins-Builds finden in einem temporären Workspace statt, dessen Speicherort für jeden Agenten unterschiedlich sein kann. In solchen Szenarien kann die Verwendung absoluter Pfade entweder zu vollständigem Fehlschlag oder zu veralteten / unerwarteten Ergebnissen führen.

Es gibt zwei Möglichkeiten, dies zu umgehen – die erste besteht darin, Befehlszeilenschalter zu verwenden, um die Pfade im Projekt zu überschreiben, und die zweite darin, sie relativ zu machen.

Überschreiben der absoluten Pfade

Der InDirs und OutDir Argumente können verwendet werden, um Überschreibungspfade anzugeben. InDirs steuert, wo sich alle zu analysierenden Quelldateien befinden, und OutDir gibt an, wohin der Bericht geschrieben wird. Beachten Sie, dass InDirs ermöglicht es Ihnen, bei Bedarf mehrere Pfade anzugeben.

CppDepend.Console.exe "%WORKSPACE%\myproject\source\Applications\WebCopy\WebCopy.cdproj" /InDirs "%WORKSPACE%\myproject\source\Applications\WebCopy" /OutDir "%WORKSPACE%\myproject\source\Applications\WebCopy\CppDependOut"

Konfigurieren von CppDepend zur Verwendung relativer Pfade

Diese Anleitung gilt für das Standalone-Tool, sollte aber auch aus der Visual-Studio-Erweiterung heraus funktionieren.

  • Öffnen Sie CppDepend-Projekteigenschaften Editor
  • Wählen Sie Referenzierte Pfade Tab
  • Wählen Sie in der Pfadliste jeden Pfad, den Sie relativ machen möchten
  • Rechtsklick und auswählen Als relativen Pfad festlegen (zum Speicherort der CppDepend-Projektdatei)
  • Speichern Sie Ihre Änderungen

Nach oben

Build fehlschlagen lassen

Wenn die Windows-Batch ausführen Befehl einen Wert ungleich null zurückgibt, lässt Jenkins den Build standardmäßig fehlschlagen. Wenn CppDepend erfolgreich läuft und keine Quality Gate schlägt fehl gibt es den erwarteten Wert null zurück. Auch wenn es ansonsten erfolgreich ausgeführt wurde, gibt es jedoch im Falle eines Quality-Gate-Fehlers einen Wert ungleich null zurück.

Je nach Ihren Anforderungen möchten Sie dieses Verhalten möglicherweise deaktivieren. Wenn Sie CppDepend beispielsweise mit einer bestehenden Codebasis verwenden, haben Sie möglicherweise echte Verstöße zu untersuchen – oder False Positives.

Wir können dies entweder durch Markieren des Builds als instabil oder durch Unterdrücken des Fehlers behandeln.

Markieren des Builds als instabil

Der Windows-Batchbefehl ausführen hat einen zusätzlichen Parameter (verborgen hinter Erweitert Schaltfläche) namens ERRORLEVEL zum Markieren des Builds als instabil. Durch Setzen dieses Feldwerts auf 1 (der Exit-Code, den CppDepend zurückgibt, wenn kritische Verstöße festgestellt werden), dann wird das Build-Ergebnis Unstable sein, aber die Ausführung wird fortgesetzt.

Unterdrücken des Fehlers

Als Name des Schritts, Windows-Batchbefehl ausführenandeuert, ist dies nicht die Ausführung eines einzelnen Befehls. Jenkins erstellt eine Batch-Datei basierend auf dem Inhalt des Command-Felds und führt diese dann aus. Um den Fehler zu unterdrücken, müssen wir daher einfach selbst die Batch-Datei beenden, wodurch wir unseren eigenen Exit-Code liefern können.

Fügen Sie dazu einfach hinzu: exit /b 0 als neue Zeile in der Befehl Feld, und jeder vorhandene Fehlercode wird ignoriert.

Wenn Sie dies tun und CppDepend aus einem anderen Grund nicht läuft, werden Sie davon nicht erfahren, es sei denn, Sie prüfen die Logdateien. Ich würde wahrscheinlich einfach den Build als unstable markieren, aber Sie könnten den Befehl auch ändern, um ERRORLEVEL-Werte manuell zu prüfen und entsprechend zu handeln.

Veröffentlichen des HTML

Nach Abschluss der CppDepend-Analyse wird ein HTML-Bericht generiert. Zwar bietet dieser Bericht nicht den Funktionsumfang der Ergebnisansicht in der CppDepend-GUI, liefert aber viele nützliche Daten.

Um dies in Jenkins einzubetten, müssen wir hinzufügen: HTML-Berichte veröffentlichen Post-Build-Schritt.

  • Festlegen des Zu archivierendes HTML-Verzeichnis Feld auf den Speicherort des CppDepend-Berichts zeigen - standardmäßig ist dies ein Ordner namens CppDependOut im selben Ordner wie das CppDepend-Projekt.
  • Festlegen des Indexseite[n] Feld auf den Namen des Berichts, der immer CppDependReport.html
  • Legen Sie schließlich fest: Berichtstitel Feld auf einen beliebigen Wert - dies wird verwendet, um die Navigationslinks in Jenkins zu beschriften
CppDepend Jenkins 2b

Anzeigen des Berichts

Wie ich zu Beginn dieses Artikels erwähnt habe, hat Jenkins eine Sicherheitsrichtlinie, die eingebettete Ressourcen einschränkt. Diese Richtlinie beeinträchtigt den CppDepend-Bericht, daher müssen Sie die Einschränkungen leicht lockern, wie gemäß meinem vorherigen Beitrag.

Sobald Ihr Jenkins-Job ausgeführt und erfolgreich abgeschlossen wurde, sollten in der Seitenleiste des Jobs neue Navigationsoptionen zum Anzeigen der Berichte sowie in der Statusübersicht ein Zugriff auf den CppDepend-Bericht erscheinen.

CppDepend Jenkins 2

Externe Ressourcendateien zur Vermeidung von Duplikaten verwenden

Ein weiterer CppDepend-Standard ist, alle Regeln in der Projektdatei zu speichern. Diese Standardregeln erhöhen die Größe des CppDepend-Projekts erheblich, und wenn Sie sie nicht ändern, macht es nicht wirklich Sinn, sie immer wieder zu duplizieren.

Glücklicherweise erlaubt CppDepend, Regeln in externen Dateien zu speichern, also habe ich die CppDepend-GUI verwendet, um eine Regeldatei zu erstellen. Nun wurden in jedem Projekt alle eingebauten Regeln gelöscht und es verweist nur noch auf die externe Datei. Praktisch!

Wenn Ihre Projekte absolute Pfade verwenden, können Sie einfach /RuleFiles und /KeepProjectRuleFiles Parameter mit CppDepend.Console.exe um bei Bedarf die absoluten Versionen zu überschreiben.

Ebenso führt CppDepend Version 2017 neue Einstellungen für Projektschulden ein, bietet aber auch die Möglichkeit, diese in einer externen Datei zu speichern. Bedauerlicherweise scheint es keine Überschreibungsschalter zu geben in CppDepend.Console.exe, aber da ich die Technical-Debt-Funktionen noch nicht getestet habe, weiß ich nicht, ob dies ein Problem sein wird. (Anmerkung des CppDepend-Teams: Nutzerfeedback ist hierzu willkommen)

Testen Sie CppDepend noch heute

Starten Sie Ihre 14-tägige kostenlose Testversion mit vollem Zugriff auf alle Dokumentationsfunktionen. Keine Kreditkarte erforderlich.