web-dev-qa-db-fra.com

Construire une recommandation d'intégration continue/serveur pour les projets C++/Qt

Je cherche à implémenter un serveur de construction pour les projets C++ basés sur Qt. Le serveur doit extraire le code/les ressources nécessaires de Subversion, créer les fichiers exécutables, assembler les artefacts des projets d’installation et créer les fichiers de support d’installation. Les plates-formes cibles et les chaînes d'outils (approximatives) sont les suivantes:

  • Windows (32 et 64 bits): qmake, nmake, msbuild, chaîne d'outils. Le résultat final est un fichier d'installation EXE et DVD.
  • Mac OS X: qmake, make, scripts bash personnalisés pour assembler les packages. Le résultat final est un ensemble d'applications dans une image disque et une image DVD.
  • Ubuntu (32 et 64 bits): qmake, make, scripts basés sur debuild. Le résultat final est une collection de fichiers DEB et une image DVD.
  • Fedora (32 et 64 bits): qmake, make, scripts basés sur rpmbuild. Le résultat final est une collection de fichiers RPM et une image DVD.

Cela fait donc au moins 4 agents de build (peut-être plus si les versions 32 et 64 bits ne peuvent pas être exécutées sur la même machine) et 7 configurations. Les projets open-source sont préférés, mais ce n'est pas une exigence absolue.

La plupart des outils que je vois semblent être pris en charge par Java (Jenkins, CruiseControl, etc.) ou .Net (CruiseControl.net, etc.). Peut-on utiliser ceux-ci avec une chaîne d'outils C++, ou vais-je constamment lutter contre le système ? Tout ce que vous avez déjà utilisé et trouvé fonctionne bien avec Qt/C++?

26
Dave Mateer

J'utilise Jenkins pour la construction et le packaging de nombreux projets C++, basés sur qmake, cmake et makefiles.

Il y a plugins pour cmake, qmake et msbuild, mais tous les scripts de ligne de commande peuvent également être exécutés.

J’ai réalisé l’emballage à l’aide de Jenkins sans aucun problème, car c’est simplement une autre étape de la ligne de commande dans un projet.

Il existe de bons plugins pour surveiller le nombre de warnings/errors produits par le compilateur (j'utilise normalement GCC).

Il comporte également des constructions matricielles qui vous permettent de construire un projet plusieurs fois avec différentes combinaisons d’indicateurs de compilation, de variables de pré-processeur, de plate-forme, etc. Un projet que j’ai configuré est une construction matricielle avec 5 indicateurs de pré-traitement booléens sur deux Est-ce que 2 ^ 6 = 64 construit. Celles-ci peuvent prendre un peu de temps pour être correctes.

13
Silas Parker

Ici vous pouvez lire un exemple rapide: 

Continuous Integration Server - Hudson

Je pense que Hudson, Jenkins et Builbot valent la peine d'essayer. Le fait de perdre un jour ou deux à les évaluer et à les essayer avec un exemple rapide vous aidera à choisir en toute confiance.

4
kikeenrique

La plupart des outils que je vois semblent être pris en charge par Java (Jenkins, CruiseControl, etc.) ou .Net (CruiseControl.net, etc.). Peut-on utiliser ceux-ci avec une chaîne d'outils C++, ou vais-je constamment lutter contre le système ? Tout ce que vous avez déjà utilisé et trouvé fonctionne bien avec Qt/C++?

Tout système CI raisonnablement capable aura une partie qui vous permettra d’exécuter le programme que vous voulez pour votre commande de construction.

Voici ce que je considérerais:

  • Le système CI fonctionne-t-il sur le ou les systèmes de votre choix?
  • Cela vous permet-il de visualiser facilement vos journaux?
  • Est-ce qu'il s'intègre à votre coureur de test
  • Est-il intégré à vos rapports de couverture de code (par exemple, BullseyeCoverage avec C++ et Qt)
  • Publiera-t-il vos fichiers de manière à répondre à vos besoins?
  • Fournira au besoin une archive/un magasin de fichiers, si nécessaire (par exemple, pdbs & lib * .so.debug)
  • Si le système CI ne prend pas en charge la fonctionnalité X, devrez-vous l'écrire pour chaque système d'exploitation/système pris en charge?
  • Le système/interface utilisateur de CI est-il facile à utiliser pour you ?.

J'ai fait ce qui précède avec CruiseControl et la plupart des choses ont été faciles. J'ai tout écrit dans make ou qmake et j'ai simplement appelé la commande que j'avais besoin d'exécuter. Pour les tests unitaires et l’intégration de la couverture de code, j’ai généré des données au format XML et les ai converties en fonctions prises en charge par CruiseControl.

Ma recommandation: examinez les systèmes de CI recommandés et examinez-les en fonction des critères ci-dessus.

3
Kaleb Pederson

J'utilise buildbot pour cela. Je l'utilise depuis 4 ans et j'en suis très heureux.

C'est une application écrite en python, qui s'exécute sur un serveur et peut gérer plusieurs clients sur différents systèmes d'exploitation. J'utilise actuellement des esclaves pour construire Windows XP, Windows 7, Debian, Ubuntu et CentOS. Mes projets sont en C++ et l'un d'entre eux (l'interface utilisateur de l'utilisateur final) est créé en Python. Mais nous avons également intégré d'autres frameworks pour d'autres fonctionnalités que l'interface graphique.

Ce qui est vraiment bien avec buildbot, c'est qu'il fonctionne en exécutant des lignes de commande sur des esclaves. Avec cela, vous pouvez faire ce que vous voulez. Même sur les systèmes Windows à compiler avec Visual Studio! À partir de ces lignes de commande, vous obtenez toutes les sorties centralisées et accessibles sur le serveur.

Vous pouvez également trouver des alternatives sur ce site qui en mentionne beaucoup. Avertissement: Je l’ai regardé il ya 3 ans, je ne sais pas s’il est toujours exact.

2
Didier Trosset

Hudson ou Jenkins est très bon.

1
Sergei Nikulov