Je suis un développeur seul la plupart de mon temps, travaillant sur un certain nombre de grands projets, principalement basés sur PHP. Je souhaite professionnaliser et automatiser la gestion des modifications apportées à la base de code et créer un processus d'intégration continue qui rend possible la transition vers le travail en équipe sans avoir à effectuer des changements fondamentaux.
Ce que je fais en ce moment, 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 que 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 ensemble de modifications est archivé dans SVN après avoir été testé localement.
Je lance le processus de construction. La révision SVN HEAD est extraite, modifiée si nécessaire et préparée 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, en utilisant un modèle par défaut, en analysant toute la base de code.
La nouvelle révision est déployée sur l'emplacement distant via FTP (y compris le renommage de répertoire, chmodding, l'importation de bases de données, etc.). C'est quelque chose que j'aime déjà beaucoup pour le phing , mais je suis ouvert à des alternatives bien sûr.
Des 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 en utilisant la sortie e-mail, RSS ou (de préférence) HTML que je peux saisir et mettre dans une page Web.
(en option) un fichier texte "changelog" de l'utilisateur final dans un emplacement prédéfini est mis à jour avec une partie prédéfinie du message de validation ("Il est maintenant possible de filtrer à la fois" foo "et" bar "en même temps Ce message n'est pas nécessairement identique au message de validation SVN, qui contient probablement beaucoup plus d'informations internes.
Des choses comme les métriques de code, la vérification du style de code, etc. ne sont pas mon objectif principal en ce moment, mais à long terme, elles le seront certainement. Les solutions qui apportent ce prêt à l'emploi sont très aimablement envisagées.
je cherche
Commentaires et expériences de personnes qui sont ou étaient dans une situation similaire, et qui ont réussi à mettre en œuvre une solution pour cela
Surtout, de bons didacticiels pas à pas et des procédures pas à pas sur la façon de configurer cela
Des solutions qui fournissent autant d'automatisation que possible , par exemple en créant une API squelette, des cas de test et ainsi de suite pour chaque nouveau projet.
et aussi
- Recommandations de produits . Ce que je sais jusqu'à présent, c'est phing / ant pour la construction, et phpUnderControl ou Hudson pour la partie rapport. Je les aime tous autant que je puisse voir, mais je n'ai bien sûr aucune expérience détaillée avec eux.
Je suis submergé de travail, j'ai donc une forte inclinaison vers des solutions simples. En revanche, s'il manque une fonctionnalité, je vais pleurer qu'elle soit trop limitée. :) Les solutions pointer-cliquer sont également les bienvenues. Je suis également aux recommandations de produits commerciaux qui peuvent fonctionner avec des 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 exécuter dans mon propre environnement. Je suis prêt à configurer une machine virtuelle Linux 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 sont suffisamment flexibles pour interagir avec les autres parties du processus.
Bounty J'accepte la réponse qui, selon moi, me donnera 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!
Le terme que vous recherchez est «intégration continue».
Voici un exemple de quelqu'un qui utilise 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. Vous pouvez donc même l'utiliser avec GitHub ou Beanstalk ou autre chose.
Ensuite, vous pouvez l'intégrer avec le type de logiciel suivant:
Vous pouvez également essayer ce CI hébergé: http://www.php-ci.net/hosting/create-project
Gardez cependant à l'esprit 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 a intégré le support d'intégration continue, mais uniquement en tant que côté client (pas en tant que serveur CI).
Essayez d'utiliser un SVN / GIT / etc hébergé. solution, car ils couvriront vos sauvegardes et maintiendront leurs serveurs en fonctionnement, afin que vous puissiez vous concentrer sur le développement.
Pour un tutoriel sur la façon de configurer Hudson, voir: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/
la source
J'utilise le serveur d'intégration continue Bamboo d'Atlassian pour mon projet PHP principal (avec leurs autres produits tels que fisheye (navigation dans le référentiel), jira (suivi des problèmes) et trèfle) (couverture du code)).
Il prend en charge SVN et prend désormais en charge Git et il a 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 idéal pour les personnes (comme moi) qui n'aiment pas prendre des jours pour configurer leurs outils). Bien que cela puisse sembler cher, étant moi-même développeur seul, j'ai acheté la licence du kit de démarrage pour 10 $ (10 $ par logiciel). C'est super pour les petites équipes et ça vaut le coup d'oeil.
la source
PHPTesting PHPCI C'est un joli serveur d'intégration continue construit en php.
De plus, sa source gratuite et ouverte. :)
il a un certain nombre de plugins ..
PHPCI comprend des plugins d'intégration pour:
la source
Je suis principalement un administrateur système mais parfois je code aussi PHP. En tant que projet parallèle, j'ai créé des scripts qui rendront simple et indolore la mise en place d'un environnement PHP CI complet à l'aide de Jenkins. Il exécute également un exemple de projet pour vous afin que vous puissiez voir comment chaque étape de génération est configurée.
Si vous voulez l'essayer, tout ce dont vous avez besoin est une boîte Debian / Ubuntu et un accès shell.
http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci
Mettre à jour Pour ajouter du contenu à ma réponse:
Vous pouvez simplement configurer un CI Jenkins pour PHP en utilisant Ansible. Depuis la version 1.4, il prend en charge les rôles que vous pouvez télécharger à partir de leur site communautaire galaxy.ansibleworks.com et il fera le gros du travail pour vous. Cela s'appelle jenkins-php .
la source
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 avec d'autres outils d'intégration continue comme SonarQube (+ SQUALE) pour mesurer la dette technique et Thucydides pour tester l'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, c'est juste un meilleur système de contrôle de version qui vous aidera à adapter vos efforts de développement plus tard.
Puisque vous travaillez principalement avec un projet PHP, vous pouvez utiliser d'autres outils.
PHPUnit - Pour les tests unitaires
PHP CodeSniffer - Vérifier les normes de codage
PHP Depend - Affiche vos dépendances de code PHP
XDEBUG - Pour les tests de performances
Tous ces outils peuvent être déclenchés par un travail Jenkins et contribuent à la qualité et aux performances de votre code.
Bonne chance et profitez-en!
la source
Je n'utilise pas beaucoup de produits, ni même les types de produits que vous utilisez, mais je vais vous donner mon expérience.
J'exécute un environnement TEST en parallèle avec mon environnement PROD. Je n'ai aucun test local en soi. S'il est trop difficile de mettre tout en place dans un véritable environnement TEST, je corrige mon processus de construction. Je ne vois pas l'intérêt de tester localement, car les environnements sont différents. MISE À JOUR: La seule chose que je fais localement est d'exécuter "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, qui inclut du code non validé. Ce n'est pas la tasse de thé de tout le monde, mais je vais tester très souvent. Tout est engagé avant de passer à PROD.
Une partie de mon processus de construction (similaire au vôtre) crée deux fichiers META. L'un contient les 100 dernières modifications (généralement) et me donne également le numéro de la liste de modifications actuelle. Le me montre 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 version. Ensemble, cela me donne des versions reproductibles.
Je ne crée pas directement dans l'environnement cible, mais dans une zone de transfert sur le serveur. J'utilise SSH donc cela a du sens. Cela me donne quelques avantages. Plus important encore, il évite de mourir à mi-chemin d'un téléchargement important. Cela me donne également un endroit pour stocker des fichiers META, et tous les fichiers de construction sont automatiquement archivés (afin que je puisse revenir directement à n'importe quelle construction). Le script enregistre également la mise à jour (il y a donc une entrée dans le flux de journaux et je peux voir avant et après) et lance tous les démons (j'utilise daemontools donc "svc -t"). Tout cela est mieux sur la machine cible.
Un autre problème concerne les modifications de la base de données. Je garde un script maître du schéma DB, que je mets à jour chaque fois que le schéma change. Chacune des modifications va également dans un script changes.sql, qui est téléchargé avec la génération dans la zone de transfert. Le script est exécuté dans le cadre du script d'installation.
la source
J'ai récemment commencé le même type de processus et j'utilise Beanstalk pour l'hébergement svn.
Il y a deux fonctionnalités intéressantes dans les comptes payants (à partir de 15 $ je pense):
Je suis sûr qu'il existe d'autres serveurs svn hébergés ou auto-hébergés avec ces deux fonctionnalités, mais Beanstalk est celui dont j'ai l'expérience et il fonctionne très, très bien
Il existe également une API, qui, j'imagine, pourrait être utilisée pour intégrer davantage le déploiement dans votre processus.
la source
Prenons par exemple fazend.com , une plateforme CI hébergée gratuite, 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.
la source