[英]How exactly works build promotion with GitFlow?
我很难理解促销构建(及其工件)的概念与GitFlow一起是如何工作的。 我正在与Git,Jenkins和(作为新增加的)Artifactory一起制定持续的集成/交付工作流程。 这是我到目前为止所做的:
develop
分支的构建工件将自动被推送到dev
repo(如果单元测试等通过),因此被提升为dev
状态。 这些工件不可能进一步促销。 feature
分支中的工件根本不会被推送或提升。 release
分支中的工件也只能提升为dev
(或者我应该引入一个release
回购?) release
合并到master
,就会标记新的提交,并且Jenkins会运行完整的CI / CD管道。 单元测试和指标(构建其上的所有分支运行阶段)后的工件被推动到一个master
回购和升为master
。 然后,工件用于部署到临时环境,在该环境中可以进行最终测试(这些测试可以在完整的连续部署设置中自动完成)。 如果所有测试都成功,则工件将被推送到prod
仓库,部署到生产并升级到prod
状态。 如果生产失败之前的任何阶段,标签属于从未进入生产的版本。 我的理解是否正确? 我对主/发布合并感到困惑。 直觉上我会说, release
的二进制文件将经历最多的测试。 但是,GitFlow规定只有master
提交被标记(我不想标记技术上没有生成生产中的二进制文件的提交)。 如果在master
的构建过程中发现问题怎么办? 标签是否“错误”,而这些标签还没有投入生产? 我是否必须还原或撤消标记甚至合并提交?
听到其他人采用这种构建促销+ GitFlow的方法会很高兴。 任何帮助深表感谢。
有这么多不同的分支模型,有很多人有自己的需要,我认为没有明确的参考“GitFlow”的含义。 (请随意证明我错了,我喜欢辩论这种事情)。
话虽如此,我(个人)发现这两个引用非常有用,完整且引人注目:
所以呢?
在我看来,你的前两点是正确的,你的最后两点是错误的。
从构建升级的角度来看,所有release
和hotfix
分支都符合(并且预期)部署到test
/ staging
环境以进行最终验证。 来自DataShift:
发布分支中的代码部署到合适的测试环境中,进行测试,并且任何问题都直接在发布分支中修复。 此部署 - >测试 - >修复 - >重新部署 - >重新测试周期将继续,直到您对该版本足以发布给客户感到高兴。
一旦所有内容都经过验证并且您已准备好发布:
发布完成后,发布分支将合并到master并进行开发,以确保发布分支中所做的任何更改都不会被新开发意外丢失。
或者,总结一下:
主分支仅跟踪已发布的代码。 唯一提交的提交是从发布分支和修补程序分支合并。
这是它变得棘手的地方,不同的项目有不同的意见: prod
工件实际上来自哪里?
在我看来,你有两个选择:
release
/ hotfix
分支构建的test
/ staging
中的工件。 master
的提交重新构建工件。 从仅代码的角度来看,这些是等效的 - master
中的代码与刚刚构建和部署到test
/ staging
的代码完全匹配。 但是,从构建过程的角度来看,事情可能会有所不同 - 不同的环境变量,不同的键等。
此外,您的团队如何看待test
与staging
,事情可能会变得复杂。
那么该怎么办?
需要注意的是,这只是我的意见,并且假设staging
意味着“生产镜像”,我认为以下是一个明智的过程:
develop
分支构建/部署dev
环境(如果存在) release
或hotfix
分支构建/部署test
环境 release
或hotfix
分支构建/部署staging
环境。 注意:您可以使用RC
标记来指明这一点,但这是一个团队流程问题。 staging
验证完成后,代码将从release
/ hotfix
合并到master
并使用发布版本进行标记。 staging
部署prod
环境。 最后的想法:
GitFlow是一个很好的起点,但你最终会根据自己的需要定制它。 不要害怕说“这对我们的团队有用”,并按照自己的方式行事 - 只要确保写下来,这样每个人都能理解你是如何做到的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.