与Capistrano的Git工作流程

jer*_*ith 5 git deployment capistrano

我正试着用capistrano来解决一个好的git工作流程.我找到了一些 文章,但我要么完全没有把握他们的建议(可能),要么他们有点缺乏.

这是我到目前为止的想法,但是当我合并回主分支时(即在移动到舞台之前?之后?)并尝试将其挂钩到capistrano进行部署时,我会陷入困境:

  1. 确保您了解其他开发人员在远程主分支上所做的所有更改
    • git checkout master
    • git pull
  2. 创建一个与您尝试修复的特定错误相关的新分支
    • git checkout -b bug-fix-branch
  3. 进行更改
    • git status
    • git add .
    • git commit -m "Friendly message about the commit"

所以,这通常是我被卡住的地方.此时,我有一个健康的分支和一个新的bug-fix-branch,它包含我的(未经测试的 - 除了单元测试)更改.

如果我想将我的更改推送到阶段(通过cap staging deploy),我是否必须将我的更改合并回主分支(我不愿意,因为看起来master应该保持没有未经测试的代码)?我是否甚至从master部署(或者我应该首先标记版本然后修改我的production.rb文件以从该标记部署)? git-deployment似乎解决了其中一些工作流问题,但我似乎无法弄清楚它究竟是如何实际挂钩到cap staging deploy和cap production deploy.

思考?我认为有可能的规范的方式来做到这一点,但我要么无法找到它还是我太新与git认识到,我已经找到了它.

救命!

Jed*_*der 3

我这样做的方法是有一个“暂存”分支,可以在您神圣的存储库上进行跟踪。您将需要使用 gem 'capistrano-ext',它为阶段提供了一些额外的配置选项(考虑到您对登台部署的调用,我认为您已经在使用它)。定义阶段,它允许您为每个阶段拥有一个部署文件,例如“staging”,您可以在其中定义要部署到的每个阶段所独有的capistrano-ext分支。set :branch, "staging"您可以执行上面的工作流程并添加:

#after commiting on bug-fix branch
git checkout staging # => tracks staging on origin
git merge bug-fix-branch # => bring new code in
git push origin staging # => capsitrano acts locally, it needs the code to get from origin
cap staging deploy # => wasnt that easy?
Run Code Online (Sandbox Code Playgroud)

在理想的情况下,你还有一个生产分支,因此 git 分支被团队商定为

  • 主控 - 团队在开发人员之间共享的边缘代码
  • staging - 客户端在临时服务器上测试的代码(主合并快进)
  • 生产 - 稳定版本(从暂存快进)

编辑:对评论的回复太长,所以我不得不附加到答案。

你有几种方法可以解决这个问题,我马上就能想到一种。对产品的修复需要尽快反映在所有分支中,以便您的开发人员在同一基础上工作。假设 prod 与 staging 有直接的共同祖先,并且 staging 到 master,则应将 prod 的修复添加到基于 prod 分支的 HEAD 的主题分支,然后将该更改与 master 合并,然后合并到 staging 中,最后部署到生产。这个想法是,唯一的差异是错误修复的提交,下次您将生产快进到暂存的头部时,您已经拥有了代表您修复的产品错误的更改的对象,因此没有问题(并且由于对错误进行了良好的测试,因此在每个分支上运行该套件后,您知道它是有效的)。否则,您可能必须从 master 中挑选一个提交并应用于 prod 和 staging。请访问 pro-git.org 了解类似的更高级的工作流程。