使用 gitflow 和 gitversion 一次构建,多次部署

Build once, deploy many using gitflow and gitversion

gitflow 符合我们的需要,而且 giversion 似乎也适合 gitflow。但是有一件事我不完全理解。让我解释一下困扰我的事情。

  1. 我们确实在 develop 分支上开发了一些功能 - 所有包都标记为 1.3.0-unstable.1、1.3.0-unstable.2 等等。
  2. 每个包都通过管道 - 开发、测试、uat、生产。
  3. 因此,当开发准备就绪并且一切正常时,根据 gitflow 我们启动发布分支。
  4. 发布时不需要做任何更改,我们马上就完成了 - 发布分支合并到 master 和 develop 中。
  5. 构建服务器再创建一个包 1.3.0,这是一种产品就绪。

如何实现一次构建,多次部署?根据所有规则,我们需要将 1.3.0-unstable.x 提升到生产环境,因为正是这个包在开发和测试中进行了测试,但是版本看起来有点奇怪,不是吗?当来自 master 分支的 1.3.0 从未部署到任何地方时。

问题类似:In the git flow model should I build from the merge commit in master to release?

答案不是很令人满意:

  1. 我们在合并到 master 时执行 -no-ff
  2. 还是不同的套餐

让我自己回答这个问题。我们意识到使用 gitflow 支持多个 versions/several 环境是一个巨大的负担。因此,我们正在寻找更简单的东西,即 github flow。当然,它并没有为我们完全解决原始问题(构建一次 - 部署多次),但这就是我们部分解决它的方式。

我们的管道改变了

来自:开发 -> 测试 -> uat -> 产品

到:开发 -> 测试然后 uat -> 生产

正如我之前所说,我们正在使用 github 流程。每当我们处理新功能时,首先 - 我们从最新的 master 创建一个分支 featurename。此分支的每个构建版本都像这样 1.3.0-featurename.1、1.3.0-featurename.2 等等。

一旦开发人员完成了他的实现并进行了所有的开发检查,这些确切的二进制文件就会进入测试环境进行质量检查。在 QA 人员签署此版本后,我们很高兴通过我们的第二个管道 uat -> prod 来推动它。我们合并 featurename 分支的拉取请求和我们之后获得的构建版本,比方说:1.3.1 进入 uat 环境。一旦在那里签署,我们将完全相同的二进制文件推送到生产环境。

如果同时开发了多个功能分支,我们推送到测试环境的下一个版本应该基于最新的 master 并再次通过管道。