202 votes

La configuration d'un déploiement / build / IC cycle pour les projets PHP

Je suis un développeur solitaire la plupart de mon temps, de travailler sur un certain nombre de gros, principalement en PHP-base de projets. Je veux professionnaliser et d'automatiser la façon dont les changements dans le code de base sont traitées, et de créer un processus d'Intégration Continue qui fait la transition vers le travail en équipe possible sans avoir à faire des changements fondamentaux.

Ce que je fais maintenant, j'ai un environnement de test local pour chaque projet; - je utiliser SVN pour chaque projet; les changements sont testés localement, puis transféré à la version en ligne, généralement via FTP. La documentation de l'API est généré manuellement à partir du code source; les tests Unitaires sont quelque chose que je suis d'entrer dans, lentement, et ce n'est pas encore partie de ma routine quotidienne.

Le "cycle de production" je suis à envisager serait de faire ce qui suit:

  • Un ensemble de modifications obtient vérifié dans le SVN après avoir été testé localement.

  • J'ai commencer le processus de construction. Le SVN de la TÊTE de révision obtient vérifié, modifiés, si nécessaire, et prêt pour le téléchargement.

  • La Documentation de l'API est généré automatiquement - si je n'ai pas de place dans le détail pourtant, à l'aide d'un modèle par défaut, la numérisation de l'ensemble de la base de code.

  • La nouvelle version est déployée à l'emplacement à distance via FTP (y Compris un répertoire à renommer, chmodding, de l'importation de bases de données, et l'aime.) C'est quelque chose que j'ai déjà comme phing pour beaucoup, mais je suis ouvert pour des solutions de rechange de cours.

  • Les tests unitaires résidant dans un endroit prédéfini. Je suis informé au sujet de leur échec ou de succès en utilisant l'E-Mail, flux RSS ou (de préférence) de la sortie HTML que je peux saisir et de mettre dans une page web.

  • (éventuellement) de l'utilisateur final "changelog" fichier texte dans un pré-défini l'emplacement est mis à jour avec un pré-définie de ce message de commit ("Il est maintenant possible de filtrer à la fois "foo" et "bar" dans le même temps). Ce message n'est pas nécessairement identique avec le SVN commit message, qui contient probablement beaucoup plus d'informations internes.

  • Des trucs comme les métriques de code, le code de vérification de style et ainsi de suite ne sont pas ma priorité pour l'instant, mais sur le long terme, ils le seront certainement. Des Solutions qui apportent cette out-of-the-box sont très aimablement regarda.

Je suis à la recherche d'

  • Commentaires et expériences de personnes qui sont ou ont été dans une situation similaire, et ont mis en œuvre avec succès une solution pour cela

  • En particulier, la bonne étape-par-étape, des tutoriels et des procédures sur la façon de mettre cela en place

  • Des Solutions qui offrent autant d'automatisation possible, par exemple par la création d'un squelette d'API, cas de test, et ainsi de suite pour chaque nouveau projet.

et aussi

  • Des recommandations de produits. Ce que je sais est phing/ant pour la construction, et phpUnderControl ou d'Hudson pour la partie création de rapports. Je les aime tous autant que je peux voir, mais j'ai bien sûr aucune expérience avec eux.

Je suis submergé par le travail, j'ai donc une forte inclination vers des solutions simples. D'autre part, si un élément est manquant, je vais pleurer à ce sujet étant trop limitée. :) Le Point-et-cliquez sur solutions sont aussi les bienvenus. Je suis également produit commercial recommandations qui peuvent travailler avec des projets PHP.

Ma configuration

Je travaille sur Windows localement (7 pour être exact), et la plupart des projets du client sont exécutées sur une pile LAMP, souvent sur de l'hébergement mutualisé (= pas de SSH). Je suis à la recherche de solutions que je peux utiliser dans mon propre environnement. Je suis prêt à configurer une machine virtuelle Linux pour cela, pas de problème. Des solutions d'hébergement sont intéressants pour moi que si elles apportent tous les aspects décrits, ou sont suffisamment souples pour interagir avec les autres parties du processus.

Bounty Je suis d'accepter la réponse que je ressens me donnera le plus de distance. Il y a beaucoup d'excellents commentaires ici, je souhaite que je pourrais accepter plus d'une réponse. Merci à tous!

77voto

Steen Points 3427

J'ai été par le biais de buildbot, CruiseControl.net, CruiseControl et Hudson. Tout bien que j'ai vraiment aimé CruiseControl*, c'était juste trop de tracas avec vraiment complexe de dépendance des cas. buildbot n'est pas facile à mettre en place, mais il a une belle aura (je viens comme le python, c'est tout). Mais hudson remporté les trois premiers, parce que:

  1. C'est juste facile à mettre en place
  2. Il est facile à personnaliser
  3. Il semble bon et a obtenu bel aperçu de la fonctionnalité
  4. Il a obtenu de point-et-cliquez sur mises à jour, pour lui-même et de tous les plugins installés. C'est vraiment une bonne fonctionnalité, que j'apprécie de plus en plus

Mise en garde: je n'ai jamais utilisé linux comme base pour la mentionnés ci-dessus les serveurs de build (CC.net a couru sur mono), mais ils doivent tous - selon les docs - run cross-plateforme.

La configuration d'un serveur hudson

Conditions préalables:

  • Java (1.5 va vous servir très bien)
  • Accès en lecture sur le serveur subversion (j'ai un compte distinct pour le hudson de l'utilisateur)

À partir d'ici, c'est juste:

java -jar hudson.war

Cela va lancer un petit serveur de droit d'instance hors tension de la console, et vous devriez être en mesure de naviguer à l'installation à votre http://localhost:8080, si vous n'avez rien d'autre en cours d'exécution sur ce port à l'avance (vous pouvez spécifier un autre port en passant l' --httpPort=ANOTHER_HTTP_PORT option à la commande ci-dessus) et tout s'est bien passé dans l'installation.

Si vous allez à la disposition des plugins (http://localhost:8080/pluginManager/available), vous trouverez des plugins pour le soutien de vos tâches mentionnées plus haut (subversion est installé par défaut).

Si cela a aiguiser votre appétit, vous devez installer un serveur d'applications java, telles que tomcat ou jetty. Les instructions d'Installation sont disponibles pour tous les principaux serveurs d'applications

Mise à jour: kohsuke nous Kawaguchi a construit un service windows installer pour hudson

Mettre en place un projet à hudson

Les liens dans la suite de plain-pied à travers suppose une instance en cours d'exécution d'hudson situé à l' http://localhost:8080

  1. Sélectionnez nouvel Emploi (http://localhost:8080/view/All/newJob) sur le menu de gauche
  2. Donner le nom et cocher Build a free-style software project sur la liste
  3. En appuyant sur " ok " vous amène à la page de configuration de la tâche. Toutes les options ont un petit point d'interrogation à côté d'eux. En appuyant sur ce fera apparaître un texte d'aide au sujet de l'option.
  4. En vertu de l'option "groupe de Gestion du Code Source' vous seriez à l'aide de la Subversion. Hudson accepte à la fois les url d'accès ainsi que le module local d'accès
  5. En vertu de l'option de groupe "Construire des Déclencheurs', vous pouvez utiliser le Sondage de SCM'. La syntaxe utilisée ici est celle de cron, afin d'interrogation de la subversion de toutes les 5 minutes serait */5 * * * *
  6. Le processus de construction du projet est spécifiée en vertu de l'option de groupe de la "construction". Si vous avez déjà un fichier ant avec tous les objectifs dont vous avez besoin, vous avez de la chance. Il suffit de choisir 'Invoquer la fourmi" et écrire le nom de la cible. Le groupe d'option prend en charge maven shell et les commandes aussi bien hors de la boîte, mais il y a aussi un plugin pour les phing.
  7. Cochez supplémentaires construire des actions dans le Post de Construire des Actions, tels que des notifications par e-mail ou un archivage de construire des artefacts.

Pour mettre en place des processus pour lesquels hudson ont pas de plugins, vous pouvez les appeler directement via un shell script à partir de l'intérieur de la construction de l'installation, ou vous pouvez écrire vous même plugin

Les pièges:

  • Si vous avez à produire de construire des artefacts, n'oubliez pas d'avoir hudson nettoyer après lui-même à intervalles réguliers.
  • Si vous avez plus de 20 projets mis en place, envisager de ne pas afficher leur état de création de la valeur par défaut de la page principale sur l'hudson

Bonne chance!

23voto

Michiel Points 441

Le terme que vous cherchez est: de l'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 Hébergé SVN/GIT en tant que source. De sorte que vous pouvez même l'utiliser avec GitHub ou haricot magique ou quelque chose d'autre.

Ensuite, vous pouvez l'intégrer avec la suite du type de logiciel:

  • PHPUnit
  • php codesniffer
  • phpdocumentor
  • PHP Gcov
  • PHPXref
  • Yasca
  • etc.

Eh bien, vous pouvez essayer ce hébergés CI: http://www.php-ci.net/hosting/create-project

Gardez à l'esprit cependant, que ces outils ont besoin de soutien personnalisé, si vous intégrez vous-même.

Avez-vous également pensé à propos de la gestion de projet et la gestion des correctifs?

Vous pouvez utiliser Redmine pour la gestion de projet. Il a intégré en continu de soutien à l'intégration, mais seulement en tant que client (pas en tant que serveur CI).

Essayez d'utiliser un hébergé SVN/GIT/etc. la solution, parce qu'ils vont couvrir vos sauvegardes et de garder leurs serveurs en cours d'exécution, vous pouvez donc vous concentrer sur le développement.

Pour un tut sur la configuration de l'Hudson, voir: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/

6voto

Steven Rosato Points 1110

J'utilise Atlassian du Bambou, de l'intégration continue serveur pour mon projet PHP (avec leurs autres produits tels que le fisheye (référentiel de navigation), jira (bug tracker) et de trèfle (couverture de code)).

Il prend en charge SVN et prend désormais en charge Git et il a une grande interface utilisateur. Il est disponible pour linux, windows et mac et il peut fonctionner de manière autonome sur son propre serveur tomcat qui est idéal pour les gens (comme moi) qui n'aiment pas prendre des jours pour l'installation de leurs outils). Bien que cela puisse sembler cher, d'être un développeur solitaire moi j'ai acheté le kit de démarrage de licence pour 10$ (10$ par logiciel). C'est idéal pour les petites équipes et il vaut le coup d'oeil.

5voto

Ajay Patel Points 785

PHPTesting PHPCI C'est sympa, serveur d'intégration continue construit en php.

De Plus, c'est gratuit et open source. :)

il a nombre de plugins..

PHPCI inclut l'intégration des plugins pour:

  • Atoum
  • Behat
  • Feu de camp
  • Codeception
  • Compositeur
  • E-mail
  • Grunt
  • IRC
  • PHP
  • Les peluches
  • MySQL
  • PDepend
  • PostgreSQL
  • PHP Code Sniffer
  • PHP Copier/Coller Détecteur de
  • PHP Spec
  • PHP Unité
  • Des Commandes Shell
  • Tar / Zip

3voto

Phil Wallach Points 2478

Je suis aussi un développeur solitaire, bien que je n'ai pas le même environnement que vous.

Je ne pas utiliser beaucoup de produits, ou des types de produits que vous utilisez, mais je vais vous donner mon expérience.

Je lance un environnement de TEST en parallèle avec mon environnement de PROD. Je n'ai pas de local à l'épreuve de soi. Si c'est trop difficile d'obtenir soemthing dans un véritable environnement de TEST, puis-je réparer mon processus de création. Je ne vois pas l'intérêt de tester en local, que les environnements sont différents. Mise à JOUR: La seule chose que je fais en local est exécuté "php -l" avant de télécharger quoi que ce soit. Arrête les bêtises.

Le processus de génération fonctionne avec tout ce qui est dans l'espace de travail actuel, qui comprend non validées code. Ce n'est pas tout le monde tasse de thé, mais je vais le TESTER très souvent. Tout est engagé avant de passer en PROD.

Une partie de mon processus de création (similaire à la vôtre) crée deux fichiers de métadonnées. L'un contient le dernier (le plus souvent) 100 modifications et me donne aussi l'actuel modifications en nombre. La montre-moi ce que les changements sont installés. L'autre contient le CLIENTSPEC (Forcément) qui me montre exactement ce que les branches ont été utilisés dans cette version. Ensemble, ces me donner reproductible construit.

Je ne construisent pas de droit à l'environnement cible, mais à une zone de transit sur le serveur. J'utilise SSH, ce qui a du sens. Cela me donne un peu d'avantages. Plus important encore, il évite de mourir mi-chemin à travers un gros téléchargement. Il me donne aussi un endroit pour stocker les fichiers de métadonnées, et tous les fichiers sont automatiquement archivés (pour que je puisse aller directement à n'importe quel build). Le script enregistre également la mise à jour (il y a donc une entrée dans le journal de flux et je peux voir les pré - et post-) et des coups de pied tous les démons (j'utilise daemontools donc "svc-t"). Tous ces éléments sont mieux sur la machine cible.

Un autre problème est DB changements. Je garde un maître de l'écriture de la DB schéma, qui-je mettre à jour à chaque fois que la modification du schéma. Chacun des changements aussi aller dans un des changements.sql script, qui est chargé avec la construction de la zone de transit. Le script est exécuté en tant que partie du script d'installation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X