Bon déploiement Git en utilisant la stratégie de branches avec Heroku?

Qu'est-ce qu'une bonne stratégie de déploiement à utiliser avec Git + Heroku (Ruby on Rails)?

actuellement la façon dont je travaille avec mon dépôt git d'origine: toutes les fonctionnalités (ou' histoires') sont d'abord vérifiées en tant que branches, puis fusionnées avec master et poussées vers l'origine.

Tout ce qui est poussé à l'origine/maître déclenche un script qui tire le nouveau code des rails vers la zone de mise en scène (simple rail webserver).

quand vient le moment pour moi de pousser une nouvelle version de production à Heroku, devrais-je créer une nouvelle branche (appelée quelque chose comme production_version_121), et pousser cela d'une façon ou d'une autre à Heroku?

idéalement, je voudrais choisir les fonctionnalités des versions de développement précédentes que je devrais inclure dans la branche de production... testez-le, et poussez Jusqu'à Heroku.

par exemple, Je ne veux peut-être pas que tout le dernier code soit poussé à la production. Je pourrais vouloir la caractéristique "a" que j'avais travaillé sur et la fonctionnalité " c "a fusionné avec la production, sans inclure la fonctionnalité expérimentale" b " qui a besoin de plus de débogage.

N.B. je vais essayer d'éviter capistrano au début et obtenir quelque chose de travail manuel pour l'instant.

? Pratiques Exemplaires?

28
demandé sur Peter Mortensen 2009-09-29 01:10:12

3 réponses

dans le projet Gemcutter nous avons simplement une branche production . Tous les changements que nous voulons voir sur le site de production sont fusionnés dans cette branche, puis déployés avec:

git push heroku production:master

la branche staging sert un but similaire pour le site de rassemblement (également sur Heroku)

32
répondu David Dollar 2009-11-16 02:24:26

depuis que J'ai lu le de Vincent Driessen , un modèle réussi de branchement , je suis accro. Mon entreprise entière (8 d'entre nous) a maintenant standardisé sur ce modèle et quelques autres endroits que j'ai consultés ont aussi commencé à l'utiliser.

la plupart des gens à qui je l'ai montré disent qu'ils faisaient déjà quelque chose de similaire et ont trouvé très facile de s'adapter.

en un mot, vous avez 2 branches qui sont permanentes (maîtrise et développement). La plupart du temps, vous allez juste faire des branches hors de développer et les fusionner à nouveau dans développer. Les choses deviennent un peu plus complexes lorsque vous faites des versions de production et des correctifs, mais après avoir lu le post quelques fois, il devient gravé.

il y a même un outil en ligne de commande appelé git-flow pour vous aider.

16
répondu Jared 2014-01-28 17:59:12

il y a plusieurs façons d'y arriver, et cela dépend vraiment de votre préférence.

je vais vous donner une stratégie possible sur le dessus de ma tête: étant donné que vous avez déjà une mise en scène automatisée qui utilise master, je suggérerais de créer une branche "production". Quand vous voulez promouvoir un correctif/fonctionnalité à la production, vous fusionnerez simplement la branche de sujet dans votre branche de "production".

git checkout production
git pull . my-topic-branch
(resolve any conflicts)

quand vous êtes prêt à en fait push ce code à votre serveur de production, vous devriez tag la branche en utilisant un nom unique (probablement avec un horodatage). Ensuite, vous poussez simplement la branche de production à Heroku.

git checkout production
git tag release-200910201249

je suggère de créer un script ou un alias git pour automatiser le tagging pour les horodateurs, Car utiliser un schéma de nommage cohérent est important. J'utilise quelque chose comme ceci:

git config alias.dtag '!git tag release-`date "+%Y%m%d%H%M"`'

qui me permet pour faire juste tapez git dtag quand je veux marquer une version avec une estampille temporelle.

vous pouvez voir vos étiquettes en utilisant git tag et les voir en utilisant git show release-1234 . Pour plus d'informations sur les tags, Lancez git help tag . Vous pouvez également trouver ce GitHub guide sur l'étiquetage utile. Je recommande également de lire les flux de travail d'autres personnes (voici un bon writeup ) et de choisir ce qui fonctionne pour vous.

7
répondu ry. 2009-10-20 17:06:34