Bamboo-Integration

Entwicklungseffizienz steigern mit CppDepend- und Bamboo-Integration

Was ist Bamboo?

Kurz gesagt: Bamboo ist der Build-Server von Atlassian in seinen CI-Stack. Es wird häufig mit der Integration von BitBucket verwendet und bietet auch Möglichkeiten, sich mit beliebigen anderen Repositories zu verbinden (GitHub eingeschlossen). Bamboo selbst ermöglicht es, Build-Projekte zu erstellen, Deployment-Strategien, die Verbindung mit anderen Atlassian-Tools oder sogar automatisch eine Nachricht mit dem Build-Status an Ihre #Slack-Kanäle zu senden. Wenn Sie bereits mit Jenkins, Bamboo oder GitLab gearbeitet haben, sollten Sie mit der täglichen Nutzung eines solchen Tools bereits vertraut sein. Für weitere Details zu Bamboo, folgen Sie bitte diesem Link, er liefert vollständige Details zu Bamboo.

Voraussetzungen

  • Bamboo Server (oder Agent) unter Windows. Falls Sie eine neue Instanz installieren müssen klicken Sie hier, um Bamboo herunterzuladen.
    • Es ist zwingend erforderlich, JDK 1.8 (oder JRE scheint ebenfalls zu funktionieren) in einem Ordner zu verwenden oder zu installieren, dessen Name keine Leerzeichen enthält. Jede Version höher als 8 funktioniert nicht. Dies soll in Zukunft unterstützt werden.
    • Wenn Sie lokal einen Testserver betreiben, um zu sehen, wie es funktioniert, ist er unter http://localhost:8085/ erreichbar
    • Während des Ersteinrichtungsassistenten wird ein Schlüssel zur Aktivierung benötigt (30 Tage oder echte Lizenz). Um eine 30-Tage-Lizenz zu erhalten, gehen Sie in Ihren Atlassian-Bereich oder verwenden Sie einfach diesen Link um die Evaluierungslizenz für Ihr Konto anzufordern
  • CppDepend-DevOps-Lizenz oder CppDepend-Trial, aktiviert auf der Build-Maschine (oder Ihrem aktuellen Rechner, wenn Sie Bamboo lokal betreiben)
  • PowerShell ist nicht zwingend erforderlich, aber Sie werden später sehen, dass es ein Muss ist, wenn Sie einen sauberen Build ohne Fehler wollen

Nach oben

Bamboo – CppDepend-Fähigkeit hinzufügen

Was ist eine Fähigkeit in Bamboo

In Bamboo sollten Sie normalerweise für jeden Agenten eine spezifische Capability einrichten, um build-bezogene Tools verwenden zu können. In diesem Fall fügen wir die CppDepend-Capability zu einem Windows-Agenten hinzu. Diese Capability verweist auf CppDepend.Console.exe ausführbare Datei aus dem zuvor installierten/heruntergeladenen CppDepend-Paket. Vergessen Sie nicht, sie mindestens einmal zu starten, um die Lizenz zu aktivieren. Die Details finden Sie in der Dokumentation. In meinem Fall ist sie unter [D:\CppDepend\] installiert. Ich ziehe es vor, die Version im Ordnernamen zu behalten – so erkenne ich leicht, ob mein Agent die richtige Version des Tools verwendet. Wenn ich den Ordner der ausführbaren Datei ändere, wirkt sich diese Capability automatisch auf alle Builds aus, die sie verwenden. Sie wird in keinem Fall einen automatischen Build erneut auslösen. Die Variable wird dann ab dem nächsten Build erneut angewendet.

Es ist üblich, diese Capabilities oder ausführbaren Dateien in diesem Bildschirm zu pflegen. Er gruppiert alle Funktionen Ihres Agents/Ihrer Agents. Weitere Details zu dieser Funktion finden Sie auf der Atlassian-Website.

Beachten Sie: Die Capability zeigt Abhängigkeiten zu bestehenden Builds an. Wenn jedoch eine Capability-Variable innerhalb eines Skripts verwendet wird, sehen Sie nirgendwo, dass eine aktive Abhängigkeit besteht. Aus diesem Grund müssen Sie bei mehreren Agenten manuell angeben, welcher Agent für Ihre Build Stage verwendet werden soll.

Gehen Sie zu Ihrer Agentenkonfiguration

  • Klicken Sie auf Optionsrad;
  • Auswählen Agenten;
  • Dies bringt Sie im Administrationspanel direkt zu Agenten Build-Ressourcen;
  • Wählen Sie eines Ihrer Windows-Build-Agent durch Anklicken.
Agentenkonfiguration

Nach oben

Agentenzusammenfassung

  • Stellen Sie sicher, dass Ihr Agentenname ist gültig;
  • Wählen Sie Fähigkeiten Tab;
  • Klicken Sie auf Fähigkeit hinzufügen Verknüpfungsschaltfläche.
Agentenzusammenfassung

Hinzufügen der Fähigkeit

  • Fähigkeitstyp: Ausführbare Datei
  • Typ: Befehl
  • Bezeichnung der ausführbaren Datei: CppDepend
  • Pfad: D:\CppDepend\CppDepend.Console.exe
  • Klicken Sie auf die Schaltfläche Hinzufügen
Fähigkeit hinzufügen

Siehe die agentspezifischen Fähigkeiten

Wie Sie sehen, haben Sie nach den vorherigen Schritten Ihre agentspezifische Capability hinzugefügt. Nun können wir diese Capability während unseres Builds verwenden.

agentspezifische Fähigkeiten

Bamboo-Build-Konfiguration – Capabilities (einfach)

Nehmen wir an, Ihr Build existiert bereits und Sie möchten CppDepend.Console.exe-Befehl Im folgenden Tutorial verwende ich eine einfache Dotnet-Core-2.1-Projektmappe als Beispiel. Der Build wird benannt IdentityServer4.LdapExtension (GitHub-Projekt), in dem Sie Ihr Git-Repository, Ihr CppDepend-Projekt und Ihren Basis-Build bereits konfiguriert hätten (Checkout und Build).

Fügen Sie Ihrer Build-Stage eine neue Aufgabe hinzu

  • Stellen Sie sicher, dass Sie sich in der Konfiguration Ihres Projekts befinden;
  • Gehen Sie zu Ihrem Build-Job, in dem Sie normalerweise Ihre Tests und alles andere ausführen;
  • Innerhalb des Aufgaben Registerkarte finden Sie alle Details Ihres aktuellen Jobs;
  • Fügen Sie eine neue Aufgabe hinzu.
Aufgabe hinzufügen

Sobald das Popup erscheint

  • Nach Befehl suchen im Suchfeld;
  • Befehl auswählen durch Anklicken.
Popup

Konfigurieren wir den Befehl

  • Die neue Befehlsaufgabe sollte bereits angezeigt werden;
  • Die Beschreibung der Aufgabe, in diesem Fall: CppDepend;
  • Wählen Sie die ausführbare Datei, die Sie für Ihre Agent-Capability erstellt haben: CppDepend;
  • Geben Sie als Argument den vollständigen Pfad Ihrer CppDepend-Projektdatei (.cdproj-Erweiterung) ein. Stellen Sie zuvor sicher, dass in der CppDepend-UI unter CppDepend Project Properties > Paths Referenced alle Pfade als relativ (zum Speicherort der Projektdatei) definiert sind.
    Beispiel: ${bamboo.build.working.directory}/IdentityServer.LdapExtension.cdproj
    Sie können hinzufügen: /silent Option, wenn Sie nicht alle Ausgabelogs von CppDepend sehen möchten, aber ich rate dringend davon ab, dies innerhalb eines Builds zu tun. Möglicherweise müssen Sie mithilfe der Logs debuggen.
  • Speichern Sie Ihre Konfiguration
Konfigurationsbefehl

Erstellen Sie Ihre neue Konfiguration

Ich empfehle, nach jeder Änderung immer zu bauen. Auf diese Weise lässt sich leicht erkennen, ob der Build aus einem echten Grund (Konfiguration) oder aufgrund einer Codeänderung (getriggerte Builds) fehlgeschlagen ist.

Beachten Sie, dass CppDepend.Console.exe gibt zurück Exitcode ungleich null Code, wenn mindestens ein Quality Gate fehlschlägt. Dieser Exit-Code kann verwendet werden, um Ihren Build-Prozess in einer solchen Situation zu stoppen. Weitere Erläuterungen finden Sie in die Quality-Gates-Seite.

Der Bericht existiert auch bei einem Fehlschlag, allerdings wird der Build rot sein und Ihr Artefakt wird wahrscheinlich nicht verfügbar sein. Da es keine /ErrorLevel benutzerdefinierte Konfiguration für den Exit-Code verwenden, müssen Sie anders vorgehen, um diese Fehler zu ignorieren.

  • Option 1: Ignorieren Sie die Fehler, indem Sie die speziellen Tags von CppDepend in Ihren Code einfügen. Fügen Sie in diesem Fall einfach die CppDepend-Ignore-Attribute an den erforderlichen Stellen hinzu und starten Sie nach Ihrem Commit einen neuen Build.
  • Option 2: Verwenden Sie ein Skript anstelle eines Befehls, um Ihren Ablauf vollständig zu kontrollieren und fortzufahren, selbst wenn es ein Quality-Gate-Problem gibt. Dies ist das Thema des nächsten Abschnitts.

Bamboo-Build-Konfiguration – PowerShell-Skript (komplex)

Wie bereits erwähnt, richtet sich dieser Abschnitt eher an diejenigen, die bereits ein Projekt ohne schwerwiegende Probleme haben, die ein Quality Gate zum Scheitern bringen, oder die beim Quality Gate scheitern, aber trotzdem Berichte generieren möchten.

Verstehen Sie mich nicht falsch, der Fähigkeit erstellt wird, lohnt sich. Der einzige Nachteil in diesem Fall ist jedoch, dass die Capability unsere Build-Abhängigkeit von CppDepend nicht erkennt.

In diesem Fall erstellen wir statt eines Befehls ein Skript (oder fügen es dem aktuellen Dotnet-Core-Build-Skript hinzu)

  • Gehen Sie zu Ihrer Build-Konfiguration, Standard-Stage (oder einer bestimmten) und klicken Sie auf Aufgabe hinzufügen;
  • Wählen Sie Skript Typ;
  • Geben Sie ein Beschreibung und wählen Sie Windows PowerShell als Interpreter;
  • In diesem Fall verwenden wir Inline Typ anstelle eines PS1-Shell-Skripts. Diese Option erstellt automatisch ein Shell-Skript im Hintergrund. Schreiben Sie einfach den Code-Snippet unter dem Bild nach.
Skript

Die PowerShell verwendet die vorhandene CppDepend-Projektdatei (*.cdproj-Erweiterung, eine XML-Datei). Dann erstellt sie den finalen Befehl und führt ihn aus (Invoke-Expression). Hier ist das im Bild oben verwendete PowerShell-Skript.

# CDProj sollte normalerweise eine Variable im Build sein, dasselbe gilt für andere Teile.
# Auf diese Weise können Sie ein Build-Skript statt Inline verwenden, und dieses Build-Skript
# kann Teil Ihres Build-Repositorys sein.
$cdproj = "IdentityServer.LdapExtension.cdproj"

# Laden Sie die CppDepend-XML-Projektdatei.
$ndependXml = [xml](Get-Content .\${cdproj})

# CppDepend-Befehl starten
$expr = "${bamboo.capability.system.builder.command.CppDepend} " +`
   "${bamboo.build.working.directory}\${cdproj} " +`
   "/OutDir ${bamboo.build.working.directory}\CppDependOut"

Invoke-Expression $expr

# Einfache Ausgabe für das Ausführungsergebnis.
write-host "The exit code was: ${LASTEXITCODE}"

Das CppDepend-Artefakt generieren

Nun sollten Sie bauen können und den CppDepend-Ausgabeordner erhalten. In dieser Demo haben wir CppDependOut als den Ordner. Dazu müssen wir die Artefakt-Konfiguration hinzufügen. Gehen Sie bitte zurück zur Build-Konfiguration und zu Ihrer Default Stage, in der Sie das CppDepend-Skript haben. Sobald dies abgeschlossen ist, wählen Sie Artefakte Registerkarte und klicken Sie auf Artefakt erstellen Schaltfläche.

Die einzugebenden Felder sind:

  • Name: CppDepend
  • Speicherort: CppDependOut
  • Kopiermuster: **/*

Sobald dies abgeschlossen ist, sollten Sie Ihr Projekt neu bauen und prüfen können, ob Ihr Build-Artefakt vorhanden ist. Beachten Sie, dass Sie das geteilte Artefakt wiederverwenden könnten, wenn Sie Ihre Builds vergleichen möchten. Das ist etwas komplexer, aber möglich – es wird in diesem Tutorial nicht behandelt. Sie könnten auch einfach vermeiden, den Build-Ordner bei jedem neuen Build zu bereinigen. Ich empfehle das nicht, aber es könnte funktionieren.

Zum Beispiel haben wir den folgenden erfolgreichen Build:

  • Grüner Build = Erfolg
  • Gehen Sie zu den Artefakten Ihres Builds
  • Klicken Sie auf den Artefaktnamen, der Sie interessiert (in diesem Fall CppDepend)
Artefakte

Sobald das Artefakt geöffnet wird, zeigt es den Inhalt der ZIP-Datei. Klicken Sie einfach auf die Datei CppDependReport.html. Dadurch öffnet sich ein Link, der so aussieht: http://localhost:8085/artifact/I4E-ID/shared/build-19/CppDepend/CppDependReport.html#Main

Ihre Seite sollte in etwa so aussehen (das hängt von Ihrem Projekt ab):

Bericht

Testen Sie CppDepend noch heute

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