开发代码
代码托管服务提供基于Git的在线代码管理服务,包括代码克隆/提交、分支管理等功能。
本实践中采用分支来进行代码的开发。分支是用来将特性开发并行独立出来的工具,使用分支意味着把工作从开发主线上分离开来,以免影响开发主线。
在创建代码仓库时,会有一个默认分支“master”,即主线。为了保证凤凰商城的稳定运行,需要有一个稳定的持续可用master。因此,开发人员不直接在master分支上进行代码开发,而是统一采用功能分支+合并请求的方式,并且每一个功能分支的代码,必须经过团队的其他成员评审后,才可以进行合并。
本章节介绍如何通过分支完成“门店网络查询功能”的开发代码。
创建需求分支
开发人员Chris在仓库中创建一个需求分支,用于开发新需求的代码。
- 进入项目“凤凰商城”,单击导航“代码 > 代码托管”,进入代码托管服务。
- 单击代码仓库“phoenix-sample”,进入仓库。
- 选择“代码 > 分支”页签,单击“新建分支”,在弹框中配置以下信息,单击“确定”。
表1 新建分支 配置项
示例
说明
基于
master
选择已有的分支。
分支名称
Feature-Store
分支的名称,最长200个字节。
- 不支持以“- ”、“.”、“refs/heads/”、“refs/remotes/”开头。
- 不支持空格、“[”、“\”、“<”、“~”、“^”、“:”、“?”、“*”、“!”、“( )”、“'”、“"”、“|”等特殊字符。
- 不支持以“.”、“/”、“.lock”结尾。
关联Req工作项
前端展示 - 添加门店网络菜单
分支关联的工作项,选择已有的工作项。
页面提示操作成功,页面自动跳转至“文件”页面,页面中显示分支“Feature-Store”。
图1 分支“Feature-Store”
修改并提交代码
开发人员Chris在需求分支中完成代码的开发。
- 在代码仓库“phoenix-sample”中的分支“Feature-Store”中,找到“vote/templates/store-network.html”并打开。
- 单击
,添加以下代码,并在页面底部文本框中输入提交信息“添加门店列表”,单击“确定”。
<ul> <li>A分店:E机场1号航站楼出发层靠右直行123米右侧</li> <li>B分店:F区G路456号</li> <li>C分店:H区J街789号</li> <li>D分店:K区L大道K大楼西侧</li> </ul>
图2 提交代码保存成功,页面中显示修改后的代码。
- 以同样方法打开并编辑“/vote/templates/index.html”。
在179行添加以下代码,输入提交信息“fix #xxxxxx 前端展示 - 添加门店网络菜单”,单击“确定”。其中,“xxxxxx”是Task“前端展示 - 添加门店网络菜单”的编号。
<li class="nav-item"> <a href="store-network" class="nav-link">门店网络</a> </li>
保存成功,页面中显示修改后的代码。
- 查看提交记录。
- 单击导航“工作项 > 需求管理”,进入需求管理服务。
- 在“工作项”页签中找到Task“前端展示 - 添加门店网络菜单”,Task的状态已自动更新为“已解决”。
- 单击Task标题打开详情页。
- 选择“关联”页签,在“代码提交记录”下可看到一条记录,记录的描述与3中输入的提交信息相同。
图3 代码提交记录
通过合并请求合并代码
开发人员Chris在完成代码开发与自测后,提交分支合并请求,项目经理Maggie审核合并请求后完成合入。
- Chris提交合并请求。
- Maggie审核合并请求。
(可选)调整yaml文件配置
如果计划部署应用至CCE,且CCE集群版本高于v1.15(不包括v1.15),请参考以下步骤调整代码仓库中的yaml文件,使其适配CCE集群版本。
- 进入项目“凤凰商城”,单击导航“代码 > 代码托管”,选择代码仓库“phoenix-sample”。
- 选择分支“master”,更新文件“kompose/db-deployment.yaml”。
- 将第1行中“extensions/v1beta1”修改为“apps/v1”。
- 找到“spec”代码段,添加以下代码行。
selector: matchLabels: io.kompose.service: db
- 找到“imagePullSecrets”代码段,将“regcred”修改为“default-secret”。
图5 更新文件 - 更新文件“kompose/redis-deployment.yaml”。
- 将第1行中“extensions/v1beta1”修改为“apps/v1”。
- 找到文件中第一次出现的“spec”,在代码段中添加以下代码行。
selector: matchLabels: io.kompose.service: redis
- 找到“imagePullSecrets”代码段,将“regcred”修改为“default-secret”。
- 更新文件“kompose/result-deployment.yaml”。
- 将第1行中“extensions/v1beta1”修改为“apps/v1”。
- 找到文件中第一次出现的“spec”代码段,添加以下代码行。
selector: matchLabels: io.kompose.service: result
- 找到“imagePullSecrets”代码段,将“regcred”修改为“default-secret”。
- 更新文件“kompose/vote-deployment.yaml”。
- 将第1行中“extensions/v1beta1”修改为“apps/v1”。
- 找到文件中第一次出现的“spec”代码段,添加以下代码行。
selector: matchLabels: io.kompose.service: vote
- 找到“imagePullSecrets”代码段,将“regcred”修改为“default-secret”。
- 更新文件“kompose/worker-deployment.yaml”。
- 将第1行中“extensions/v1beta1”修改为“apps/v1”。
- 找到文件中第一次的“spec”代码段,添加以下代码行。
selector: matchLabels: io.kompose.service: worker
- 找到“imagePullSecrets”代码段,将“regcred”修改为“default-secret”。