Automatisieren der Erstellung eines Qt-Projekts unter Windows in Travis CI

Vor kurzem war ich bei QtProtobuf verwirrt , als ich ein Bossy-CI einrichtete, um aka Pull-Anforderungen zu überprüfen und natürlich ein modisches Abzeichen in die README-Datei des Projekts einzufügen. Die Wahl fiel auf GitHub Actions und Travis CI . Ehrlich gesagt, ich wollte nicht suchen, vergleichen, analysieren, sondern einfach und schnell eine sehr einfache Aufgabe lösen. Zuerst habe ich das CI für GitHub-Aktionen herausgefunden und die Build- und Komponententestüberprüfung über den Docker-Container eingerichtet. Aufgrund der Vielzahl von Einschränkungen war GitHub Actions jedoch nicht für die Überprüfung eines Projekts unter Windows geeignet. Ich musste mich an Travis CI wenden.


KDPV_not_found.png


Zum Zeitpunkt des Schreibens dieses Artikels in Travis CI gab es einen solchen Haftungsausschluss:


Windows-Builds befinden sich in einem frühen Zugriffsstadium. Besuchen Sie das Travis CI Community-Forum, um Hilfe zu erhalten oder Ideen zu veröffentlichen.

Dies gab Anlass zur Sorge, da ich anfangs versuchte, alles über den Docker-Container zu konfigurieren und in die GitHub-Aktionen einzufügen, was jedoch aufgrund von Einschränkungen hinsichtlich Größe, Art der Container usw. fehlschlug. auf Github.


Zum Geschäft


Um zu beginnen, müssen Sie Travis CI auf GitHub autorisieren. Anschließend wird die Travis CI- Anwendung in Ihren Profileinstellungen angezeigt. Praktischerweise können Sie Repositorys definieren, auf die Travis CI zugreifen kann:



Der nächste Schritt ist die Konfiguration der Travis CI-Trigger. Diese Prozedur wird bereits im Administrationsbereich von Travis CI selbst ausgeführt und zum Zeitpunkt des Schreibens waren die folgenden Auslöser verfügbar:


  • Push-Start für jeden Projektbrunch
  • Wird beim Erstellen von Zusammenführungsanforderungen ausgeführt
  • Zeitgesteuerter Trigger (Cron)

Grundsätzlich ein anständiges Set zum Bauen von CI.


Nachdem Sie die Trigger zum Ausführen der Builds ausgewählt haben, müssen Sie die Datei .travis.yml mit einer Beschreibung der Buildprozedur erstellen und diese Datei in Abhängigkeit von den verfügbaren Triggern im Repository ablegen . Die verstreute und unsystematische Dokumentation von Travis CI selbst zu .travis.yml wurde sofort verwirrt, aber Sie können es herausfinden, wenn Sie möchten.


Die Hauptaufgabe bestand darin, die Umgebung für die Montage vorzubereiten, da die Montage selbst und die Überprüfung Sache von CMake ist.


Wir beschreiben die Montageprozedur in .travis.yml


Zunächst müssen Sie ein Betriebssystem auswählen, das als virtuelle Maschine auf Travis CI-Servern ausgeführt wird, sowie eine Programmiersprache.


os: windows language: C++ ... 

die sprache automatisiert nach meinem verständnis einige schritte, wenn sie nicht explizit spezifiziert sind, aber ihre bindung ist mir ein rätsel. Ich dachte, dass es ohne MSVC kein vorinstalliertes MSVC geben würde, aber während der Experimente stellte sich heraus, dass es auch für andere Sprachen vorhanden war.


Der nächste Schritt ist das Herunterladen und Installieren der erforderlichen Abhängigkeiten. Für QtProtobuf sind dies:


  • Qt 5.12.3 oder höher
  • cmake-3.1 oder höher
  • Strawberry Perl 5.28 oder höher
  • GoLang 1.10 oder höher
  • Yasm 1.3 oder höher
  • Visual Studio Compiler 14.16.x

Und hier hat mir Travis CI sehr geholfen . Unter den vorinstallierten Paketen befanden sich nicht nur Git und MSVC, sondern auch cmake, wget und chocolatey . In prisnip in Gegenwart von chocolatey wird die weitere Installation von Abhängigkeiten erheblich erleichtert. Es bleibt mir ein Rätsel, warum Qt noch nicht an chocolatey geliefert wurde.


Laden Sie zunächst das vollständige Qt-Installationsprogramm aus dem offiziellen Repository herunter:


 ... before_install: - wget -q https://download.qt.io/official_releases/qt/5.13/5.13.2/qt-opensource-windows-x86-5.13.2.exe ... 

Hinweis: Beim Herunterladen erstellt wget eine große Anzahl von Protokollen mit dem Download-Fortschritt. Travis CI hat wie GitHub ein Limit für die Größe des Build-Protokolls, daher sollten unnötige Protokolle vermieden werden. Die Option -q aka --quite verbirgt die Ausgabe von wget-Protokollen.

Wir machen die Installation der notwendigen Abhängigkeiten:


 ... install: - choco install golang - choco install yasm - ./qt-opensource-windows-x86-5.13.2.exe --script ./.ci/qt_installer_windows.qs ... 

Bei der Installation von GoLang und Yasm sollte es meiner Meinung nach keine Fragen geben. Aber beim Start des Qt-Installers werde ich mehr aufpassen.


QtInstallerFramework unterstützt die Automatisierung des Installationsprozesses durch das Schreiben von Skripten .


Vorgefertigte Skripte für die Installation einer bestimmten Version von Qt sind ganz einfach zu googeln. Ich werde nur einen Link zu meiner vorhandenen geben und auf die Auswahl der zu installierenden Komponenten achten:


 ... Controller.prototype.ComponentSelectionPageCallback = function() { var widget = gui.currentPageWidget(); widget.deselectAll(); widget.selectComponent("qt.qt5.5132.win32_msvc2017"); gui.clickButton(buttons.NextButton); } ... 

Hier schalte ich alle Checkbox-Komponenten aus, indem widget.deselectAll(); und fügen Sie die " qt.qt5.5132.win32_msvc2017 " hinzu, die für die Konstruktion erforderlich ist. Es gibt zwei Aspekte, die beim Schreiben dieser Prozedur wichtig sind:


  • selectComponent funktioniert genauso wie die grafische Komponente, und daher werden Abhängigkeiten und Unterkomponenten nach derselben Logik ausgewählt, als ob wir sie in der grafischen Oberfläche ausgewählt hätten. Das ist der Grund, warum Sie sich keine Sorgen um das Auflösen von Abhängigkeiten machen müssen.
  • Die Namen der Komponenten können im "verbalen" Installationsmodus angezeigt werden. Zu diesem widget.selectAll(); ich widget.selectAll(); in einer der Iterationen ausgeführt widget.selectAll(); und startete die Installation mit dem - ./qt-opensource-windows-x86-5.13.2.exe --verbose --script ./.ci/qt_installer_windows.qs . In den Protokollen können Sie einfach alle benötigten Komponenten finden und deren Installation mithilfe von widget.selectComponent / widget.deselectComponent moderieren.

Und der letzte wichtige Punkt, den ich in diesem Tutorial behandeln werde, ist die Build-Umgebung. Aufgrund der Tatsache, dass die Installation von Abhängigkeiten und die Assembly in derselben Shell erfolgen, ist nach dem Festlegen von Go und Yasm in unserer Shell vor den ausführbaren Dateien kein PATH registriert. Daher müssen Sie PATH, GOROOT vor der Niederwerfung manuell registrieren:


 script: ... - setx path "%path%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - set GOROOT="c:\Go" - set PATH="%PATH%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - cmake -DCMAKE_PREFIX_PATH="C:\Qt\5.13.2\msvc2017;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" .. ... 

Ich möchte auch darauf achten, dass Sie in CMAKE_PREFIX_PATH analog den Pfad zu Go und Yasm angeben müssen, damit die Funktion find_program ordnungsgemäß funktioniert.


Vielleicht beschreibe ich später die Erstellung eines Docker-Containers für den Bau mit Qt an Bord.


Alle Skripte finden Sie hier.

Source: https://habr.com/ru/post/de485034/


All Articles