Automatisation de la construction d'un projet Qt sous Windows dans Travis CI

Récemment, pour QtProtobuf, j'ai été perplexe en mettant en place un CI autoritaire pour vérifier les demandes de tirage aka, et bien sûr, pour insérer un badge à la mode dans le fichier README du projet. Les choix étaient GitHub Actions et Travis CI . Honnêtement, je n'ai pas cherché à comparer, comparer, analyser, je voulais de la simplicité et une solution rapide à une tâche très simple. Tout d'abord, j'ai compris le CI pour les actions GitHub et mis en place la vérification de build et de test unitaire via le conteneur Docker. Mais en raison de la myriade de limitations, les actions GitHub se sont révélées tout simplement inadaptées à la vérification de projet dans Windows. J'ai dû me tourner vers Travis CI.


KDPV_not_found.png


Au moment de la rédaction de cet article dans Travis CI, il y avait un tel avertissement:


Les versions de Windows sont en phase d'accès précoce. Veuillez vous rendre sur le forum de la communauté Travis CI pour obtenir de l'aide ou publier des idées.

Cela a suscité des inquiétudes, car au départ, j'ai essayé de tout configurer via le conteneur Docker et de le glisser dans les actions GitHub, mais cette entreprise a échoué en raison de restrictions sur la taille, le type de conteneurs, etc. sur github.


Aux entreprises


Pour commencer, vous devez autoriser Travis CI sur GitHub, après quoi l' application Travis CI apparaîtra dans vos paramètres de profil. Idéalement, vous pouvez définir des référentiels auxquels Travis CI peut accéder:



L'étape suivante consiste à configurer les déclencheurs Travis CI. Cette procédure est déjà en cours depuis le panneau d'administration de Travis CI lui-même; au moment de la rédaction, les déclencheurs suivants étaient disponibles:


  • Lancement push vers n'importe quel brunch
  • Exécuter lors de la création de demandes de fusion
  • Déclenchement temporisé (cron)

En principe, un ensemble décent pour construire CI.


Après avoir sélectionné les déclencheurs pour exécuter les générations , vous devez créer .travis.yml , avec une description de la procédure de génération et, selon les déclencheurs disponibles, placer ce fichier dans le référentiel. La documentation éparse et non systématique de Travis CI lui-même concernant .travis.yml a été immédiatement perplexe, mais vous pouvez le découvrir si vous le souhaitez.


La tâche principale qui restait était de préparer l'environnement pour l'assemblage, car l'assemblage lui-même et la vérification sont l'affaire de CMake.


Nous décrivons la procédure d'assemblage dans .travis.yml


Vous devez d'abord choisir un système d'exploitation qui s'exécute comme une machine virtuelle sur les serveurs Travis CI et un langage de programmation.


os: windows language: C++ ... 

la langue , si je comprends bien, automatise certaines étapes si elles ne sont pas spécifiées explicitement, mais sa liaison est un mystère pour moi. Je pensais que sans lui, il n'y aurait pas de MSVC préinstallé, mais au cours des expériences, il s'est avéré qu'il était également présent pour d'autres langues.


L'étape suivante consiste à télécharger et installer les dépendances nécessaires. Pour QtProtobuf, ce sont:


  • Qt 5.12.3 ou supérieur
  • cmake-3.1 ou supérieur
  • Fraise perl 5.28 ou supérieure
  • GoLang 1.10 ou supérieur
  • Yasm 1.3 ou supérieur
  • Visual Studio Compiler 14.16.x

Et ici, Travis CI a grandement aidé . Parmi les packages pré-installés, il y avait non seulement Git et MSVC, mais aussi cmake, wget et chocolatey . En prison en présence de chocolat, la poursuite de l'installation des dépendances est grandement facilitée. Certes, il reste un mystère pour moi pourquoi Qt n'a pas encore été livré au chocolat.


Pour commencer, téléchargez le programme d'installation complet de Qt à partir du référentiel officiel:


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

Remarque: Lors du téléchargement, wget vide un grand nombre de journaux avec la progression du téléchargement. Travis CI, comme GitHub, a une limite sur la taille du journal de génération, donc les journaux inutiles doivent être évités. L'option -q aka --quite masque la sortie du journal wget.

Nous faisons l'installation des dépendances nécessaires:


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

Avec l'installation de GoLang et Yasm, je pense qu'il ne devrait pas y avoir de questions. Mais au lancement de l'installeur Qt, je ferai plus attention.


QtInstallerFramework prend en charge l'automatisation du processus d'installation en écrivant des scripts .


Les scripts prêts à l'emploi pour installer une version particulière de Qt sont assez simples à google, je vais juste donner un lien vers mon existant et faire attention au choix des composants pour l'installation:


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

Ici, je désactive tous les composants de la case à cocher en appelant widget.deselectAll(); et inclure le " qt.qt5.5132.win32_msvc2017 " nécessaire à la construction. Il y a 2 aspects qui sont importants lors de l'écriture de cette procédure:


  • selectComponent fonctionne de la même manière que le composant graphique, et donc les dépendances et les sous-composants sont sélectionnés selon la même logique que si nous les avions sélectionnés dans l'interface graphique. C'est pourquoi il n'est pas nécessaire de s'inquiéter de la résolution des dépendances.
  • Les noms des composants peuvent être visualisés en mode d'installation "verbal". Pour ce faire, j'ai effectué widget.selectAll(); dans l'une des itérations widget.selectAll(); et a commencé l'installation avec la commande - ./qt-opensource-windows-x86-5.13.2.exe --verbose --script ./.ci/qt_installer_windows.qs . Dans les journaux, vous pouvez facilement trouver tous les composants dont vous avez besoin et modérer leur installation à l'aide de widget.selectComponent / widget.deselectComponent.

Et le dernier point important que je couvrirai dans ce tutoriel est l'environnement de construction. En raison du fait que l'installation des dépendances et l'assemblage ont lieu dans le même shell, après avoir défini Go et Yasm dans notre shell, il n'y a pas de chemin enregistré avant les fichiers exécutables. Par conséquent, vous devez enregistrer manuellement PATH, GOROOT avant la prosternation:


 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" .. ... 

Je veux également faire attention au fait que dans CMAKE_PREFIX_PATH, par analogie, vous devez spécifier le chemin d'accès à Go et Yasm pour que la fonction find_program fonctionne correctement.


Peut-être que plus tard, je vais décrire la création d'un conteneur docker pour la construction avec Qt à bord.


Tous les scripts peuvent être trouvés ici.

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


All Articles