首先,如果标题描述不够或者没有很好地描述我的问题,我很抱歉。我正在努力弄清楚如何简单地描述我的问题!这似乎是一个已经解决的问题,但我很难找到答案。我可能错过了一些显而易见的东西!!
因此-我们目前在GitLab上有一个Git工作流,使用3个核心分支(主、前和开发)。我们将特性从开发中分离出来,然后返回到开发中进行初始测试。合并到develop中会触发一个管道,该管道将测试、构建并部署到dev服务器,以便项目所有者可以检查正在进行的代码。一旦签署,开发分支将被合并为preprod,这也会触发一个管道来部署到我们的UAT环境中.呃..。一旦被注销,预置器就会被合并到主服务器上,它有一个手动触发的管道来部署来运行。
这种方法有很多问题,但最大的问题是瓶颈。如果我们之前有一个特性我们还不想发布,但是后面有另一个特性,那么绕过我们还不想要的特性是很棘手的。因此,我们正在考虑转向一种不同的分支策略,如GitFlow。
现在我搞不清楚了!目前,为了将一个特性部署到可以查看和测试它的环境中,我们有通过合并到特定分支的管道。但是,在测试特性和修复程序时,我想废除这种方法。本质上,我需要一种能够运行管道的方法,该管道可以在任何时候运行自动测试、构建和部署任何分支。因此,如果我正在研究FeatureA,我可以将该分支推到GitLab并将其部署到某个地方,这样就可以将其与同事正在处理的FeatureB隔离开来进行审查。这有意义吗?几乎就像一个动态环境的动态管道,在需要的时候会加速,在不再需要的时候又会被破坏。
如果有人能为我指出正确的方向,我们将不胜感激!
还应该补充说,我们已经开始在本地机器上使用docker进行开发,因此使用docker来构建动态测试环境的解决方案并不是不可能的。
提前谢谢..。
发布于 2019-11-07 14:44:50
将部署环境和分支混为一谈常常会导致您所描述的问题。这似乎是一种自然的契合,很容易映射到理想解决方案的心理模型,但是,现实生活绝不是理想的。
基本上,git不是一个部署工具,不应该克隆来部署一个版本,而是获取一个包( tarball、zip文件、docker容器、NPM包等等)。
实际上,这两个概念是正交的。分支策略(无论是什么,急流、主干为基础等)是帮助开发人员隔离和共享其工作的一种方法。它自然地与版本控制策略联系在一起,是构成CI/CD系统的一半的内容。在这里,您必须强迫自己将CI (连续集成)与CD (连续部署)分开,如果您阅读,您将看到这一点。
然而,部署消耗了所创建的版本的结果,并集成了系统的各个部分,使得整个系统是可用的、可测试的。
因此,如果您将分支和其中的代码视为一种组装版本的方法,构建系统将对其进行构建和打包,然后将其存储在某个地方。可以像网络共享或FTP站点一样简单,也可以将其绑定到具有适当后端的现有包管理器中,这是最适合您的团队的。这一选择将在很大程度上取决于您正在使用的技术栈和您将要部署到的底层平台(静态环境、对接器、kubernetes、独立复制和运行等)。
然后,另一组任务可以引入这些版本中的任何一个,并组装一个工作部署。在这里,如果您的部署环境是动态的,那么这是最好的,但是它也可以用于静态环境。这将构成您的连续系统的CD部分。
一旦解耦,您就可以创建一个包含以前构建的任何版本的环境。
在术语上,您甚至可以拥有多个生产环境,用户界面的细微变化会使它们相互矛盾--其他的技术有A/B测试和聪明的负载平衡/分发给最终用户。
回到您的特定情况,它将简化您的gitflow回到一个更传统的主/开发永久分支和一组特性/修复和发布分支。
使用符号学,您可以严格地为主合并(来自发布分支或修复分支)和所有其他分支的预发行版本保留正式版本。对于您的发布前分支,只需添加一个-SOMETHING,其中某些内容是分支的名称,例如,也可能是区分连续部署的时间戳。
例如,
我在这里提出语义版本控制,因为我对它很熟悉,但是通过版本控制分离分支的同样广泛的原则几乎可以适用于任何版本控制方案。
在源代码管理中,您看不到任何与部署环境有关的内容。只有您的版本控制策略才能将它们连接起来,否则它们是完全孤立和独立的。
在这个新的环境中,您的开发人员会感到更舒服,您的部署也会感到不那么拘束和尴尬。
希望这能有所帮助
https://devops.stackexchange.com/questions/9719
复制相似问题