Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CICD的Git分支策略_Git_Github_Continuous Integration_Continuous Deployment - Fatal编程技术网

CICD的Git分支策略

CICD的Git分支策略,git,github,continuous-integration,continuous-deployment,Git,Github,Continuous Integration,Continuous Deployment,只是想了解一下下面的分支策略,让CICD牢记在心 总支- 1.1开发分支-来自master的分支 Team A branch - Fork from Development branch and merge to development branch after feature implementation for QA/Integration testing

只是想了解一下下面的分支策略,让CICD牢记在心

总支-

1.1开发分支-来自master的分支

          Team A branch - Fork from Development branch and merge to 
                          development branch after feature implementation 
                          for QA/Integration testing

          Team B branch - same as above

   1.1.1 Release branch - Goes in PROD
一旦团队A和团队B分支合并并完成QA验证,创建发布分支并对其进行最终回归。此发布分支将投入生产

然后将发布合并到主分支

意图-

主分支是稳定的,其中有生产运行代码

TeamBranch可以部署在开发环境中,并且在服务器上具有所需的CICD配置


这种方法有什么问题吗?

这不是真的,我指的是发展战略,不是工具,因为您有团队分支,这意味着团队的工作在合并到master之前不会集成-总有一些团队的工作对其他团队不可见,并且看不到其他团队的工作,因此会向rebase/merge hell开放

对于真正的CI策略,所有团队都会在master上工作,如果真的拉任务分支,他们会很快地合并到master中,不会超过几天的寿命-实际上每个人都在同一页上

在登台环境中,CI工具和CD工具可能会关注主机运行状况

每当主版本准备好当前版本,或者下一版本的更改开始与当前版本分歧发生冲突时,当前发布分支将被拉入,并且永远不会被合并回主版本。由于版本分歧,这种合并将是一个大问题。当前_版本中的任何bug修复(如果适用于master)都将被仔细挑选并双重提交,因为修复在一个分支上是正常的,但并不意味着它在另一个分支上是正常的

当前的发布分支实际上是您的生产分支。它需要自己的CI/CD设置,根据当前版本的功能进行定制。生产构建只是此分支上的标签

主分支将继续向下一版本发展

冲洗并重复


您还可以为多级别发布(主要/次要/etc)提供当前发布的其他子分支,这些分支也永远不会合并回其父分支。每个这样的分支机构与其母公司之间的关系与当前发布和主版本之间的关系完全相同。

这不是真正的CI,我指的是发展战略,不是工具,因为您有团队分支,这意味着团队的工作在合并到master之前不会集成-总有一些团队的工作对其他团队不可见,并且看不到其他团队的工作,因此会向rebase/merge hell开放

对于真正的CI策略,所有团队都会在master上工作,如果真的拉任务分支,他们会很快地合并到master中,不会超过几天的寿命-实际上每个人都在同一页上

在登台环境中,CI工具和CD工具可能会关注主机运行状况

每当主版本准备好当前版本,或者下一版本的更改开始与当前版本分歧发生冲突时,当前发布分支将被拉入,并且永远不会被合并回主版本。由于版本分歧,这种合并将是一个大问题。当前_版本中的任何bug修复(如果适用于master)都将被仔细挑选并双重提交,因为修复在一个分支上是正常的,但并不意味着它在另一个分支上是正常的

当前的发布分支实际上是您的生产分支。它需要自己的CI/CD设置,根据当前版本的功能进行定制。生产构建只是此分支上的标签

主分支将继续向下一版本发展

冲洗并重复


您还可以为多级别发布(主要/次要/etc)提供当前发布的其他子分支,这些分支也永远不会合并回其父分支。每个这样的子分支与其父分支之间的关系与当前发布和主分支之间的关系完全相同。

要真正执行CI,CI需要执行CD,您将非常定期地合并到主分支,并且没有长期存在的功能分支。我相信每天都有一次这样的机会

与您建议的方法相比,另一种方法是为日常工作提供短期的开发人员分支。然后有一个部署管道,通过一系列测试阶段移动每个代码更改。只有在每个阶段完成更改后,才能进入下一阶段并准备好生产。这允许您在master上工作,但保持稳定,只允许传递的代码进入生产

要处理独立的要素工作,可以使用要素切换而不是分支。如果一切顺利,您可以打开功能并将其推送到master进行测试和部署。如果没有,或者如果业务需要删除某个功能,则可以关闭该功能并继续安全地使用master。我已经在两个产品上很好地看到了这一点

我知道这是非常简单的,但它只是给你一个建议的替代品,希望能帮助你。您可以在一堆博客和stackoverflow上了解更多关于实现这些技术的信息 - -
-

要真正做CI,CI需要做CD,您需要定期合并以掌握,并且没有长期存在的功能分支。我相信每天都有一次这样的机会

与您建议的方法相比,另一种方法是为日常工作提供短期的开发人员分支。然后有一个部署管道,通过一系列测试阶段移动每个代码更改。只有在每个阶段完成更改后,才能进入下一阶段并准备好生产。这允许您在master上工作,但保持稳定,只允许传递的代码进入生产

要处理独立的要素工作,可以使用要素切换而不是分支。如果一切顺利,您可以打开功能并将其推送到master进行测试和部署。如果没有,或者如果业务需要删除某个功能,则可以关闭该功能并继续安全地使用master。我已经在两个产品上很好地看到了这一点

我知道这是非常简单的,但它只是给你一个建议的替代品,希望能帮助你。您可以在一堆博客和stackoverflow上了解更多关于实现这些技术的信息 - -
-

我的CI/CD管道是这样设置的:一旦功能分支合并到主管道中,管道就开始构建、测试并部署到uat。在这一点上,我有一个手动验证步骤,只有在该功能投入生产之后。如果feature1正在等待批准,而feature2到达,那么一旦frature2获得批准,它将被部署。但是由于feature2是在feature1之后到达的,所以代码已经有了feature1。因此,即使feature1未获得批准,也会部署它。您将如何解决这个问题?@M.AliIftikhar功能分支、批准等=>长期存在的分支-这不是真正的CI。请参阅此答案了解如何实现IMHO:只有在功能获得批准时才启用标志/切换。我的CI/CD管道是这样设置的:一旦功能分支合并到主管道中,管道就开始构建、测试并部署到uat。在这一点上,我有一个手动验证步骤,只有在该功能投入生产之后。如果feature1正在等待批准,而feature2到达,那么一旦frature2获得批准,它将被部署。但是由于feature2是在feature1之后到达的,所以代码已经有了feature1。因此,即使feature1未获得批准,也会部署它。您将如何解决这个问题?@M.AliIftikhar功能分支、批准等=>长期存在的分支-这不是真正的CI。关于如何实现这一点,请参见下面的答案IMHO:只有在功能得到批准时,您才可以启用标志/切换。