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.
-
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.
-
De la nouvelle révision est déployé à 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.
-
Tests unitaires résidant dans un emplacement prédéfini, sont exécutés. 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.
-
(en option) d'un 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 ce
-
Surtout, bonne étape-par-étape, des tutoriels et des procédures sur la façon de configurer
-
Des Solutions qui fournissent 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 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é avec 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!
Vous devez vous connecter pour publier un commentaire.
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:
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:
À partir d'ici, c'est juste:
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 par le--httpPort=ANOTHER_HTTP_PORT
option à la commande ci-dessus) et tout s'est bien passé dans l'installation processus.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 dans hudson
Les liens dans la suite de plain-pied à travers suppose une instance en cours d'exécution d'hudson situé à
http://localhost:8080
http://localhost:8080/view/All/newJob
) à partir du menu sur la gaucheBuild a free-style software project
sur la liste*/5 * * * *
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
Pièges:
Bonne chance!
Le terme que vous cherchez est "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 comme une 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 le suivant type de logiciel:
Vous pouvez également essayer cette 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égrer vous-même.
Avez-vous aussi 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 tutoriel sur la façon de configurer Hudson, voir: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/
- Je utiliser Atlassian est Bambou serveur d'intégration continue pour mon projet PHP (avec leurs autres produits tels que fisheye (référentiel de navigation), jira (bug tracker) et 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.
PHPTesting PHPCI C'est bien, continue integration server intégré dans php.
Plus, c'est gratuit et open source. 🙂
il a nombre de plugins..
PHPCI inclut l'intégration des plugins pour:
Je suis la plupart du temps un sys admin, mais parfois j'ai du code PHP. Comme un projet parallèle, j'ai créé quelques scripts qui va faire simple et indolore pour définir une véritable PHP CI de l'environnement à l'aide de Jenkins. Il gère également un exemple de projet pour vous de sorte que vous pouvez voir comment chaque étape de génération est configuré.
Si vous voulez l'essayer tout ce que vous devez est une Debian/Ubuntu boîte et d'un accès au shell.
http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci
Mise à jour d'ajouter du contenu À ma réponse:
Vous pouvez simplement mettre en place un Jenkins CI pour PHP par Ansible. Depuis la v1.4 il prend en charge les rôles que vous pouvez télécharger à partir de leur galaxy.ansibleworks.com site de la communauté et il va faire le gros du travail pour vous. Il est appelé jenkins-php.
Je vous suggérons d'utiliser Jenkins http://jenkins-ci.org/ c'est gratuit et il est open source.
C'est assez simple à installer, fonctionne sur de multiples plateformes et s'intègre bien avec les autres outils d'intégration continue comme SonarQube (+ SQUALE) pour mesurer la dette technique et Thucydide pour l'automatisation des tests.
Je vous 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 aideront à l'échelle de vos efforts de développement plus tard.
Puisque vous travaillez principalement avec PHP projet il y a quelques autres outils que vous pouvez utiliser.
PHPUnit - Pour les tests unitaires
PHP CodeSniffer - Vérifier les normes de codage
PHP, tout Dépend de la Montre de votre code PHP dépendances
XDEBUG - Pour les tests de performances
Ensemble de ces outils et être déclenchée avec un Jenkins, de l'emploi et contribue à la qualité et les performances de votre code.
Bonne chance et amusez-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.
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 (en Perforce termes) 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.
J'ai récemment commencé le même type de processus, et je suis en utilisant Beanstalk pour svn hébergement.
Il y a deux fonctionnalités intéressantes dans les comptes payants (à partir de $15 je crois):
Je suis sûr qu'il ya d'autres hébergés ou l'auto-hébergement serveurs svn avec ces deux fonctions, mais beanstalk est celui que j'ai de l'expérience et ça marche très, très bien
Il y a aussi une API, qui, j'imagine, pourrait être utilisé pour intégrer le déploiement supplémentaire à votre processus.
Envisager fazend.com, gratuitement hébergé CI plate-forme, qui automatise la configuration et les procédures d'installation. Vous n'avez pas besoin de configurer le contrôle de version, de suivi des bogues, de CI, de serveur, de l'environnement de test, etc. Tout est fait à la demande.