如何使用DevCloud践行GitFlow模型
引言:在“DevOps能力之屋(Capabilities House of DevOps)”中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力。华为云DevCloud将推出“DevOps on DevCloud”系列,针对DevOps领域场景,阐述该场景在华为云DevCloud上的实施方法与实践。本文提供了一个高阶框架,介绍如何使用华为云DevCloud来实现GitFlow。本文由作者与莫妮卡协同完成,对浩初的工作表示感谢。
当Linus Torvalds在2005年引入Git版本控制以来,它真正改变了开发者对于分支branching与合并merging的思考方式。在Git之前,这些任务是可怕的,而且大多被避免的。随着工具越来越成熟,分支与合并变得既便宜又简单。现在分支与合并成了日常开发工作流的一部分。采用何种分支策略与模型,成为每个DevOps团队需要做出的选择,不同的分支策略与模型实际上是个人生产力与团队生产力之间的平衡。
我们强烈推荐DevOps团队通过“基于主干开发”(trunk-based development)方式践行持续集成(CI,Continuous Integration),即开发者经常将代码合并到中央仓库,理想情况下是每天几次。当团队能够经常合并较小的变更,他们将减少合并的复杂性与努力。将基于主干的持续集成与持续交付(CD,Continuous Delivery)结合将减少变更到生产环境的前置时间(lead time)。
当然,并不是每个团队都实现了CI/CD涅槃。许多团队仍然在探索CI/CD的路上或者在某些形势下使得诸如GitFlow的分支模型更有吸引力或者强制性的。因此,我们希望提供帮助,使这些团队更好地使用工具将合并与发布任务自动化。
2010年,Vincent Driessen引入了GitFlow,成为极度流行的分支与发布管理模型。GitFlow引入了开发分支作为主线集成,而主干分支则始终保持生产就绪状态。Master和develop分支是永久分支,但是GitFlow也推荐短期的特性feature、热补丁hotfix和发布release分支。GitFlow如下图所示:
GitFlow使用指导如下:
将develop分支作为持续集成分支
使用feature分支对多个特性工作;
使用release分支来处理多个特性的特定版本发布
使用从master上拉取的hotfix分支来推动修复程序
每次发布后合并到master
Master的代码处于生产就绪状态
GitFlow涉及从主干(master)创建多个不同级别的分支(Branch),其中对特性分支(Feature Branch)的变更仅仅周期性地全部合并到主干来触发发布。基于分支开发(Branch-based development)通常导致更少的合并,更高的合并债务水平,从而延长了生产变更的前置时间。
接下来,让我们看一下如何使用华为云DevCloud相关服务与GitFlow工具 实现GitFlow模型。GitFlow工具基于Git编写,将分支创建与合并流程自动化。此工具遵循GitFlow分支模型指南。当然,你也可以使用Git命令。为简单起见,具有批准或测试阶段的类似生产的流水线已被省略,当然他们可以很容易地匹配此模型。
1 华为云DevCloud与GitFlow
用GitFlow对流水线进行建模的思路是为每个分支创建一条流水线。每条流水线都与对应的分支具有相同的生命周期。当创建一个新的、短期的分支时,我们创建流水线以及所需的资源。在短期的分支合并到develop时,我们将清理流水线与相关资源以避免产生费用。如下图所示:
相关解释如下:
• 每个分支都对应1条流水线;
• 每条流水线中有代码库、编译构建、部署分别作为代码源、构建与部署;
• 每条流水线中的部署对应1个主机组(以ECS部署为例)
2 操作实践
2.1 步骤一 初始化GitFlow模型
在本地代码仓库打开Git Bash终端,输入初始化命令,并按照提示输入分支前缀名,便于识别。
$ git flow init
图1 初始化GitFlow模型
2.2 步骤二 创建feature分支
假设你需要开始处理一个新特性(例如sendmessage),那么输入start命令创建一个feature分支,将自动从develop分支拉取代码。
$ git flow feature start <branch>
2.3 步骤三 为feature分支创建流水线
在华为云DevCloud上,为feature分支创建对应的流水线(例如phoenix-feature-sendmessage),并将构建、部署、测试等任务纳管到此流水线中。在下图中也显示了master、develop分支对应的流水线。
2.4 步骤四 feature提交与验证
在本地开发feature后将代码push到华为云DevCloud代码库,开发人员可以手工执行流水线或者设置流水线自动执行。
在流水线执行成功后,如果团队要求评审后才能合并到develop分支,那么执行步骤五,评审通过后执行步骤六;如果无需评审即可合并到develop分支,那么执行步骤六。
2.5 步骤五 发起合并请求进行评审
新建feature分支到develop分支的合并请求,。
2.6 步骤六 将feature分支合并到develop
当确认feature按预期工作后,那么删除feature分支对应的流水线(例如phoenix-feature-sendmessage)及相关资源。
接着,使用finish命令将变更合并到develop分支,将触发相应的流水线(例如phoenix-develop)。
$ git flow feature finish <feature>
2.7 步骤七 持续集成与发布
在团队将feature功能合入develop分支后,将启动develop流水线实现持续集成。等开发环境验证通过后,团队可以拉取release分支,启动release流水线进行测试环境验证。若发现缺陷,可直接在release分支进行修改、验证。当测试环境验证通过后,将代码合入master分支,将启动master流水线进行生产环境升级与验证。在生产环境升级成功后,删除phoenix-release流水线以及对应的资源。
本文中我们展示如何使用华为云DevCloud的相关服务进行建模。希望大家可以利用本文改进您的CI/CD策略,特别是让开发人员使用feature/release/hotifxes分支工作,并为他们提供协作、测试和快速部署变更的环境。如果华为云DevCloud提供CLI命令,那么DevOps团队可以将其包装在自定义bash脚本中,这样可以使用GitFlow和脚本快速创建和删除短期的管道和资源,这将有助于避免为不再需要的资源付费,并提升效率。
- 点赞
- 收藏
- 关注作者
评论(0)