Quel est votre flux de travail de déploiement d'applications Web préféré avec SVN?

Translate

Nous utilisons actuellement une configuration de déploiement quelque peu compliquée qui implique un serveur SVN distant, 3 branches SVN pour DEV, STAGE et PROD, promouvant le code entre elles via des correctifs, etc. Je me demande ce que vous utilisez pour le déploiement dans une petite équipe de développement ?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

tronc pour le développement et une branche (production) pour la production.

Sur ma machine locale, j'ai un VirtualHost qui pointe vers la branche du tronc, pour tester mes modifications.

Toute validation dans le tronc déclenche un hook de validation qui effectue une exportation svn et se synchronise avec l'URL de développement du serveur en ligne - donc si le site est stackoverflow.com, ce hook met automatiquement à jour dev.stackoverflow.com

Ensuite, j'utilise svnmerge pour fusionner les correctifs sélectionnés du tronc à la production dans mes caisses locales. J'ai à nouveau un VirtualHost sur ma machine locale pointant vers la branche de production.

Lorsque je valide les modifications fusionnées dans la branche de production, à nouveau un hook d'exportation SVN met à jour l'exportation de production (en direct) et le site est en ligne!

La source
Translate

Quand je travaillais dans une petite équipe de développement (petite signifiant moi, un autre programmeur et le patron), c'était assez chaotique. Cependant, nous avons constaté que l'attribution d'un type de processus «gatekeeper» fonctionnait pour nous.

Le gardien était la personne qui avait fait le plus de travail sur l'application (dans ce cas, j'avais 2 projets que j'avais développés de A à Z, il en avait 4).

En gros, chaque fois qu'il devait travailler sur mes projets, il m'informait qu'il faisait du travail, je m'assurais que le référentiel était à jour et modulable, puis il supprimait, apportait ses modifications, puis s'engageait . Il m'informait que c'était fait, je réduisais, construisais et déploierais. S'il y avait des changements de base de données, nous avions un dossier de changement de base de données avec tous les scripts qui corrigeraient la base de données.

Il y a évidemment beaucoup de trous, mais le processus a fonctionné pour nous et nous a empêché de nous construire les uns sur les autres.

La source
Translate

Je n'ai eu aucun problème avec l'organisation commune des balises / branches / tronc.

Le développement général en cours se produit dans le coffre.

La maintenance d'une version en production a lieu dans la branche de version appropriée.

Les modifications apportées à la branche de publication qui sont toujours pertinentes pour le tronc sont fusionnées.

Lorsqu'une nouvelle version est prête pour le déploiement, elle est balisée à partir du tronc, puis une branche est créée à partir de cette balise. La nouvelle branche de version est extraite sur le serveur, parallèlement à la version actuelle. Quand il est temps de changer, les chemins sont jonglés ("mv appdir appdir.old && mv appdir.new appdir").

Les développeurs prenant en charge la version de production doivent ensuite basculer leur copie de travail vers la nouvelle branche ou effectuer une nouvelle extraction à partir de celle-ci.

La source
Translate

Trois branches sonne juste comme du travail supplémentaire.

Les différences environnementales peuvent être gérées en ayant différentes versions des fichiers concernés dans le coffre. c'est-à-dire database.yml et database.yml.prod. Le processus de déploiement doit être respectueux de l'environnement et simplement copier les fichiers par environnement sur les fichiers par défaut.

La source
Translate

Une simple branche de tronc contient le code le plus récent, puis coupez une branche à chaque mise en ligne. Cela semble fonctionner assez efficacement. Vous pouvez facilement accéder à la branche précédente chaque fois que la branche actuelle que vous avez coupée pour le système actif échoue. En outre, il est facile de corriger les bogues sur la branche qui est actuellement active, et comme la branche meurt effectivement lorsque vous en coupez une nouvelle, il n'y a qu'une seule branche réelle sur laquelle vous devez travailler (puis fusionner les correctifs à partir de là vers le branche vivante).

La source
Translate

Nous n'utilisons pas de branches pour la mise en scène de contenus Web; uniquement pour tester des choses expérimentales qui prendront beaucoup de temps (lire: plus d'un jour) pour se fondre dans le coffre. Le tronc, de style «intégration continue», représente un état actuel (espérons-le) fonctionnel.

Ainsi, la plupart des changements sont directement appliqués au tronc. Un serveur CruiseControl.NET se mettra automatiquement à jour sur une machine qui exécute également IIS et dispose de copies à jour de toutes les ressources supplémentaires du site disponibles, de sorte que le site puisse être entièrement et proprement testé en interne. Après le test, les fichiers sont téléchargés sur le serveur public.

Je ne dirais pas que c'est l'approche parfaite, mais c'est simple (et donc adapté à notre personnel relativement petit) et relativement sûr, et fonctionne très bien.

La source
Translate

Trunk contient la base de code de développement "principale" actuelle.

Un développeur créera souvent une branche individuelle pour tout projet à moyen et long terme qui pourrait fluidifier la base de code du tronc et gêner les autres développeurs. Quand il aura terminé, il se fondra dans le coffre.

Nous créons une version balisée chaque fois que nous mettons du code en production. Le dossier dans / tags est simplement le numéro de version.

Pour déployer en production, nous effectuons une exportation SVN vers la mise en scène. Lorsque cela est satisfaisant, nous utilisons une simple rsync pour déployer les clusters de production.

La source
Translate

Je recommande vivement le livre (actuellement en ébauche)Livraison continue, qui décrit un processus complet de gestion de la livraison de logiciels, basé sur des principes d'intégration continue (entre autres).

Je n'aime pas du tout l'approche de la branche et de la fusion, car elle peut devenir très compliquée, et c'est assez gaspilleur puisque vous finissez par passer du temps sur des activités qui n'apportent aucune nouvelle valeur. Vous avez déjà développé, testé et corrigé votre code une fois, pourquoi créer une situation (copier le code dans une autre branche) qui vous oblige à refaire ce travail?

Quoi qu'il en soit, le moyen d'éviter les branches et les fusions est de créer vos artefacts déployables à partir du tronc et de promouvoir les artefacts construits (plutôt que la source) lorsqu'ils passent les tests, la mise en scène, etc. De cette façon, vous êtes sûr à 100% que la chose que vous la mise en production est la même chose que vous avez testée.

Si vous avez différentes fonctionnalités qui peuvent devoir être publiées selon des calendriers différents, changer votre approche de la façon dont vous implémentez (rendre la fonctionnalité configurable ou mieux encore modulaire) peut vous aider à conserver un seul tronc de développement.

La source
Translate

Nous utilisons le branchement de version - cela semble être plus efficace pour nous que le branchement de fonctionnalités que nous faisions.

Ne créez pas de branches différentes pour les différents environnements.

La source
Translate

Je travaille personnellement en local (développement), en ajoutant / corrigeant des fonctionnalités et quand je pense que c'est prêt je m'engage dans le tronc (production). Sur le serveur de production, je viens de faire une mise à jour svn.

La source
Translate

Je travaille avec une situation similaire à celle que vous vivez actuellement. J'ai été chargé de trouver une «meilleure» solution et cela a fonctionné dans le sens de ce qui suit.

La branche active représente les serveurs dans leur état actuel.

Tout travail de développement doit être effectué dans une branche tirée de live. Il peut s'agir d'un travail d'une personne d'une demi-heure ou d'un projet multi-équipes d'un an. Aussi souvent qu'on le souhaite, des changements à vivre peuvent être fusionnés dans ces branches de développement.

Avant qu'un morceau de travail ne soit mis en ligne, les modifications par rapport à la version en direct sont à nouveau fusionnées et sont marquées comme une version potentielle. Cette version est testée sur l'environnement de test et si elle réussit le test, la nouvelle version live est extraite de la balise.

Il est possible de fusionner plusieurs travaux en une seule version si cela fonctionne mieux.

Cela signifie qu'il est assez simple de garder les branches de développement à jour avec live et si un travail de développement est abandonné, il y a un minimum de rangement à faire.

Pour passer d'un projet à un autre, un développeur peut simplement changer son environnement de travail local vers une autre branche.

L'un des problèmes que nous avons rencontrés avec le système tel que vous le décrivez est que DEV peut devenir obsolète avec PROD assez rapidement, vous ne développez donc pas contre le live et il n'est pas facile de repérer les dépendances croisées avant l'étape. La solution ci-dessus résout ces problèmes tout en restant assez légère.

La source