Question

Je suis un développeur seul la plupart de mon temps, de travailler sur un certain nombre de grands projets principalement basés sur PHP. Je veux professionnaliser et automatiser comment les changements à la base de code sont traitées, et créer un processus d'intégration continue qui fait la transition vers le travail en équipe possible sans avoir à apporter des changements fondamentaux.

Ce que je fais en ce moment est, j'ai un environnement de test local pour chaque projet; J'utilise SVN pour chaque projet; les changements sont testés au niveau local, puis transféré à la version en ligne, généralement via FTP. documentation de l'API est généré manuellement à partir du code source; Les tests unitaires sont quelque chose que je reçois en lentement, et ce n'est pas encore partie de ma routine quotidienne.

Le "cycle de construction" J'Envisioning serait faire ce qui suit:

  • Un changeset est vérifié dans SVN après avoir été testé localement.

  • Je commence le processus de construction. La révision SVN HEAD se vérifier, le cas échéant modifié, et préparé pour le téléchargement.

  • Documentation API est généré automatiquement - si je mets pas encore en détail jusqu'à l'aide d'un modèle par défaut, le balayage de la base de code tout

  • .
  • La nouvelle version est déployée à l'emplacement distant via FTP (y compris certains changement de nom d'annuaire, chmodding, bases de données d'importation, et les goûts.) Ceci est quelque chose que je déjà comme phing pour beaucoup, mais je suis ouvert pour des 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 le succès en utilisant E-Mail, RSS ou (de préférence) sortie HTML que je peux saisir et mettre dans une page Web.

  • (en option) d'un utilisateur final fichier texte « changelog » dans un endroit prédéfini est mis à jour avec une partie prédéfinie du message de commit ( «Il est maintenant possible de filtrer à la fois « foo » et « bar » en même temps). Ce message est pas nécessairement identique au message de commit SVN, qui contient probablement beaucoup plus d'informations internes.

  • Des trucs comme métriques de code, la vérification de style de code et ainsi de suite ne sont pas mon objectif principal en ce moment, mais à long terme, ils ne seront certainement. Des solutions qui apportent ce hors-the-box sont très gentiment regardé.

Je cherche

  • 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 cette

  • En particulier, bons tutoriaux et soluces étape par étape sur la façon de mettre en place

  • Des solutions qui fournissent autant l'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

Je suis débordés avec le travail, j'ai donc une forte inclinaison vers des solutions simples. D'autre part, si une fonction manque, je vais pleurer à ce sujet étant trop limité. :) solutions point-and-click sont également les bienvenus. Je suis également à des recommandations de produits commerciaux qui peuvent travailler 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 l'hébergement mutualisé (= pas de SSH à distance). Je cherche des solutions que je peux courir dans mon propre environnement. Je suis prêt à mettre en place une machine virtuelle Linux pour cela, aucun problème. Les solutions hébergées sont intéressantes pour moi que si elles fournissent tous les aspects décrits ou sont suffisamment souples pour interagir avec l'autre parties du processus.

  

Bounty   J'accepte la réponse que je me sens me donner le plus grand kilométrage. Il y a beaucoup d'excellents commentaires ici, je voudrais pouvoir accepter plus d'une réponse. Merci à tous!

Était-ce utile?

La solution

Je suis passé par buildbot , CruiseControl.net , CruiseControl et Hudson . Tout que j'ai vraiment aimé CruiseControl *, il était juste trop de tracas avec les cas de dépendance très complexes. buildbot n'est pas facile à mettre en place, mais il a une aura belle (je comme python, c'est tout). Mais hudson a conquis les premiers trois parce que:

  1. Il est juste facile à mettre en place
  2. Il est facile de personnaliser
  3. Il semble bon et a belle fonctionnalité aperçu
  4. Il a obtenu des mises à jour point-and-clic, pour lui-même et tous les plugins installés. Ceci est une caractéristique très agréable, que j'apprécie de plus en plus

Caveat: Je ne jamais Linux utilisé comme base pour les serveurs de construction mentionnés ci-dessus (CC.net a couru sur ), mais ils devraient tous - selon les docs -. multiplateformes exécuter

Mise en place d'un serveur hudson

Pré-requis:

  • Java (1.5 vous servira très bien)
  • Lire l'accès au serveur subversion (je possède un compte séparé pour l'utilisateur hudson)

A partir de là, il est juste:

java -jar hudson.war

Ceci lancera une petite instance de serveur à droite de votre console, et vous devriez être en mesure de parcourir l'installation à votre http://localhost:8080, si vous n'avez rien en cours d'exécution d'autre sur ce port à l'avance (vous pouvez spécifier un autre port en passant l'option --httpPort=ANOTHER_HTTP_PORT à la commande ci-dessus) et tout allait bien dans le processus « d'installation ».

Si vous allez dans le répertoire plugins disponible (http://localhost:8080/pluginManager/available), vous trouverez des plugins pour soutenir vos tâches ci-dessus mentionnées (prise en charge de la subversion est installé par défaut).

Si cela vous a vous mettre en appétit, vous devez installer un serveur d'applications Java, telles que tomcat ou jetée . sont disponibles pour tous les principaux serveurs d'applications

Mise à jour : Kohsuke Kawaguchi a construit un windows service d'installation hudson

Mise en place d'un projet dans hudson

Les liens dans les domaines suivants de passage suppose une instance en cours d'exécution de hudson situé à http://localhost:8080

  1. Sélectionner un nouvel emploi (http://localhost:8080/view/All/newJob) dans le menu à gauche
  2. Donnez un nom au travail et cochez Build a free-style software project sur la liste
  3. En appuyant sur « ok » vous amène à la page de configuration du travail. Toutes les options ont un petit point d'interrogation à côté d'eux. En appuyant sur cela apportera un texte d'aide concernant l'option.
  4. Dans le groupe d'options « code source de gestion » vous utilisez Subversion. Hudson accepte à la fois l'accès aux URL, ainsi que l'accès module local
  5. Dans le groupe d'options 'Build Triggers', vous pouvez utiliser 'Poll SCM. La syntaxe utilisée ici est celle de Cron, si le vote dépôt subversion toutes les 5 minutes serait */5 * * * *
  6. Le processus de construction du projet est spécifié dans « construire » le groupe d'options. Si vous avez déjà un fichier de construction fourmi avec toutes les cibles dont vous avez besoin, vous avez de la chance. Il suffit de choisir « fourmi Invoke » et d'écrire le nom de la cible. Le groupe d'options supporte maven et commandes shell et hors de la boîte, mais il y a aussi un vous écrivez propre plugin

    Pitfalls:

    • Si vous avez produit construire des objets, souvenez-vous d'avoir hudson nettoyer après lui-même à des intervalles réguliers.
    • Si vous avez plus de 20 projets mis en place, pensez à pas afficher leur état de construction comme la page principale par défaut sur hudson

    Bonne chance!

Autres conseils

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 de CI), peut utiliser hébergé SVN / GIT comme source. Ainsi, vous pouvez même l'utiliser avec GitHub ou Beanstalk ou autre chose.

Ensuite, vous pouvez intégrer cela avec le genre de logiciels suivants:

  • PHPUnit
  • php-codesniffer
  • phpDocumentor
  • PHP Gcov
  • PHPXref
  • Yasca
  • etc.

Vous pouvez également essayer ce hébergé CI: http: //www.php-ci .net / hébergement / créer projet

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

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

Vous pouvez utiliser Redmine pour la gestion du projet. Il a intégré le support d'intégration continue, mais seulement comme côté client (pas comme serveur CI).

Essayez d'utiliser un SVN hébergé / GIT / etc. solution, car ils couvriront vos sauvegardes et de garder leurs serveurs exécutant, vous pouvez 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/

J'utilise le serveur d'intégration continue de Atlassian Bamboo pour mon projet principal de PHP (ainsi que leur autre produits tels que fisheye (navigation référentiel), JIRA (numéro suivi) et trèfle (couverture de code)).

Il prend en charge SVN et prend maintenant en charge Git et il a une grande interface utilisateur. Il est disponible pour Linux, Windows et Mac et peut fonctionner autonome sur son propre serveur tomcat qui est idéal pour les gens (comme moi) qui ne veut pas prendre jours pour installer leurs outils). Bien que cela puisse paraître cher, être un seul développeur moi-même j'ai acheté la licence de kit de démarrage pour 10 $ (10 $ par logiciel). C'est idéal pour les petites équipes et il vaut le coup d'oeil.

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

De plus, sa source libre et ouvert. :)

il a nombre de plug-ins ..

PHPCI comprend des plugins d'intégration pour:

  • Atoum
  • Behati
  • Campfire
  • Codeception
  • Compositeur
  • E-mail
  • Grunt
  • IRC
  • PHP
  • Lint
  • MySQL
  • PDepend
  • PostgreSQL
  • Code PHP Sniffer
  • PHP détecteur Copier / Coller
  • Spec PHP
  • Unité PHP
  • Commandes Shell
  • Tar / Zip

Je suis la plupart du temps un système admin mais parfois je PHP code. En tant que projet parallèle que j'ai créé quelques scripts qui le rendent simple et indolore de mettre en place un environnement PHP complet CI soufflé en utilisant Jenkins. Il gère également un exemple de projet pour vous afin que vous puissiez voir comment chaque étape de construction est configuré.

Si vous voulez essayer tout ce que vous avez besoin est une boîte Debian / Ubuntu et l'accès shell.

http: //yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci

Mise à jour Pour ajouter un peu de contenu à ma réponse:

Vous pouvez simplement mettre en place un Jenkins CI pour PHP en utilisant Ansible. Depuis v1.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 levage de charges lourdes pour vous. Il est appelé -php jenkins.

Je suggère d'utiliser Jenkins http://jenkins-ci.org/ il est gratuit et il est open source .

Il est assez en avant d'installer, fonctionne directement sur de multiples plateformes et intègre bien avec d'autres outils d'intégration continue comme sonarqube (+ de SQUALE) pour mesurer la dette technique et Thucydide pour l'automatisation des tests.

Je suggère fortement à l'aide GIT ou GIT Hub pour le contrôle de version au lieu de SVN. De mon point de vue, il est juste un meilleur système de contrôle de version qui vous aidera à l'échelle vos efforts de développement ultérieur.

Puisque vous travaillez principalement avec le projet PHP, il y a d'autres outils que vous pouvez utiliser.

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 performance

Tous ces outils et être déclenché avec un travail Jenkins et aide à la qualité et la performance de votre code.

Bonne chance et Amusez-vous!

Je ne l'utilise pas beaucoup des produits, ou même les types de produits que vous utilisez, mais je vais vous donner mon expérience.

Je lance un environnement de test en parrallèle avec mon environnement PROD. Je n'ai pas test local en tant que tel. S'il est trop difficile d'obtenir soemthing en un véritable environnement de test, je fixe mon processus de construction. Je ne vois pas le point de tester localement, comme les environnements sont différents. MISE À JOUR: La seule chose que je fais est exécuté localement « php -l » avant je télécharger quoi que ce soit. Arrête les erreurs stupides.

Le processus de construction fonctionne avec tout ce qui est dans l'espace de travail actuel, qui inclut le code non engagé. Ce n'est pas la tasse de chacun de thé, mais je vais TESTER très souvent. Tout est engagé avant d'aller PROD.

Une partie de mon processus de construction (semblable à la vôtre) crée deux fichiers Méta. L'un contient les derniers (en général) 100 changements et me donne également le numéro de changelist actuel. La montre-moi ce que des changements sont installés. L'autre contient les CLIENTSPEC (en termes Perforce) qui me montre exactement quelles branches ont été utilisées dans cette construction. Ensemble, ils me donnent reproductible builds.

Je ne construis pas droit à l'environnement cible, mais à une zone de mise en scène sur le serveur. J'utilise SSH donc ce sens. Cela me donne quelques avantages. Et surtout, il évite de mourir à mi-chemin à travers un grand téléchargement. Il me donne aussi un endroit pour stocker des fichiers Méta, et tous les fichiers de construction sont archivés automatiquement (donc je peux aller tout droit à toute construction). Le script enregistre également la mise à jour (donc il y a une entrée dans le flux de journal et je peux voir avant et après) et coups de pied tous les daemons (j'utilise daemontools donc « svc -t »). Tous ces éléments sont mieux sur la machine cible.

Un autre problème est le changement DB. Je garde un script maître du schéma DB, que je mets à jour chaque fois que les modifications du schéma. Chacun des changements vont également dans un script changes.sql, qui est chargé de la construction de la zone de mise en scène. Le script est exécuté dans le cadre du script d'installation.

J'ai récemment commencé le même genre de processus, et je utilise Beanstalk pour l'hébergement svn.

Il y a deux fonctionnalités intéressantes dans les comptes payés (à partir de $ 15pm je pense):

  • déploiement permet à l'utilisateur de créer des cibles ftp pour les serveurs de mise en scène et de production, qui peuvent être déployées au clic d'un bouton (inc spécifiant une révision et branche)
  • webhooks permettent à l'utilisateur de mettre en place une url qui est appelé à chaque validation / déployer, en passant à travers des choses comme numéro de révision, la description et l'utilisateur. Cela pourrait être utilisé pour mettre à jour docs, tests unitaires et exécuter changelogs de mise à jour.

Je suis sûr qu'il ya d'autres hébergés auto-hébergement ou les serveurs svn avec ces deux caractéristiques, mais Beanstalk est celui que j'ai l'expérience de et cela fonctionne très, très bien

Il y a aussi une API, que j'imagine pourrait être utilisé pour intégrer le déploiement plus à votre processus.

fazend.com , une plate-forme de CI hébergé gratuitement, qui automatise les procédures de configuration et d'installation. Vous n'avez pas besoin de contrôle de version de configuration, suivi des bogues, serveur CI, environnement de test, etc. Tout est fait à la demande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top