Plattformübergreifende Qt CI/CD-Einrichtung – einfach gemacht

Software-Entwicklung
2023-03-14
8 Minuten
Plattformübergreifende Qt CI/CD-Einrichtung - einfach gemacht

Die Entwicklung eines Softwareprojekts ist nicht einfach. Es gibt viele Möglichkeiten, Fehler zu machen und wertvolle Ressourcen – Zeit und Geld – zu verschwenden. Was macht Softwareentwicklung langfristig günstiger? Jeder Unit-Test spart Zeit. Noch besser, wenn er automatisiert ist.

Die Automatisierung von Unit-Tests ist nur ein Bruchteil der CI/CD-Funktionen. Deshalb erklären wir die Grundlagen von CI/CD-Systemen sowie bewährte Praktiken für deren Einführung in jedes Desktop- oder mobile Qt-Projekt. Es wird auch ein Beispiel für die Einrichtung eines CI-Systems für plattformübergreifende Qt-Anwendungen geben.

Dieser Blogbeitrag ist eine schriftliche Version meines Vortrags auf der Qt Developer Conference von KDAB im Juni 2022. Glücklicherweise wurde er aufgezeichnet, und Sie können ihn sich auf YouTube ansehen.

Falls Sie Unterstützung für Ihr Projekt benötigen, werfen Sie einen Blick auf unsere plattforübergreifenden Softwareentwicklungsdienste.

Warum sollte man Continuous Integration in jedes Softwareprojekt einführen?

Bevor ich die Vorteile eines CI-Systems für Ihr Projekt aufzähle, möchte ich Ihnen ein Beispiel dafür geben, wie man Apps besser nicht entwickelt. Bevor ich Scythe Studio gründete, arbeitete ich ein Jahr lang als Entwickler an einer Desktop-Qt-Anwendung. Das Programm wurde von einem einzigen Entwickler über einen Zeitraum von zehn Jahren entwickelt.

Der Code war riesig, aber das eigentliche Problem war der fehlende Zeitaufwand für eine saubere Umsetzung. Für das Management waren Refactoring oder CI/CD eine Zeitverschwendung. Überraschenderweise wuchs der Code in dieser Zeit unkontrolliert weiter, was zu vielen Problemen beim Kompilieren der Anwendung und der Verwaltung von Abhängigkeiten führte.

Alle Skripte und die gesamte Umgebung funktionierten nur für diesen einen Entwickler. Grundsätzlich war er die einzige Person, die in der Lage war, die Anwendung unter Windows zu veröffentlichen. Die Einbindung weiterer Entwickler war problematisch.

Ich kam in das Unternehmen und schlug dem Manager vor, CI/CD mit Unit-Tests und einer Installationsroutine einzuführen, da wir regelmäßig eine Windows-Version an Tester weitergaben. Das würde viele Prozesse automatisieren. Außerdem könnten dann auch andere Entwickler als der Hauptentwickler die Anwendung veröffentlichen.

Es gab auch andere Windows-Apps, die CI/CD verdient hätten, sodass das Potenzial zur Zeitersparnis durch Continuous Integration enorm war. Doch es gab kein grünes Licht dafür, und nach vielen vergeblichen Versuchen, das Management zu überzeugen, gab ich schließlich auf.

Nach einiger Zeit erhielt ich die Anfrage, eine macOS-Version zu veröffentlichen, die seit mindestens zwei Jahren nicht mehr aktualisiert worden war. Es dauerte lange, die Anwendung nicht nur an eine neuere Qt-Version, sondern auch an eine neuere macOS-Version anzupassen. Ich erstellte zudem elegante Skripte, um den Prozess zu automatisieren, doch aufgrund des fehlenden CI/CD-Systems war ich die einzige Person, die die macOS-Version der Qt-basierten Software veröffentlichen konnte.

Was lehrt uns diese persönliche Erfahrung? Welche Vorteile bringt die Einführung von CI/CD?

 

Benefits of introducing CI CD

 

Reduziertes Personalrisiko

Wenn Sie ein CI/CD-System in Containern oder auf einem Unternehmensserver (sogenannter Runner) betreiben, sind Sie nicht von der Umgebung eines einzelnen Entwicklers abhängig. Es ist weniger problematisch, wenn jemand Ihr Unternehmen verlässt.

 

Geringeres Fehlerrisiko

Ein kontinuierliches Integrationssetup ermöglicht es Ihnen, Probleme frühzeitig in den Build- und Unit-Test-Phasen zu identifizieren und zu lösen. Dieser Vorteil multipliziert sich mit jeder zusätzlichen Zielplattform, die in das System integriert wird.

 

Zeit- und Nervenersparnis

Wenn der Prozess automatisch in der Pipeline ausgeführt wird, muss niemand ihn manuell durchführen. Die verschiedenen CI/CD-Schritte können viel Zeit in Anspruch nehmen, daher ist dieser Vorteil besonders wichtig. Außerdem können Sie Anwendungen häufiger veröffentlichen oder Testversionen einfacher teilen.

 

Komfort

Dieser Vorteil hängt mit dem vorherigen zusammen: Etwas nicht manuell erledigen zu müssen, ist an sich schon eine Erleichterung. Darüber hinaus sorgen CI/CD-Setups für klarere Entwicklungs-, Test- und Release-Zyklen.

 

Automatische Dokumentation der Prozesse

Normalerweise sind Setups in Schritte unterteilt. Ein gut strukturiertes CI/CD-System dokumentiert daher automatisch den gesamten (oder einen Teil des) Prozesses zur Softwarebereitstellung. Dies bedeutet, dass dieses Wissen nicht nur einer kleinen Gruppe innerhalb des Unternehmens vorbehalten bleibt.

 

Wahrer Nutzen der Einführung von Continuous Integration

Wie Sie sehen, laufen all diese Vorteile auf zwei wesentliche Punkte hinaus: Zeit und Sicherheit. Dies sind die echten Vorteile von CI/CD für ein Projekt. Als CEO eines Unternehmens habe ich gelernt, dass Zeitersparnis und Sicherheit die größten geschäftlichen Anliegen sind. CI/CD hat einen echten Einfluss auf das Geschäft. Daher sollte dieses Thema auch aus wirtschaftlicher Sicht eine Priorität sein.

 

Grundlagen von CI/CD-Systemen

Ich hoffe, ich konnte Sie davon überzeugen, dass ein CI/CD-System für Ihr Projekt sinnvoll ist – unabhängig davon, ob es sich um ein Qt-Projekt handelt oder nicht. Es ist immer von Vorteil, es zu implementieren. Lassen Sie uns nun erklären, was ein CI/CD-System ist und wie es für Anwendungen, die mit dem Qt-Framework entwickelt wurden, aussehen kann.

 

Was ist Continuous Integration (CI)?

CI steht für Continuous Integration und umfasst alle Maßnahmen, die erforderlich sind, um sicherzustellen, dass Ihre Software jederzeit veröffentlichungsbereit ist. Welche typischen Schritte gehören zu einem CI-System für Qt-Anwendungen?

  • Statische Code-Analyse
  • Kompilierung
  • Smoke-Tests
  • Unit- und Integrationstests
  • GUI-Tests

 

Was ist Continuous Delivery (CD)?

CD steht für Continuous Delivery oder Continuous Deployment. Dies umfasst alle Maßnahmen, die erforderlich sind, um die neueste Softwareversion zu veröffentlichen, wie die Erstellung von Installationspaketen und deren Bereitstellung für Benutzer. Welche CD-Schritte können Sie für Qt-Projekte einführen?

  • Code-Signierung von App-Bundles
  • Bereitstellung von App-Bundles in App-Stores
  • Übertragung von App-Bundles oder Installationsdateien auf einen Server

Unser typisches CI-System für plattformübergreifende Qt-Anwendungen

Der Inhalt eines CI/CD-Setups kann sehr unterschiedlich sein. Es hängt alles von Ihrem Projekt und den Standards ab. Wir wissen, dass Qt-Projekte stark variieren. Unten sehen Sie eine Abbildung, die das System für plattformübergreifende Qt-Anwendungen zeigt, das wir bei Scythe Studio einführen, wann immer wir neue Projekte starten, die Windows, Linux, macOS, iOS und Android – oder eine Teilmenge dieser Plattformen – unterstützen.

Letztlich spielt es keine Rolle, was genau enthalten ist. Ich möchte Ihnen nicht vorschreiben, was in Ihrer CI/CD-Pipeline enthalten sein muss. Ich zeige Ihnen dies lediglich als Inspiration.

CI CD

Welche Tools sind für ein CI/CD-System erforderlich?

Sie wissen nun, was CI/CD ist und welche Komponenten es enthält. Sehen wir uns nun die Werkzeuge an, die für die Einrichtung einer CI/CD-Pipeline erforderlich sind.

 

Code-Hosting-Dienst

In den meisten Projekten nutzen wir bereits Code-Hosting-Dienste wie GitHub, Bitbucket oder GitLab. Daher dürfte dies für Sie nichts Neues sein. Diese Dienste sind wichtig, da die meisten CI/CD-Lösungen in Git-Repositories integriert sind, sodass die Pipeline automatisch ausgeführt wird, sobald Sie eine Änderung committen und pushen.

 

CI/CD-Lösung

Eine CI/CD-Lösung ist ein System, das Pipelines (eine Reihe von Schritten) ausführt und verwaltet. Es gibt viele verschiedene Lösungen mit unterschiedlichen Ansätzen, sodass Sie die für Sie passende auswählen müssen. Einige Lösungen sind direkt in Code-Hosting-Dienste integriert, wie GitHub Actions oder GitLab CI/CD, während andere wie Jenkins unabhängig sind und nicht an einen bestimmten Code-Hosting-Dienst gebunden sind.

Welche Lösung sollten Sie zu Beginn wählen? Wählen Sie die einfachste. Wenn Sie Ihren Code auf GitHub hosten, probieren Sie GitHub Actions aus. Wenn Sie GitLab nutzen, verwenden Sie GitLab CI/CD. Für Bitbucket-Nutzer ist Jenkins eine beliebte Wahl.

 

CI CD solutions

CI/CD-Task-Runner

Sie benötigen außerdem einen Runner – ein Gerät, das die Pipeline-Aufgaben ausführt. In vielen Fällen ist es nicht notwendig, ein physisches Gerät zu besitzen, da Sie Docker verwenden und Aufgaben in Containern auf gemeinsam genutzten GitLab-Runnern ausführen können. Natürlich gibt es dabei auch Sicherheitsaspekte. Die bevorzugte Lösung sollte immer ein eigenes Gerät sein.

Eine besonders elegante Möglichkeit, CI/CD für Qt-Anwendungen einzurichten, ist die Nutzung von Docker. In Containern können Sie qmake, CMake, Compiler, Installer und andere Werkzeuge ausführen. Sie können auch eine bestimmte Qt-Version, das Android SDK oder andere benötigte Abhängigkeiten installieren. Dies funktioniert jedoch nur für Qt-Projekte, die auf Linux und Android abzielen.

Für Windows, macOS und iOS ist in der Regel ein physisches Gerät erforderlich. Wenn Sie eine einfache Lösung für den Einstieg suchen, empfehle ich den Kauf eines Apple Mac Mini. Diese Geräte sind relativ günstig und bieten die Möglichkeit, Pipelines für alle Plattformen Ihrer Qt-Anwendung auszuführen. Für Linux-Anwendungen können Sie Docker installieren, und für Windows-Apps kann eine virtuelle Maschine auf dem Mac Mini eingerichtet werden.

Mac mini

Artefakt-Repository

Wenn Sie erstellte Anwendungspakete oder Installationsdateien speichern möchten, kann ein Artefakt-Repository hilfreich sein. Dies ist im Grunde ein Lager für alle Dateien, die während der Pipeline-Ausführung generiert werden. Es ist jedoch optional.

 

GitLab-Beispiel für Qt-Projekt-Setups

GitLab ist ein oft von Qt-Nutzern verwendeter Code-Hosting-Dienst. Mit GitLab können Sie alle notwendigen Aktionen für eine funktionierende Pipeline implementieren. Um Ihre CI/CD-Skripte in GitLab zu integrieren, müssen Sie lediglich eine spezielle YAML-Datei ausfüllen.

Die Datei .gitlab-ci.yml enthält die Details der Phasen und Jobs innerhalb der Pipeline. Mithilfe von Umgebungsvariablen und speziellen Tags können Sie dort festlegen, welche Befehle ausgeführt werden, welche Qt-Version oder Android-SDK-Version verwendet wird, welchen Runner Sie nutzen und viele weitere Konfigurationsdetails.

 

Gitlab

Reden ist billig – gehen Sie direkt zum Demoprojekt, das eine solche Pipeline enthält. Sie finden es in diesem GitLab-Repository.

 

CI CD

Fazit

Abschließend möchte ich Sie ermutigen, über die Einrichtung eines CI/CD-Systems nicht als eine optionale Verbesserung, sondern als eine notwendige Maßnahme nachzudenken. Es hat sowohl einen erheblichen Einfluss auf das Geschäft als auch auf die Arbeit der Entwickler. In meinem Vortrag auf der QtDevCon gebe ich weitere Einblicke und Tipps – insbesondere zur Implementierung von CI/CD für Legacy-Projekte. Schauen Sie es sich unbedingt an!

Scythe-Studio - Chief Executive Officer

Łukasz Kosiński Chief Executive Officer

Brauchen Sie Qt QML-Entwicklungsdienste?

service partner

Kommen wir zur Sache: Es ist eine Herausforderung, Top-Qt-QML-Entwickler zu finden. Helfen Sie sich selbst und starten Sie die Zusammenarbeit mit Scythe Studio – echten Experten im Qt C++ Framework.

Entdecken Sie unsere Fähigkeiten!

Neueste Artikel

[ 157 ]