Je suis un développeur isolé la plupart du temps, travaillant sur un certain nombre de grands projets, principalement basés sur PHP. Je souhaite professionnaliser et automatiser le traitement des modifications apportées à la base de code et créer un processus d'intégration continue permettant de passer au travail en équipe sans effectuer de modifications fondamentales.
Ce que je fais actuellement, c’est que j’ai un environnement de test local pour chaque projet; J'utilise SVN pour chaque projet; les modifications sont testées localement, puis transférées vers la version en ligne, généralement via FTP. La documentation de l'API est générée manuellement à partir du code source. Les tests unitaires sont quelque chose dans lequel je commence lentement, et cela ne fait pas encore partie de ma routine quotidienne.
Le "cycle de construction" que j'envisage ferait ce qui suit:
Un changeset est vérifié dans SVN après avoir été testé localement.
Je commence le processus de construction. Le SVN HEAD est extrait, modifié si nécessaire et préparé pour le téléchargement.
La documentation de l'API est générée automatiquement - si je ne l'ai pas encore configurée en détail, utilisez un modèle par défaut pour analyser l'ensemble du code.
La nouvelle révision est déployée via FTP sur le site distant (y compris des modifications de répertoire, chmodding, importation de bases de données, etc.). C’est quelque chose que j’aime déjà beaucoup phing , mais je suis ouvert aux alternatives bien sûr.
Les tests unitaires résidant dans un emplacement prédéfini sont exécutés. Je suis informé de leur échec ou de leur succès par e-mail, RSS ou (de préférence) en sortie HTML que je peux saisir et mettre dans une page Web.
(éventuellement) un fichier texte "changelog" d'utilisateur final situé dans un emplacement prédéfini est mis à jour avec une partie prédéfinie du message de validation ("Il est désormais possible de filtrer simultanément" foo "et" bar " Ce message n’est pas nécessairement identique au message de validation SVN, qui contient probablement beaucoup plus d’informations internes.
Des éléments tels que les métriques de code, la vérification du style de code, etc., ne sont pas mon objectif principal actuellement, mais à long terme, ils le feront certainement. Les solutions qui apportent cette solution prête à l’emploi sont très bien considérées.
Je cherche
Commentaires et expériences de personnes se trouvant ou se trouvant dans une situation similaire et ayant mis en œuvre avec succès une solution à ce problème
En particulier, bons didacticiels pas à pas et procédures pas à pas sur la manière de le configurer.
Des solutions offrant autant d'automatisation que possible , par exemple en créant une API squelette, des scénarios de test, etc. pour chaque nouveau projet.
et aussi
Je suis submergé avec le travail, donc j'ai une forte inclination pour des solutions simples. D'un autre côté, si une fonctionnalité est manquante, je vais pleurer sur le fait qu'elle est trop limitée. :) Les solutions de type pointer-cliquer sont également les bienvenues. Je suis également aux recommandations de produits commerciaux qui peuvent fonctionner avec les projets PHP.
Ma configuration
Je travaille sur Windows localement (7, pour être exact) et la plupart des projets clients sont exécutés sur une pile LAMP, souvent sur un hébergement partagé (= pas de SSH distant). Je recherche des solutions que je peux utiliser dans mon propre environnement. Je suis prêt à installer Linux VM pour cela, pas de problème. Les solutions hébergées ne m'intéressent que si elles fournissent tous les aspects décrits ou si elles sont suffisamment souples pour interagir avec les autres parties. du processus.
Prime J'accepte la réponse qui, selon moi, me rapportera le plus de kilométrage. Il y a beaucoup d'excellentes contributions ici, j'aimerais pouvoir accepter plus d'une réponse. Merci tout le monde!
Je suis passé par buildbot , CruiseControl.net , CruiseControl et Hudson . Malgré tout, j’ai bien aimé CruiseControl *, c’était trop compliqué avec des cas de dépendance très complexes. buildbot n’est pas facile à installer, mais il a une belle aura (j’aime juste le python, c’est tout). Mais Hudson a vaincu les trois premiers parce que:
Mise en garde: Je n'ai jamais utilisé Linux que comme base pour les serveurs de construction mentionnés ci-dessus (CC.net était exécuté sur mono ), mais ils devraient tous, selon la documentation, utiliser plusieurs plates-formes.
Conditions préalables:
A partir de là, c'est juste:
Java -jar hudson.war
Cela exécutera une petite instance de serveur directement à partir de votre console et vous devriez pouvoir parcourir l'installation à votre http://localhost:8080
, si rien d’autre n’existe à l’avance sur ce port (vous pouvez spécifier un autre port en passant le --httpPort=ANOTHER_HTTP_PORT
option à la commande ci-dessus) et tout s’est bien passé dans le processus d’installation.
Si vous allez dans le répertoire des plugins disponibles (http://localhost:8080/pluginManager/available
), vous trouverez des plugins pour prendre en charge les tâches mentionnées ci-dessus (le support Subversion est installé par défaut).
Si cela vous intéresse, vous devez installer un serveur d’application Java, tel que Tomcat ou jetée . Instructions d’installation sont disponibles pour tous les principaux serveurs d'applications
Mise à jour : Kohsuke Kawaguchi a construit un installateur de service Windows pour hudson
Les liens de la procédure suivante supposent une instance en cours de Hudson située à l'adresse http://localhost:8080
http://localhost:8080/view/All/newJob
) dans le menu de gaucheBuild a free-style software project
sur la liste*/5 * * * *
Pour configurer des processus pour lesquels hudson n’a pas de plug-ins, vous pouvez les appeler directement via un script Shell à partir de la configuration, ou vous pouvez écrire votre propre plugin
Bonne chance!
Le terme que vous recherchez est "intégration continue".
Voici un exemple d'utilisation de GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/
CruiseControl (qui est un serveur CI) peut utiliser Hosted SVN/GIT comme source. Donc, vous pouvez même l'utiliser avec GitHub ou Beanstalk ou autre chose.
Ensuite, vous pouvez intégrer cela avec le type de logiciel suivant:
Vous pouvez également essayer ce CI hébergé: http://www.php-ci.net/hosting/create-project
N'oubliez pas cependant que ces outils nécessitent un support personnalisé si vous les intégrez vous-même.
Avez-vous également pensé à la gestion de projet et à la gestion des correctifs?
Vous pouvez utiliser Redmine pour la gestion de projet. Il prend en charge l'intégration continue intégrée, mais uniquement en tant que côté client (pas en tant que serveur CI).
Essayez d’utiliser un serveur SVN/GIT/etc. solution, car ils couvriront vos sauvegardes et feront fonctionner leurs serveurs, vous permettant ainsi de vous concentrer sur le développement.
Pour un tutoriel sur la configuration de Hudson, voir: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/
J'utilise le serveur d'intégration continue Bamboo d'Atlassian pour mon projet principal PHP) (ainsi que leurs autres produits tels que fisheye (navigation dans le référentiel), - jira (suivi des émissions) et trèfle (couverture de code)).
Il supporte SVN et supporte maintenant Git et possède une excellente interface utilisateur. Il est disponible pour Linux, Windows et Mac et peut fonctionner de manière autonome sur son propre serveur Tomcat, ce qui est excellent pour les personnes (comme moi) qui n'aiment pas prendre des jours pour configurer leurs outils). Bien que cela puisse paraître coûteux, étant un développeur seul, j'ai acheté la licence du kit de démarrage pour 10 $ (10 $ par logiciel). C'est parfait pour les petites équipes et ça vaut le coup d'oeil.
PHPTesting PHPCI C'est un bon serveur d'intégration continue construit en php.
De plus, son source libre et ouverte. :)
il a nombre de plugins ..
PHPCI comprend des plugins d'intégration pour:
Je suggérerais d'utiliser Jenkins http://jenkins-ci.org/ c'est gratuit et c'est open source.
Il est assez simple à configurer, fonctionne sur plusieurs plates-formes et s'intègre bien à d'autres outils d'intégration continue tels que SonarQube (+ SQUALE) pour mesurer l'endettement technique et Thucydides pour les tests d'automatisation.
Je suggère fortement d'utiliser GIT ou GIT Hub pour le contrôle de version au lieu de SVN. De mon point de vue, il s’agit simplement d’un meilleur système de contrôle de version qui vous aidera ultérieurement à redimensionner vos efforts de développement.
Puisque vous travaillez principalement avec PHP projet, vous pouvez utiliser d’autres outils.
PHPUnit - Pour les tests unitaires
PHP CodeSniffer - Vérifie les standards de codage
PHP Depend - Affiche vos dépendances de code PHP
XDEBUG - Pour les tests de performance
Tous ces outils et être déclenché avec un travail Jenkins et contribue à la qualité et à la performance de votre code.
Bonne chance et amusez-vous!
Je n'utilise pas beaucoup de produits, ni même les types de produits que vous utilisez, mais je vais vous faire part de mon expérience.
Je lance un environnement TEST en parallèle avec mon environnement PROD. Je n'ai aucun test local en soi. S'il est trop difficile d'entrer dans un véritable environnement TEST, je répare mon processus de construction. Je ne vois pas l'intérêt de tester localement, car les environnements sont différents. UPDATE: La seule chose que je fais localement est de lancer "php -l" avant de télécharger quoi que ce soit. Arrête les erreurs stupides.
Le processus de construction fonctionne avec tout ce qui se trouve dans l'espace de travail actuel, ce qui inclut du code non engagé. Ce n'est pas la tasse de thé de tout le monde, mais je vais très souvent tester. Tout s’engage avant de passer à PROD.
Une partie de mon processus de construction (similaire au vôtre) crée deux fichiers META. La première contient les 100 dernières modifications (en général) et donne également le numéro actuel de la liste de modifications. La montre moi quels changements sont installés. L'autre contient le CLIENTSPEC (en termes de Perforce) qui me montre exactement quelles branches ont été utilisées dans cette construction. Ensemble, ils me donnent des versions reproductibles.
Je ne construis pas directement dans l'environnement cible, mais dans une zone de stockage intermédiaire sur le serveur. J'utilise SSH alors c'est logique. Cela me donne quelques avantages. Plus important encore, cela évite de mourir à mi-chemin d'un téléchargement volumineux. Cela me donne également une place pour stocker les fichiers META, et tous les fichiers de construction sont automatiquement archivés (pour que je puisse revenir directement à n'importe quelle compilation). Le script enregistre également la mise à jour (il y a donc une entrée dans le flux de journalisation et je peux voir avant et après) et lance tous les démons (j'utilise daemontools donc "svc -t"). Tous ces éléments sont mieux lotis sur la machine cible.
Un autre problème concerne les modifications de la base de données. Je conserve un script principal du schéma de base de données que je mets à jour à chaque modification du schéma. Chacune des modifications entre également dans un script changes.sql, qui est chargé avec la construction dans la zone de transfert. Le script est exécuté dans le cadre du script d'installation.
Je suis principalement un administrateur système mais parfois je code PHP). En tant que projet parallèle, j'ai créé des scripts qui simplifient et simplifient la configuration d'un système complet PHP Environnement CI utilisant Jenkins.Il exécute également un exemple de projet pour vous permettre de voir comment chaque étape de construction est configurée.
Si vous voulez l'essayer, vous avez uniquement besoin d'une boîte Debian/Ubuntu et d'un accès Shell.
http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci
Update Pour ajouter du contenu à ma réponse:
Vous pouvez simplement configurer un CI Jenkins pour PHP avec Ansible. Depuis la v1.4, il prend en charge les rôles que vous pouvez télécharger à partir de leur site de la communauté galaxy.ansibleworks.com. Vous l’appelez jenkins-php .
Considérez fazend.com , une plate-forme CI gratuite hébergée, qui automatise les procédures de configuration et d'installation. Vous n'avez pas besoin de configurer le contrôle de version, le suivi des bogues, le serveur CI, l'environnement de test, etc. Tout est fait à la demande.
J'ai récemment commencé le même genre de processus, et j'utilise Beanstalk pour l'hébergement svn.
Il y a deux caractéristiques intéressantes dans les comptes payants (à partir de 15 heures, je pense):
Je suis sûr qu'il existe d'autres serveurs svn hébergés ou auto-hébergés dotés de ces deux fonctionnalités, mais beanstalk est celui dont j'ai l'expérience et qui fonctionne très très bien.
Il existe également une API, qui, je suppose, pourrait être utilisée pour intégrer davantage le déploiement dans votre processus.