Bereitstellen statischer Analysen und Komponententests in containerisierten Umgebungen, Teil 1
Von Miroslaw Zielinski
19. Mai 2020
6 min lesen
Sind Sie schon einmal beim Konfigurieren von C/C++test 2020 in containerisierten Umgebungen stecken geblieben? Hier ist eine exemplarische Vorgehensweise, wie Sie das und mehr tun können.
Zum Abschnitt springen
So konfigurieren Sie den Parasoft C / C ++ - Test 2020.1 für containerisierte Entwicklungsumgebungen
Die Freigabe Parasoft C / C ++ Test 2020.1 bringt eine Sammlung von Verbesserungen mit, die die Verwendung mit Docker-Containern vereinfachen. Ich werde Sie durch die Schritte zum Konfigurieren von C / C ++ - Test 2020.1 für die Arbeit in containerisierten Entwicklungsumgebungen führen.
Eingebettete Entwicklungsteams lieben Docker-Container
Containergesteuerte Bereitstellungen von Entwicklungstools werden zum Kernstück eingebetteter Entwicklungsteams. Obwohl Container ursprünglich entwickelt wurden, um Probleme bei der Bereitstellung von Microservices und webbasierten Anwendungen zu lösen, wurden sie kürzlich bei eingebetteten Teams immer beliebter - insbesondere bei großen Teams, die Container zur Verwaltung komplexer Toolchains verwenden.
Bei der Verwaltung komplexer Entwicklungsumgebungen, insbesondere im sicherheitskritischen Bereich, haben Teams normalerweise mit den folgenden Herausforderungen zu kämpfen:
- Synchronisieren von Upgrades für das gesamte Team auf eine neue Version eines Tools wie eines Compilers, Erstellen einer Toolchain usw.
- Dynamische Reaktion auf einen neuen Sicherheitspatch für die Bibliothek oder das Software Development Kit (SDK) und dergleichen.
- Sicherstellung der Konsistenz der Toolchain für alle Teammitglieder und der automatisierten Infrastruktur (CI / CD).
- Möglichkeit, die Entwicklungsumgebung zu versionieren und wiederherzustellen, um die ältere Version des Produkts zu warten, das mit der spezifischen Toolchain zertifiziert wurde.
- Onboarding und Einrichtung neuer Entwickler.
All diese Probleme sind mit Containern leicht zu lösen. Kein Wunder Teams lieben Container! Lassen Sie uns einen Blick darauf werfen, wie der C / C ++ - Test für die Verwendung in einer Containerumgebung konfiguriert wird.
Verwenden von Parasoft C / C ++ Test Professional Mit einer Containerized Compilation Toolchain
Es ist einfach, Parasoft C / C ++ test Professional so zu konfigurieren, dass es mit einer Kompilierungs-Toolchain und der in Containern bereitgestellten Ausführungsumgebung funktioniert. Wir unterstützen Bereitstellungen, die auf Linux- und Docker-Containern basieren. Hier ist eine allgemeine Übersicht darüber, wie diese Art der Einrichtung aussieht:
Wie Sie sehen können, greift der C / C ++ - Test auf den containerisierten Compiler (GNU GCC) und die Laufzeitumgebungen zu. In diesem speziellen Setup gibt es zwei separate Docker-Container:
- Eine für den Compiler und Build-Tools
- Eine andere für die Ausführungsumgebung (z. B. abgespeckte Version von Embedded Linux)
Lassen Sie uns sehen, wie Sie C / C ++ test Professional für die Arbeit mit einer In-Container-Kompilierungs-Toolchain und einer Ausführungsumgebung konfigurieren. Im Beispiel verwenden wir die neueste GCC Container-Image über den Docker-Hub verfügbar.
Lassen Sie uns sehen, wie Sie C / C ++ test Professional für die Arbeit mit einer In-Container-Kompilierungs-Toolchain und einer Ausführungsumgebung konfigurieren. Im Beispiel verwenden wir die neueste GCC Container-Image über den Docker-Hub verfügbar.
Die folgenden Anweisungen setzen voraus, dass Sie eine haben Dockermotor korrekt in Ihrer Umgebung installiert und konfiguriert. Und das gleiche für C / C ++ Test Professional 2020.1.
Schritt 1: Starten Sie den Parasoft C / C ++ - Test
- Stellen Sie sicher, dass Ihr Docker funktioniert. Beginnen wir mit einem kurzen Test und drucken die Versionsnummer des GCC-Compilers aus, die im „neuesten“ Image des GCC-Containers enthalten ist.
- Bevor wir den Parasoft C / C ++ - Test starten, Legen Sie eine dedizierte Umgebungsvariable fest CPPTEST_CONTAINER_NAME auf den Namen des Containers. Dies ist eine einfache Möglichkeit, dem C / C ++ - Test mitzuteilen, welcher Container zum Aufrufen des Compilers oder Linkers verwendet werden soll. Es funktioniert gut mit Jenkins Jobs.
- Außerdem empfehle ich Ihnen Setzen Sie die Variable CPPTEST_INSTALL um auf das C / C ++ - Testinstallationsverzeichnis zu verweisen. Dies ermöglicht eine einfache Einrichtung. Sobald die Variablen festgelegt sind, können wir den C / C ++ - Test starten.
- Wählen Sie für Ihren Arbeitsbereich einen Standort aus irgendwo im HOME-Verzeichnis (dazu später mehr).

Schritt 2: Erstellen Sie ein Demo-Projekt
Um das Erstellen eines Demoprojekts zu vereinfachen, erstellen wir das Standardprojekt „HelloWorld“ mit dem Standardassistenten „Neues Projekt“.
- Wählen Sie "Dateimenü"> "Neu"> "C ++ - Projekt" und dann "Hallo Welt C ++ - Projekt".
- Geben Sie den Namen Ihrer Wahl für Ihr Projekt ein. Es sollte mehr oder weniger wie im folgenden Screenshot aussehen.
- Klicken Sie Endziel um das Standardprojekt für unser Beispiel zu erstellen.

Schritt 3: Ändern Sie die Compiler-Einstellungen
Ändern Sie nach dem Erstellen des Projekts einige Elemente in den Build-Einstellungen des C / C ++ - Tests.
- Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften und dann Parasoft>C/C++test>Build-Einstellungen.
- Ändern Sie im Bereich "Build-Einstellungen" zwei Elemente im Abschnitt "Compiler-Einstellungen":
-
- Familie. Ändern Sie die Anpassung an den im Container installierten Compiler. Zum Zeitpunkt des Schreibens dieses Blogs enthielt das neueste "gcc" -Image den GNU GCC 9.2-Compiler, der zur Auswahl der Compilerkonfiguration "GNU GCC 9.x (x86_64)" führte.
- Standardmäßige ausführbare Compiler-Dateien. Die standardmäßigen ausführbaren Dateien für den Compiler müssen durch spezielle Wrapper ersetzt werden, um den In-Container-Compiler anstelle des regulären Compilers aufzurufen, der direkt im Host-Betriebssystem installiert ist. Diese Wrapper, remote-gcc und remote-g ++, werden in der C / C ++ - Test 2020.1-Distribution ausgeliefert. In der Abbildung unten verwende ich eine Hilfsumgebungsvariable für das C / C ++ - Testinstallationsverzeichnis. Sie können entweder eine ähnliche Variable für Ihre Umgebung festlegen oder vollständige Pfade verwenden, um die Wrapping-Skripte zu finden.

Schritt 4: Überprüfen Sie, ob der Container ausgeführt wird
Stellen Sie sicher, dass der Container mit Ihrer Kompilierungs-Toolchain betriebsbereit ist, bevor Sie den Parasoft C / C ++ - Test verwenden.
Die Compiler-Wrapper, die wir im vorherigen Schritt eingerichtet haben, sind so konzipiert, dass sie die Compiler-Befehle im laufenden Container ausführen. Dies ist schneller als das Starten des Containers bei jedem Aufruf.
Aussichten für CI / CD-BereitstellungenDas Starten des Containers vor dem Ausführen von C / C ++ - Tests und das Beenden danach können Teil des Jenkins-Jobs sein. In diesem Beispiel wird davon ausgegangen, dass die GUI-Basis verwendet wird. Zu diesem Zweck können wir Eclipse Run-Konfigurationen erstellen. Ich schlage vor, zwei Konfigurationen vom Typ "C / C ++ - Anwendung" zu erstellen und wie folgt zu benennen:
- "Start gcc container"
- "Stop gcc container"
- Wählen Sie Menü Ausführen> Konfigurationen ausführen….
- Erstellen Sie zwei Ausführungskonfigurationen mit den Namen "Start gcc container" und "Stop gcc container".
- Geben Sie auf der Registerkarte Haupt für beide Konfigurationen Ihren Pfad zu Docker als "C / C ++ - Anwendung" ein, wie unten gezeigt:
- Aussichten für "Start gcc container"Geben Sie auf der Registerkarte Argumente den folgenden Befehl ein:
style = ”padding-left: 40px;”>Führen Sie –rm -d -it –name gcc -v $ {env_var: HOME} aus: $ {env_var: HOME}
-v $ {env_var: CPPTEST_INSTALL}: $ {env_var: CPPTEST_INSTALL} gcc
Wie im folgenden Screenshot gezeigt:
Der interessante Teil dieses Befehls sind die Optionen -v, die zum Zuordnen von Volumes verwendet werden.
Die erste Option -v ordnet das lokale HOME-Verzeichnis dem Container-Dateisystem zu. Hier soll der Zugriff auf den Quellcode für den im Container arbeitenden Compiler sowie für den Parasoft C / C ++ - Test ermöglicht werden, der im Host-Betriebssystem ausgeführt wird.
In meinem Beispiel verwende ich der Einfachheit halber HOME, da ich meinen Arbeitsbereich direkt in HOME platziert habe.
Bei realen Setups können Sie nur den Teil des Dateisystems, der den Quellbaum und den Eclipse-Arbeitsbereich enthält, strikt dem Projekt zuordnen.
Die zweite Option -v ordnet den Speicherort des C / C ++ - Testinstallationsverzeichnisses zu, um den Zugriff auf C / C ++ - Testheaderdateien im Container zu ermöglichen.
- Aussichten für "Stop gcc container"Geben Sie auf der Registerkarte Argumente den folgenden Befehl ein, wie in der folgenden Abbildung dargestellt:
gcc stoppen
- Verwenden Sie die Ausführungskonfiguration "Start gcc container", um den Container auszuführen.
Die Eclipse-Konsole sollte Ihnen den Hash des Containers anzeigen. Um sicherzustellen, dass alles in Ordnung ist, können Sie zur Befehlszeile wechseln und den folgenden Befehl aufrufen:
Wenn Sie unseren "gcc" -Container in der Liste sehen, können Sie den C / C ++ - Test zum Testen Ihres Codes verwenden.
- Lassen Sie uns das Projekt im Navigator auswählen. Wählen Sie im Parasoft-Menü Test Using> Builtin> Unit Testing> Generate Unit Tests.
Sie sollten ein neues "Test" -Verzeichnis sehen, das in Ihrem Projekt mit einem einzelnen Komponententest erstellt wurde, der für die "Haupt" -Funktion erstellt wurde.
- Sobald die Testfälle generiert wurden, können Sie sie ausführen. Wählen Sie für die Ausführung im Container Test mit> Eingebaut> Komponententest> Komponententests ausführen aus.
Der C / C ++ - Test sollte eine Sammlung von Kompilierungen im Container und das Verknüpfen von Befehlszeilen aufrufen und mit der Erstellung und Ausführung einer Testbinärdatei im Container enden.
Das ist es! Mit diesen Schritten haben Sie den Parasoft C / C ++ - Test vorbereitet, um Testaktivitäten mithilfe der In-Container-Kompilierungs-Toolchain durchzuführen.
Wenn Sie den Compiler für ein Projekt ändern oder etwas in der Laufzeitausführungsumgebung ändern müssen, können Sie entweder das Container-Image aktualisieren oder es in eine andere Version ändern. (Denken Sie daran, die Variable CPPTEST_CONTAINER_NAME zu aktualisieren.)
Bleib dran für Teil 2, der bald kommt. Ich werde erklären, wie ein Container-Image mit Parasoft C / C ++ Test Standard erstellt wird.