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:
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++?
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.
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.
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:
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.
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.
Hudson ou Jenkins est très bon.