• 沒有找到結果。

部署失败解决方法_软件开发平台 DevCloud_最佳实践_HE2E DevOps实践_附录_华为云

N/A
N/A
Protected

Academic year: 2022

Share "部署失败解决方法_软件开发平台 DevCloud_最佳实践_HE2E DevOps实践_附录_华为云"

Copied!
153
0
0

加載中.... (立即查看全文)

全文

(1)

最佳实践

文档版本 01

发布日期 2022-02-17

(2)

版权所有 © 华为技术有限公司 2022。 保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。

商标声明

和其他华为商标均为华为技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。

(3)

目 录

1 HE2E DevOps 实践... 1

1.1 HE2E 简介... 1

1.2 HE2E DevOps 实践介绍... 2

1.3 实践准备工作... 7

1.4 步骤一:管理项目规划...9

1.5 步骤二:管理项目配置... 14

1.6 步骤三:管理项目测试... 18

1.7 步骤四:开发项目代码... 27

1.8 步骤五:检查项目代码... 35

1.9 步骤六:构建应用... 39

1.10 步骤七:部署应用(弹性云服务器篇)... 53

1.11 步骤七:部署应用(云容器引擎篇)...60

1.12 步骤八:配置流水线,实现持续交付...67

1.13 释放资源... 73

1.14 附录... 77

1.14.1 构建加速... 77

1.14.2 部署失败解决方法... 79

2 企业多团队帐号划分管理实践...81

2.1 实践场景... 81

2.2 实践流程... 84

2.3 步骤一:开通并创建企业项目... 86

2.4 步骤二:创建 IAM 用户及用户组... 87

2.5 步骤三:企业项目与 IAM 用户组关联授权... 89

2.6 步骤四:购买软件开发平台... 89

2.7 步骤五:配置软件开发平台项目创建者权限... 91

2.8 步骤六:创建软件开发平台项目并添加项目成员... 92

2.9 步骤七:创建代码仓库并配置仓库权限...95

2.10 步骤八:配置软件开发平台项目角色操作权限... 96

2.11 步骤九:购买弹性云服务器并关联企业项目... 100

3 敏捷智库实践...102

3.1 如何为准备实践敏捷的团队选择 Scrum 或看板...102

3.2 如何移动迭代中需求变更后看板中的任务卡片... 105

(4)

3.3 如何在软件项目需求变更频繁的情况下做好有效的需求管理和规划... 107

3.4 如何进行需求结构化管理... 110

3.5 如何进行需求优先级管理... 112

3.6 如何避免重要需求遗漏...116

3.7 如何合理规划 Sprint 时间盒... 118

3.8 如何在软件开发团队中管理琐碎、突发性任务... 121

3.9 如何有效管理用户声音...127

3.10 如何玩转每日站会... 131

3.11 如何在项目团队人员变动频繁时对新人进行有效培养和管理...139

3.12 如何理解敏捷需求管理的四个关键词... 141

3.13 如何解决开发团队中的任务没人领取的问题... 146

(5)

1 HE2E DevOps 实践

1.1 HE2E 简介

HE2E即华为端到端的DevOps实施框架,是结合了华为30年研发经验并集合了业界先 进的实践所形成的一套可操作可落地的敏捷开发方法论,如图1-1所示。

1-1 HE2E DevOps 实施框架

规划和设计

图1-1中步骤 和 是业务(或者是客户)与技术之间进行产品规划,梳理产品整体脉 络,以及进行产品规划实施设计,并控制需求粒度与拆分的过程。

● 软件开发的本质是为了解决问题,提供用户价值的,而不仅是为了提供功能。影 响地图就是用来鉴别用户需求是什么,深层的根因是什么。

● 用户故事就是目标和需求的载体,以用户的场景来讲故事,便于在客户、业务与 开发之间进行信息的传递。在这个过程中,独立的需求条目的堆积,很容易导致 只能看到各个需求条目,不能从整个解决方案思考需求。用户故事以用户使用的 场景为主线,将大的阶段点,及其细分的活动,以树状的结构进行梳理和展现,

既可以看到独立的需求条目,又能够看到整体需求场景。

(6)

计划和跟踪、迭代开发

图1-1中步骤 ~ 是Scrum框架过程,是主要的管理实践。

● Scrum定义了一个相对完整的敏捷过程管理的框架。在软件开发平台中,将Scrum 的框架与团队日常的开发活动,很好的融合起来。主要的过程产物包括产品故事 列表、迭代故事列表、潜在可交付的产品增量、以及过程中产生的问题列表;核 心的团队活动包括Sprint计划会议、团队每日站会、Sprint演示会议、Sprint回顾 会议等会议、以及团队的日常更新活动。

● 同时,将Kanban方法与Scrum框架进行了结合,团队借鉴Kanban方法中的精益 思想,可视化价值流,发现并解决阻塞与瓶颈,加速价值流交付,并加快反馈回 路,持续进行改进。

持续交付

从图1-1中步骤 开始,进入到工程实践,也就是通常说的CI/CD过程。

● 持续交付以代码配置管理为基础,除了传统意义的代码资产安全与管控、多人并 行开发、版本与基线管理外,也体现了团队的协作与沟通。

● 代码检查(即静态扫描)、自动化的构建、各阶段的自动化测试、以及相应的自 动化部署过程,都被有机的串联在流水线上。

● 除了代码检查、构建、测试、部署等动态的阶段与活动,还有发布包的制品管 理,以及各级的环境管理,包括开发环境、测试环境、准生产环境,以及生产环 境。

● 持续交付流水线就是将整个持续交付中,都有哪些阶段,分别运行在什么环境,

每个阶段执行什么活动,准入与准出的质量门禁,以及每个阶段的输入与输出的 制品进行管理。

1.2 HE2E DevOps 实践介绍

本文档基于微服务架构的应用程序“凤凰商城”,使用软件开发平台进行全流程管 理。

“凤凰商城”示例程序简介

“凤凰商城”是一套汽车零部件配件电子商城示例代码。此套示例代码具有结构与逻 辑简单、代码量少、技术栈丰富的特点,可以帮助开发者快速了解软件开发平台的各 项特性以及使用微服务解决软件开发、测试和部署过程中可能遇到的各种问题。

● 架构与业务场景

凤凰商城示例程序架构图如图1-2所示。

(7)

1-2 凤凰商城技术架构图

示例程序由表1-1中的5个可以独立开发、测试和部署的微服务组件构成。

1-1 凤凰商城微服务组件表 微服务组件 说明

Web用户端服 务器(对应样 例代码中的

“Vote”功 能)

● 业务逻辑:用户可以通过浏览器访问此服务的WebUI。当用 户在特定商品上单击“Like”时,服务将用户所选择物品的 记录保存在Redis缓存中。

● 技术栈:Python、Flask框架。

● 应用服务器:Gunicorn。

Web管理端服 务器(对应样 例代码中的

“Result”功 能)

● 业务逻辑:用户可以通过浏览器访问此服务的WebUI,会动 态显示用户端UI上用户单击“Like”的统计数据,此数据来 自PostgreSQL数据库。

● 技术栈:Node.js、express框架。

● 应用服务器:server.js。

后台订单批处 理程序(对应 样例代码中的

“Worker”

功能)

● 业务逻辑:此服务为后台进程,会监控Redis缓存中物品记 录,并将新纪录取出并保存在PostgreSQL数据库中,以便管 理端UI可以抽取数据进行统计显示。

● 技术栈:.net core或者Java(此服务提供两种技术栈实现了 同样的功能,可根据需要修改配置选择其中一个作为运行时 进程)。

订单缓存(对 应样例代码中 的“Redis”

功能)

业务逻辑:此服务作为用户端UI服务的数据持久化服务存在。

订单数据库

(对应样例代 码中的“PostgreSQ L”功能)

业务逻辑:此服务作为管理端UI服务的数据源。

(8)

● 页面展示

– 用户端UI:默认使用“http://localhost:5000”地址,即可打开如图1-3所示 页面。

1-3 用户端 UI

– 管理端UI:默认使用“http://localhost:5001”地址,即可打开如图1-4所示

(9)

1-4 管理端 UI

● 调试、测试、打包和部署方式

示例程序全部使用Docker进行打包和部署,并使用docker-compose作为配置文 件的基本格式。

本地调试可以使用以下命令(确保在代码库的根目录中执行):

docker-compose up

“DevOps 全流程样例项目”简介

软件开发平台提供了一个样例项目“DevOps全流程样例项目”来承载“凤凰商城”示 例程序,本文档通过此样例项目讲解软件研发生命周期的操作。

“DevOps全流程样例项目”是一个Scrum类型的模板项目,项目中预置了部分软件开 发平台服务的使用模板。项目实践过程中涉及到的产品及服务如表1-2。

1-2 实践涉及产品/服务列表

服务 说明

DevCloud使用

模板 项目管理 预置项目的整体需求规划图、3个已规划并已完成 的迭代、项目的模块设置、以及若干统计报表。

代码托管 预置代码仓库phoenix-sample,存放“凤凰商 城”项目代码。

代码检查 预置4个代码检查任务,任务详情介绍请参见步骤 五:检查项目代码。

编译构建 预置5个编译构建任务,任务详情介绍请参见步骤 六:构建应用。

部署 预置3个部署任务,任务详情介绍请参见步骤七:

部署应用(弹性云服务器篇)。

(10)

服务 说明

云测 功能测试用例库,包含十余个测试用例。

流水线 预置5个流水线任务,任务详情介绍请参见步骤 八:配置流水线,实现持续交付。

CloudIDE

用于开发项目代码。

发布 用于存储通过编译构建任务生成的软件包。

其它华为云组 件和服务

统一身份认证

服务IAM 用于管理帐号。

容器镜像服务

SWR

用于存放编译构建任务中生成的Docker镜像。

弹性云服务器

ECS

用于软件包部署。

云容器引擎

CCE

用于软件包部署,与ECS部署属于两种不同的部署 方式。

实践流程

本文档将按照以下步骤介绍HE2E DevOps实践的操作流程。

1. 准备实践环境。

请参照实践准备工作完成实践前的准备,包括:

– 注册帐号并实名认证。

– 为项目成员分配帐号。

– 创建项目、添加项目成员。

2. 管理项目规划。

请参照步骤一:管理项目规划完成以下项目规划操作:

– 管理需求规划。

– 管理迭代规划。

– 监控和跟踪项目状态。

3. 管理项目配置。

请参照步骤二:管理项目配置完成以下项目设置:

– 管理项目通知。

– 定制项目工作流程。

4. 开发项目代码。

请参照步骤四:开发项目代码完成以下代码开发过程:

– 使用分支管理项目代码。

– 使用CloudIDE修改和提交代码。

– 检视代码、合并分支。

5. 检查项目代码。

(11)

– 配置并执行代码检查任务。

– 查看代码检查结果。

6. 构建应用

请参照步骤六:构建应用配置编译构建任务,包括:

– 配置并执行编译构建任务。

– 设置提交代码触发自动编译。

– 设置定时执行编译构建任务。

7. 部署应用。

软件开发平台支持部署应用至弹性云服务器或云容器引擎,请根据需要选择。

– 步骤七:部署应用(弹性云服务器篇)。

– 步骤七:部署应用(云容器引擎篇)。

8. 创建流水线

请参照步骤八:配置流水线,实现持续交付创建并配置流水线,包括:

– 配置并执行流水线。

– 配置质量门禁。

– 配置代码变更自动触发流水线。

9. 释放资源

完成实践全部操作后,请参照释放资源释放不需要的资源,包括:

– 删除项目。

– 删除集群。

1.3 实践准备工作

为了让您能更好的完成并体验HE2E项目在软件开发平台上的端到端实施,在进行具体 的任务操作前,您需要完成以下准备工作。

注册帐号并实名认证

使用软件开发平台(DevCloud)前,需要有已实名认证的华为云帐号。若已有已实名 认证的华为云帐号,请忽略此步骤。

步骤1 注册华为云帐号。

1. 访问华为云,单击右上角红色“注册”。

2. 填写相应个人信息,单击“注册”,即可完成注册。

详细操作步骤请参考注册华为帐号并开通华为云。

步骤2 完成实名认证。

1. 登录华为云,单击页面右上方帐号名,在下拉列表中选择“账号中心”。

2. 在页面左侧导航中选择“实名认证”,按照实际情况选择帐号类型(个人帐号、

企业帐号),并按照页面提示完成实名认证。

详细操作步骤请参考实名认证介绍。

----结束

(12)

为项目成员分配帐号

统一身份认证服务(IAM)是华为云提供权限管理的基础服务,通过该服务可为项目 成员创建IAM用户。若已有IAM用户,请忽略此步骤。

本样例项目涉及四个项目角色,为了方便介绍,本文档中每个角色对应一个人,如表

1-3所示。

1-3 项目角色列表

项目成员 项目角色 工作职责 样例项目中对应操

作 Sarah 产品负责人 负责产品整体规划

与产品团队的组 建。

● 注册帐号并实名

认证。

● 为项目成员分配

帐号。

● 创建项目、添加

项目成员。

● 管理需求规划。

Maggie 项目经理 负责管理项目交付

计划。 ● 管理迭代规划。

● 监控和跟踪项目

状态。

● 管理项目配置。

● 跟踪测试计划进

展。

Chris 开发人员 负责项目代码的开 发、编译、部署及 验证。

● 开发项目代码。

● 检查项目代码。

● 构建应用。

● 部署应用。

● 配置流水线。

Billy 测试人员 负责编写测试用例

并执行。 ● 创建迭代测试计

划。

● 执行测试计划。

本文档中,默认由产品负责人Sarah注册帐号,并在IAM控制台中为其他项目成员创建 IAM用户。详细操作步骤请参考创建IAM用户。

创建项目、添加项目成员

由产品负责人Sarah在软件开发平台中创建项目,并将团队成员加入项目中。

步骤1 创建项目。

(13)

2. 在弹窗中选择“DevOps全流程样例项目”,输入项目名称“凤凰商城”,单击

“确定”,完成项目创建。

步骤2 添加项目成员。

1. 进入“凤凰商城”项目,单击导航“设置 > 通用设置 > 成员管理”。

2. 单击“添加成员 > 从本企业用户”,在弹框中勾选成员Maggie、Chris、Billy,单 击“下一步”。

3. 单击每一行的“项目角色”下拉列表,为成员Maggie选择角色“项目经理”、

Chris选择角色“开发人员”、Billy选择角色“测试人员”,单击“保存”。

----结束

1.4 步骤一:管理项目规划

项目管理提供简单高效的团队协作服务,包含多项目管理、敏捷迭代、需求管理等功 能。

“凤凰商城”样例项目采用Scrum模式进行迭代开发,每个迭代周期为两周,前3个迭 代已经完成凤凰商城版本的开发,当前正在进行迭代4的规划。

按照项目规划,迭代4要完成的功能为:限时打折管理、团购活动管理。

由于业务与市场的变化,临时新增一个紧急需求:门店网络查询功能,因此迭代4的规 划中增加此功能的开发。

通过本章节,您将了解产品负责人Sarah与项目经理Maggie如何使用项目管理服务进 行项目规划的管理,包括管理需求规划与迭代规划、跟踪项目进度。

管理需求规划

软件开发平台中使用思维导图的形式管理项目需求规划,将工作项的层级结构

“Epic>Feature>Story>Task”展示出来,各层级工作项类型代表的含义如表1-4所 示。

1-4 工作项类型说明 工作项类型 说明

Epic 通常是公司重要战略举措,比如本样例项目中的“凤凰商城”,对 于公司是一个与企业生存攸关的关键战略措施。

Feature 通常是对客户有价值的功能,可以通过使用特性满足客户的需求。

比如凤凰商城中的“门店网络查询功能”,特性通常会通过多个迭 代持续交付。

Story 通常是对一个功能进行用户场景细分,并且能在一个迭代内完成。

Task 通常是用户故事的细分,准备环境、准备测试用例等都可以是完成 Story的细分任务。

由于“门店网络查询”功能是新增需求,因此产品负责人需要将此功能添加到思维导 图中。

(14)

步骤1 为新需求创建工作项。

由于门店网络查询功能是新增的需求,因此产品负责人Sarah要将它加入需求规划视图 中。

1. 进入“凤凰商城”项目,单击页面上方导航“工作 > 规划”,在页面中选择“思 维导图”,如图1-5所示,页面将显示样例项目自动创建的需求规划视图。

1-5 选择“思维导图”

2. 新建Feature“门店网络”,如图1-6所示。

a. 在Epic“凤凰商城”下方单击图标 。 b. 输入标题“门店网络”,回车保存。

1-6 新建 Feature

3. 按照同样的方式,为Feature“门店网络”添加Story“作为用户应该可以查询所有

(15)

步骤2 编辑Story。

1. 单击页面上方导航“工作 > 工作项”。

2. 在页面左上角单击“Backlog”。

3. 在列表中单击Story名称“作为用户应该可以查询所有门店网络”,参照表1-5配 置Story信息。

1-5 Story 配置

配置项 配置建议

描述信息 输入“作为用户,我想要查询所有门店,以便于挑选合适的门 店获取服务”。

优先级 选择“高”。

重要程度 选择“关键”。

4. 为了便于开发人员理解,在本地准备一个“门店网络列表”文件(本文档中为 excel表,表格内容参照表1-6)。

1-6 门店网络列表 分店名称 分店地址

北京分店 首都机场1号航站楼出发层靠右直行888米右侧。

天津分店 经济技术开发区黄海路888号。

上海分店 静安区大统路888号。

重庆分店 涪陵区桥南大道电信局西侧。

说明

表中的分店名称与分店地址均为示例,并非真实信息。

5. 返回Story编辑页面,单击“点击添加附件或拖拽文件到此处上传”,将列表文件 上传至工作项中作为附件。

6. 单击“保存”,完成Story详情的编辑。

----结束

管理迭代规划

在迭代开始前,项目经理Maggie组织召开计划会议,根据规划将本次迭代中待实现的 Story添加在迭代中,并将Story分解为Task,分配给开发人员进行开发。

通过本节,您将了解如何完成迭代4的规划。

步骤1 创建迭代。

1. 进入“凤凰商城”项目,单击页面上方导航“工作 > 迭代”。

(16)

2. 单击页面左上角“迭代”,参照表1-7在弹框中配置迭代信息,单击“确定”。

1-7 迭代信息配置 配置项 配置建议

迭代名称 输入“迭代4”。

计划时间 设置时长为2周,本文档中是从当前日期起之后的2周。

步骤2 规划迭代,如图1-7所示。

1. 单击页面左侧导航“未计划工作项”。

2. 根据规划,在列表中勾选以下三个Story。

– 作为用户应该可以查询所有门店网络。

– 作为管理员应该可以添加团购活动。

– 作为管理员应该可以添加限时打折。

3. 在页面底部单击“编辑”。

4. 单击“添加字段”。

5. 在字段名称下拉列表中选择“迭代”,并在字段值下拉列表中选择“迭代4”,单 击“保存”。

1-7 规划迭代

步骤3 分解Story。

(17)

2. 在列表中找到Story“作为用户应该可以查询所有门店网络”,单击Story名称。

3. 在页面右侧滑出窗口中选择“子工作项”页签。

4. 单击“快速新建子工作项”,输入标题“前端展示 - 添加门店网络菜单”,并选 择处理人“Chris”,单击“确定”完成,如图1-8所示。

1-8 快速新建子工作项

5. 按照同样的方式,添加Task“后台管理 - 添加门店网络管理维护模块”。

----结束

监控和跟踪项目状态

● 卡片模式跟踪工作项状态。

在每日站立会议中,可以通过电子白板报告和更新任务进度。

在迭代页面,单击图标 ,切换到卡片模式,。

如图1-9所示,在卡片模式下,可以直观的查看迭代中各工作项的当前状态,也可 以通过拖拽修改工作项状态。

1-9 卡片模式

● 迭代视图查看迭代进展。

通过迭代图表,团队可以方便的统计当前迭代的进度情况,包括需求完成情况、

迭代燃尽图、工作量等。

在迭代页面,单击工作项列表上方的图标 ,即可展开迭代进度视图,如图

1-10所示。

如果是新创建的项目,在项目创建第二天可看到报表效果。

(18)

1-10 迭代进度视图

● 仪表盘跟踪项目进展。

仪表盘提供了强大的项目进度跟进能力,包括需求进度统计、燃尽图、工作完成 度、工时统计等,可随时查看项目的当前进展。

您可以使用DevCloud中内置仪表盘报表卡片(详细使用方法请参考使用仪表 盘),也可以根据需要自定义报表。

1.5 步骤二:管理项目配置

管理项目通知

项目经理Maggie希望当任务(工作项)分配给团队成员时,该成员能够收到通知,以 便及时处理。

步骤1 进入“凤凰商城”项目,单击页面上方导航“设置 > 项目设置”。

步骤2 在左侧页面中选择“通知设置”,页面将显示样例项目中的默认配置,如图1-11所 示。

由于默认配置可以满足需求,因此本文档中暂不做配置的修改。若您有需要,直接勾 选所需选项即可,软件开发平台将自动保存您的选择。

1-11 通知设置

(19)

当项目经理完成分解Story操作后,开发人员Chris将收到以下两类通知。

● 站内信:Chris登录DevCloud后,在页面右上角单击图标,即可看到通知,如图

1-12所示。

1-12 站内信

● 邮件:若为项目成员创建IAM用户时配置了邮箱,且项目成员在个人设置中开启 了邮件通知,则将会收到如图1-13所示的邮件。

1-13 邮件通知

(20)

说明

每个成员均可以设置是否接收DevCloud发出的邮件通知。开启邮箱通知的方法为:

1. 单击页面右上角的用户名,在下拉列表中选择“个人设置”,默认跳转至“消息设置”

页面。

2. 在页面中找到“邮件通知”,勾选“开启”。

----结束

定制项目工作流程

在迭代Review会议中,团队将向产品负责人做产品演示,并出示测试报告,由产品负 责人确认Story是否完成。而当前的Story状态中没有能够显示测试已完成的状态,因此 测试人员建议增加一个状态“验收中”。

项目经理Maggie通过以下操作为Story添加状态。

步骤1 进入“凤凰商城”项目,单击页面上方导航“设置 > 项目设置”。

步骤2 在页面左侧导航中选择“公共状态设置”,页面将显示样例项目默认的工作项状态列 表,如图1-14所示。

1-14 公共状态设置

步骤3 单击“添加状态”,参照表1-8在弹框中编辑状态信息,单击“添加”保存。

1-8 状态信息配置 配置项 配置建议

状态 输入“验收中”。

状态属性 选择“进行态”。

步骤4 在页面左侧导航中选择“Story设置 > 状态与流转”,页面将显示样例项目默认的 Story状态列表。

步骤5 单击“添加已有状态”,在弹框中勾选“验收中”,单击“确定”保存,如图1-15所

(21)

1-15 添加 Story 状态

步骤6 通过拖拽将状态“验收中”的顺序至于“测试中”之后,如图1-16所示。

1-16 调整状态顺序

步骤7 验证配置结果。

1. 单击“工作 > 工作项”,在列表中单击任意Story名称,查看Story详情。

2. 单击“状态”项的值,在下拉列表中可以看到选项“验收中”,如图1-17所示。

(22)

1-17 修改 Story 状态

----结束

1.6 步骤三:管理项目测试

云测提供一站式云端测试平台,融入DevOps敏捷测试理念,有助于高效管理测试活 动,保障产品高质量交付。

通过本章节,您将了解测试人员Billy如何使用云测服务管理项目的测试周期,包括创 建与执行测试用例、跟踪测试进度等。

创建迭代测试计划

在确定迭代4中计划实现的需求(Story)后(即完成步骤一:管理项目规划),测试 人员即可在开发人员进行代码开发的同时编写测试用例。

步骤1 创建测试计划。

1. 进入“凤凰商城”项目,单击页面上方导航“测试 > 测试计划”,如图1-18所 示。

1-18 测试计划

2. 单击页面右上角“新建”,参照表1-9编辑测试计划信息。

(23)

1-9 测试计划信息配置

配置项 子配置项 配置建议

基本信息 名称 输入“迭代4”。

处理者 选择“Billy”。

计划周期 与迭代4的周期一致(迭代的配置请参考创建 迭代)。

关联迭代 选择“迭代4”。

高级配置 测试类型 勾选“功能手工测试”。

添加需求 选择迭代4中计划完成的三个Story(迭代的配 置请参考规划迭代)。

3. 单击“确定”完成测试计划的创建,页面跳转回测试计划列表,如图1-19所示。

在列表中可找到新创建的测试计划“迭代4”,状态为“新建”。

1-19 测试计划列表

步骤2 设计测试用例。

1. 在测试计划“迭代4”中,单击“设计”。

2. 展开页面左侧“需求目录”,找到Story“作为用户应该可以查询所有门店网 络”。

单击图标 ,选择“新建测试用例”,如图1-20所示。

1-20 新建测试用例

(24)

3. 输入名称“门店网络查询”,参照表1-10编辑测试步骤与预期结果,单击“保 存”。

1-10 测试步骤

测试步骤 预期结果

打开凤凰商城首 页。

页面正常显示。

单击菜单“门店 网络”。

进入“门店网络”界面,页面中存在省份筛选,页面最下 面显示推荐门店信息。

省份选择“上海 市”。

列出上海市的门店信息列表,门店信息包括(地址、电 话)。

4. 按照同样的方式,为其它两个Story创建测试用例。

5. 单击页面上方导航“测试 > 测试计划”,返回测试计划列表,如图1-21所示。

在列表中可看到测试计划“迭代4”的状态为“设计中”。

1-21 测试计划列表

----结束

执行测试计划

当开发人员完成Story的代码开发、并将应用部署到测试环境后(即完成步骤七:部署 应用(弹性云服务器篇)或步骤七:部署应用(云容器引擎篇)),可将Story的状态 设置为“已解决”,并将Story的处理人设置为测试人员,如图1-22所示。

(25)

1-22 工作项详情

此时测试人员即可开始执行Story对应的测试用例。

本节以门店网络查询功能为例,介绍如何执行测试用例、以及测试用例执行失败如何 反馈Bug信息。

步骤1 在“凤凰商城”项目中,单击页面上方导航“工作 > 迭代”。

在迭代4中找到Story“作为用户应该可以查询所有门店网络”,将Story的状态修改为

“测试中”。

步骤2 进入“测试 > 测试计划”页面,在测试计划“迭代4”中,单击“执行”。

步骤3 展开页面左侧“需求目录”,单击Story“作为用户应该可以查询所有门店网络”,页 面中将显示Story对应的测试用例。、

步骤4 在列表中单击测试用例的状态“新建”,在下拉列表中选择“测试中”,如图1-23所 示。

1-23 修改测试用例状态

步骤5 在操作列中单击图标 ,页面右侧滑出“执行”窗口。

步骤6 在测试环境中,按照测试步骤进行逐步操作(进入凤凰商城首页方法请参考验证部署 结果)。

(26)

● 执行成功,跳转至步骤步骤7继续操作。

● 执行失败,例如:执行第二步时页面跳转失败,页面显示404,如图1-24所示,

跳转至步骤步骤8继续操作。

1-24 页面显示失败

步骤7 返回测试用例执行页面,记录执行结果,如图1-25所示。

1. 在表格中,设置所有步骤的实际结果为“成功”。

2. 在表格上方,设置测试用例的结果为“成功”。

3. 勾选“同时将用例状态设为已完成”。

4. 单击页面右上角“保存”。

1-25 测试用例执行成功

此时测试用例的状态将自动变更为“完成”,如图1-26所示。跳转至步骤步骤14继续 操作。

1-26 测试用例状态自动变更

步骤8 返回测试用例执行页面,记录执行结果,如图1-27所示。

1. 在表格中,设置步骤1的实际结果为“成功”。

2. 在表格中,设置步骤2的实际结果为“失败”,并输入实际显示内容“跳转失败,

(27)

3. 在表格上方,设置测试用例的结果为“失败”。

4. 单击页面右上角“保存”。

1-27 测试用例执行失败

步骤9 单击页面右上角 ,选择“新建缺陷”,页面将跳转至新建缺陷(新建工作项)页面,

如图1-28所示。

1-28 新建缺陷

步骤10 在页面左下方的文本框的最后,可以看到自动填充缺陷的重现步骤。

参照表1-11编辑缺陷详情,如图1-29所示,单击“保存”,页面将跳转到工作项列表 页面。

1-11 缺陷详情配置 配置项 配置建议

标题 输入“门店网络页面显示404”。

处理人 选择“Chris”。

迭代 选择“迭代4”。

(28)

1-29 编辑缺陷详情

步骤11 在列表中找到在上一步中创建的缺陷,单击缺陷名称,选择“关联”页签,在“关联 用例”下可看到测试用例“门店网络查询”,如图1-30所示。

1-30 关联测试用例

步骤12 单击用例编号,可跳转到用例详情页。

选择“缺陷列表”页签,可看到一条缺陷记录,即在步骤步骤10中创建的缺陷,如图

1-31所示。

1-31 测试用例缺陷列表

(29)

步骤13 当开发人员修复缺陷后并验证成功后,参考步骤步骤7设置用例结果,并将对应的缺陷 状态设置为“已关闭”。

步骤14 执行其它测试用例。

步骤15 单击页面上方导航“测试 > 测试计划”,返回测试计划列表。

● 若全部测试用例的状态全部为“完成”,在列表中可看到测试计划“迭代4”的状 态为“完成”,如图1-32所示。

1-32 测试计划完成

● 若只有部分测试用例的状态为“完成”,则测试计划“迭代4”的状态为“测试 中”,如图1-33所示。

1-33 测试计划测试中

----结束

跟踪测试计划进展

● 查看质量报告。

通过质量报告,团队可以直观的查看测试计划的当前进展,包括用例完成率、通 过率、缺陷数量等。

在“测试 > 测试计划”页面,在测试计划“迭代4”中,单击“报告”,即可查看 此迭代质量报告,如图1-34所示。

(30)

1-34 迭代质量报告

● 自定义报表。

除了内置的质量报告,团队可以根据需要自定义统计报表。

下面以统计测试用例执行结果为例,介绍如何自定义统计报表。

a. 在“质量报告”页面,单击“点击添加报表”,在弹框中选择“自定义报 表”。

b. 参照表1-12编辑报表信息,单击“保存”。

1-12 报表配置

配置项 配置建议

报表标题 输入“测试用例执行结果统计”。

工件类型 选择“测试用例”。

分析维度 选择“结果”。

c. 页面跳转回“质量报表”,在页面最下方显示新建的报表,如图1-35所示。

1-35 自定义报表

(31)

1.7 步骤四:开发项目代码

代码托管提供基于Git的在线代码托管服务,包括代码克隆/提交、分支管理等功能。

CloudIDE是DevCloud的云端开发环境服务,向开发者提供按需配置、快速获取的工作

空间(包含编辑器和运行环境)。

由于门店网络查询功能为高优先级Story,本章节将以此功能为例进行介绍如何使用代 码托管服务进行源代码管理与开发。

本样例项目中采用分支来进行代码的开发。首先由开发人员Chris在代码仓库中创建分 支,并使用CloudIDE进行代码开发;然后开发人员Chris在代码仓库中提交分支合并请 求,项目经理Maggie评审通过后合并分支至主干。分支管理相关知识,请参考基于

Git分支的经典工作模式。

使用分支管理代码

分支是用来将特性开发并行独立出来的工具。使用分支意味着把工作从开发主线上分 离开来,以免影响开发主线。

在创建代码仓库时,会有一个默认分支“master”,即主线。为了保证凤凰商城的稳 定运行,需要有一个稳定的持续可用master。因此,项目经理建议:不直接在master 分支上进行代码开发,而是统一采用功能分支+合并请求的方式,并且每一个功能分支 的代码,必须经过团队的其他成员评审后,才可以进行合并。

步骤1 将master分支设置为受保护分支(本文档中由项目经理Maggie操作)。

1. 进入“凤凰商城”项目,单击页面上方导航“代码 > 代码托管”,页面将显示样 例项目自动创建的代码仓库“phoenix-sample”,如图1-36所示。

1-36 代码托管

2. 单击仓库名称进入代码仓库,选择“设置”页签。在左侧导航中单击“仓库管理

> 保护分支管理”。

3. 单击“新建保护分支”,参照表1-13在弹框中完成配置,单击“确定”保存,如 图1-37所示。

1-13 新建保护分支配置

配置项 配置建议

选择需要保护的分支 选择“master”。

管理者权限 选择“能提交,能合并”。

开发者权限 选择“不能提交,不能合并”。

(32)

1-37 新建保护分支

步骤2 创建功能分支(本文档中由开发者Chris操作)。

1. 进入“凤凰商城”项目,在代码托管页面中找到仓库“phoenix-sample”。

2. 单击仓库名称进入代码仓库,选择“分支”页签。

3. 单击页面右上角“新建分支”,参照输入分支信息,单击“确定”保存,如图

1-38所示。

1-14 新建分支

配置项 配置建议

分支名称 输入“Feature-Store”。

基于 选择“master”。

关联工作项 选择“作为用户应该可以查询所有门店网络”。

1-38 新建分支

----结束

(33)

使用 CloudIDE 修改和提交代码

在迭代规划时将门店查询功能分解为前端展示与后台管理两个task,本节以Task“前 端展示 - 添加门店网络菜单”为例介绍如何使用CloudIDE修改与提交代码。

步骤1 单击页面上方导航“工作 > 迭代”,在迭代4中找到Task“前端展示 - 添加门店网络菜 单”,将Task的状态修改为“进行中”。

步骤2 单击页面上方导航“代码 > 代码托管”,找到仓库“phoenix-sample”。

步骤3 将代码导入CloudIDE中。

由于目前CloudIDE只支持“华北-北京一”、“华北-北京四”、“东北-大连”三个区 域,因此请根据项目所属的区域进行导入操作。

● 项目所属区域在“华北-北京一”、“华北-北京四”、“东北-大连”之中。

a. 单击仓库名称进入代码仓库,单击页面右上角“CloudIDE”,页面跳转至 CloudIDE服务,如图1-39所示。

1-39 代码仓库

b. 等待CloudIDE加载完毕(约1~2分钟),可看到代码仓库已自动导入 CloudIDE中。

● 项目所属区域不在“华北-北京一”、“华北-北京四”、“东北-大连”之中。

a. 在代码仓库中设置HTTPS密码。

b. 在代码仓库列表中,在仓库URL列获取HTTPS地址。

c. 登录CloudIDE,在“免费体验”页签单击“All in One”下的“免费体 验”,申请60分钟的免费体验实例,如图1-40所示。

(34)

1-40 CloudIDE

d. 等待CloudIDE加载完毕,导入工程,其中Url为代码仓库HTTPS地址,User和 Password分别为HTTPS用户名与密码。

步骤4 选择分支。

1. 单击页面左下角“master”,页面上方出现下拉列表。

2. 在下拉列表中选择使用分支管理代码中创建的分支“Feature-Store”,此时页面 左下角显示“Feature-Store”,如图1-41所示。

1-41 选择分支

步骤5 修改代码。

1. 在左侧导航中找到文件“vote/templates/store-network.html”并打开,根据需 求规划添加门店地址,如图1-42所示。

<ul>

<li>北京分店:首都机场1号航站楼出发层靠右直行888米右侧</li>

<li>天津分店:经济技术开发区黄海路888号</li>

<li>上海分店:静安区大统路888号</li>

<li>重庆分店:涪陵区桥南大道电信局西侧</li>

</ul>

(35)

1-42 添加门店地址

2. 在左侧导航中找到文件“/vote/templates/index.html”并打开,在179行添加菜 单“门店网络”,如图1-43所示。

<li class="nav-item"> <a href="store-network" class="nav-link">门店网络</a> </li>

1-43 添加菜单

步骤6 提交修改至代码仓库,如图1-45所示。

1. 单击左侧边栏图标 ,打开Git功能。

2. 单击修改文件后方的图标 ,将修改内容添加进提交内容当中。

3. 输入提交信息“fix #8008614 添加门店网络菜单”。

其中“#8008614”是本文档中Task“前端展示 - 添加门店网络菜单”的编号(如 图1-44所示),实践中请修改为实际Task的编号。

(36)

1-44 工作项编号

4. 单击图标 提交本次修改。

5. 单击图标 。

6. 在下拉列表中单击“Push”,推送代码到代码仓库。

1-45 提交修改至代码仓库

步骤7 返回代码仓库,在“分支”页面中找到分支“Feature-Store”,最新提交与CloudIDE 中输入的内容相同,如图1-46所示。

(37)

1-46 分支列表

步骤8 单击页面上方导航“工作 > 迭代”,在迭代4中找到Task“前端展示 - 添加门店网络菜 单”。

● 单击Task名称,在详情页中可看到状态自动变为“已解决”。

● 选择“关联”页签,在“代码提交记录”下可看到一条记录,详情与上一步中看 到的分支提交记录相同,如图1-47所示。

1-47 代码提交记录

----结束

检视代码、合并分支

步骤1 开发人员发起合并请求。

开发人员Chris完成代码开发,确认无误后,即可发起合并请求,将功能分支合并到 master中。

1. 进入代码仓库,选择“合并请求”页签,单击“新建合并请求”。

2. 选择从“Feature-Store”到“master”,单击“下一步”。

3. 参照表1-15编辑合并请求详情,如图1-48所示。

(38)

1-15 合并请求配置 配置项 配置建议

标题 输入“添加门店网络列表”。

合并人 单击“添加合并人”,在弹框中选择“Maggie”。

评审人 单击“添加评审人”,在弹框中选择“Maggie”。

4. 单击“确定”完成合并请求的创建。

1-48 新建合并请求

步骤2 项目经理评审并完成代码合入。

本文档中,合并请求的评审人与合并人均是项目经理Maggie。因此Maggie可评审合 并请求内容,并在评审通过后完成分支合入。

1. 进入代码仓库后,选择“合并请求”页签,可找到由开发人员Chris创建的合并请 求。

2. 单击该请求,查看合并请求详情。

3. 通过页面右下角可评分、发布评论或讨论,如图1-49所示。详细操作请参考分支 合并评审。

4. 单击“合并”,将分支合入“master”。

(39)

1-49 合并请求

----结束

1.8 步骤五:检查项目代码

代码检查提供基于云端实现代码质量管理服务,支持代码静态检查(包括代码质量、

代码风格等)和安全检查,并提供缺陷的改进建议和趋势分析。

随着凤凰商城越来越庞大,线上出现的缺陷以及安全问题也越来越多,修复成本太 大;且开发人员写代码也比较随性,没有统一标准。因此项目经理建议制定一些基本 的标准,并对代码进行持续的静态代码扫描,一旦发现问题立即在迭代内修复。

通过本章节,您将了解开发人员Chris如何使用代码检查服务完成针对不同技术栈的代 码静态扫描、问题收集与修复。

预置代码检查任务简介

样例项目中预置了如表1-16所示的4个代码检查任务。

1-16 预置代码检查任务 预置代码检查任务 任务说明 phoenix-

codecheck-worker Worker功能对应的代码检查任务。

phoenix-

codecheck-result Result功能对应的代码检查任务。

(40)

预置代码检查任务 任务说明 phoenix-

codecheck-vote Vote功能对应的代码检查任务。

phoenix-

codecheck-javas 整个代码仓库对应的JavaScript代码检查任务。

说明

关于Vote、Result、Worker的说明,请参见HE2E DevOps实践介绍。

本章节以任务“phoenix-codecheck-worker”为例进行讲解。

配置并执行代码检查任务

开发人员可以对样例项目中预置的代码检查任务做一些简单的配置,增加Python语言 检查规则集,使检查更全面。

步骤1 编辑代码检查任务。

1. 进入“凤凰商城”项目,单击页面上方导航“代码 > 代码检查”,页面将显示样 例项目自动创建的4个代码检查任务。在列表中找到任务“phoenix-codecheck- worker”,如图1-50所示。

1-50 代码检查

2. 单击任务名称进入详情页,选择“设置”页签。

3. 单击页面左侧导航“规则集”,规则集中默认包含的语言是“Java”。

4. 增加Python语言检查规则集,如图1-51所示。

a. 单击图标 重新获取代码仓库语言,刷新后的列表新增了多种语言。

b. 将Python语言对应的开关打开。

c. 在弹框中单击“确定”。

(41)

1-51 增加检查规则集

步骤2 执行代码检查任务

1. 单击“开始检查”,启动代码检查任务。

2. 等待约1分钟左右,当页面提示“分支"master"最近一次检查成功!”,表示任务 执行成功。

若任务执行失败,则页面右上角将弹出报错提示,请参考代码检查常见问题排 查。

----结束

查看代码检查结果

代码检查服务提供检查结果统计,并对检查出的问题提供修改建议,可以根据修改建 议优化项目代码。

步骤1 在代码检查任务中,选择“概览”页签,即可查看任务执行结果统计,如图1-52所 示。

(42)

1-52 代码检查任务概览

说明

页面中,门禁检查结果显示为“Failed”的原因是:任务检查结果不符合门禁要求。

代码检查任务的质量门禁默认配置为:致命问题数<=0且严重问题数<=0(可在“设置 > 质量门 禁”中查看配置)。

而代码检查任务的执行结果为:6个致命问题、2个严重问题、3个一般问题。

步骤2 单击“代码问题”页签,即可看到问题列表。

可根据需要对代码进行修改。例如:

图1-53中所示的问题,是在代码里Connection没有关闭可能会引起的资源泄漏问题,

属于非常严重的问题,需要尽快修复。

单击“修改建议”,即可查看系统对此问题的修改建议。代码修改方式请参考步骤 四:开发项目代码,本节不再赘述。

(43)

1-53 代码问题

----结束

1.9 步骤六:构建应用

编译构建提供配置简单的混合语言构建平台,支持任务一键创建、配置和执行,实现 获取代码、构建、打包等活动自动化。

通过本章节,您将了解开发人员Chris如何使用编译构建服务构建环境镜像、将代码编 译打包成软件包,以及通过代码变更触发自动构建来实现持续集成。

预置编译构建任务简介

样例项目中预置了如表1-17所示的5个编译构建任务。

1-17 预置编译构建任务 预置编译构建任务 任务说明

phoenix-sample-ci 基本的编译构建任务。

(44)

预置编译构建任务 任务说明 phoenix-sample-

ci-test 测试环境对应的编译构建任务。

phoenix-sample-

ci-worker Worker功能对应的编译构建任务。

phoenix-sample-

ci-result Result功能对应的编译构建任务。

phoenix-sample-

ci-vote Vote功能对应的编译构建任务。

说明

关于Vote、Result、Worker的说明,请参见HE2E DevOps实践介绍。

本章节以任务“phoenix-sample-ci”为例进行讲解,此任务包含的步骤如表1-18所 示。

1-18 构建步骤

构建步骤 说明

制作Vote镜像并推

送到SWR仓库 通过路径工作目录“./vote”及Dockerfile路径“./

Dockerfile”找到“Dockerfile”文件,依据“Dockerfile”文 件制作并推送Vote功能镜像。

制作Result镜像并

推送到SWR仓库 通过路径工作目录“./result”及Dockerfile路径“./

Dockerfile”找到“Dockerfile”文件,依据“Dockerfile”文 件制作并推送Result功能镜像。

使用Maven安装

Worker依赖包 使用Maven安装Worker功能所需的依赖。

制作Worker镜像并

推送到SWR仓库 通过路径工作目录“./worker”及Dockerfile路径

“Dockerfile.j2”找到“Dockerfile”文件,依据

“Dockerfile”文件制作并推送Worker功能镜像。

生成Postgres and

Redis Dockerfile 通过Shell命令生成Postgres和Redis的Dockerfile文件。Redis 和Postgres分别是缓存和数据库。

制作Postgres镜像

并推送到SWR仓库 通过工作目录“.”及Dockerfile路径“./Dockerfile-postgres”

找到“Dockerfile”文件,依据“Dockerfile”文件制作并推送 Postgres镜像。

制作Redis镜像并推

送到SWR仓库 通过工作目录“.”及Dockerfile路径“./Dockerfile-redis”找 到“Dockerfile”文件,依据“Dockerfile”文件制作并推送 Redis功能镜像。

(45)

构建步骤 说明 替换Docker-

Compose部署文件 镜像版本

首先,将文件“docker-compose-standalone.yml”中的以下 参数“docker-server”、“docker-org”、“image-

version”依次用构建任务当中的参数“dockerServer”、

“dockerOrg”、“BuildNumbe”“r”进行替换,以便后续 进行ECS部署时可以拉取到正确的镜像。

然后,使用tar命令将文件“docker-compose-

standalone.yml”压缩为“docker-stack.tar.gz”,将部署所 需文件进行打包,以便于后续步骤将该文件上传归档。

替换Kubernetes部 署文件镜像版本

首先,将在目录“kompose”下,所有以“deployment”结 尾的文件中,参数“docker-server”、“docker-org”、

“image-version”依次用构建任务当中的参数

“dockerServer”、“dockerOrg”、“BuildNumber”进行 替换,以便后续进行CCE部署时可以拉取到正确的镜像。

然后,使用tar命令将整个“kompose”目录压缩为

“phoenix-sample-k8s.tar.gz”,将部署所需文件进行打包,

以便于后续步骤将该文件上传归档。

上传Kubernetes部 署文件到软件发布 库

将之前压缩好的“phoenix-sample-k8s.tar.gz”(构建包路 径)上传到软件发布库中归档,包名命名为“phoenix- sample-k8s”,实现软件包的版本管理。

上传docker- compose部署文件 到软件发布库

将之前压缩好的“docker-stack.tar.gz”(构建包路径)上传 到软件发布库中归档,包名命名为“docker-stack”,实现软 件包的版本管理。

说明

在项目部署过程中,经常遇到由于环境不一致而导致的失败,例如研发调试环境的JDK升级后,

未在环境清单中标记清楚,导致生产环境未做相应升级而引发失败。为了避免因为环境不一致导 致的各种问题,本样例项目中统一使用Docker的方式将各微服务应用与环境统一打包到镜像,

保持每个环境(开发调测环境、测试环境、QA环境、生产环境)一致。

配置 SWR 服务

本文档使用容器镜像服务SWR来保存环境镜像,需要首先配置SWR服务。

步骤1 登录容器镜像服务控制台。

请检查页面左上方的“区域”列表,请确保与编译构建任务所在区相同的区域。若区 域不同,请选择相同区域。

步骤2 单击“登录指令”,页面弹框显示登录指令,如图1-54所示。

其中,

-u之后的字符串为用户名。

-p之后的字符串为密码。

● 最后的字符串为SWR服务器地址,此地址即为后续配置编译构建任务中的参数

“dockerServer”。

(46)

1-54 docker login 指令

说明

此处生成的登录指令为临时登录指令,有效期为24小时。若需要长期有效的登录指令,请参见 获取长期有效登录指令。

步骤3 单击“创建组织”,在弹框中输入组织名称“phoenix”(或自定义,此名称全局唯 一),单击“确定”保存,如图1-55所示。

这里的组织名称,即为后续配置编译构建任务中的参数“dockerOrg”。

1-55 创建组织

----结束

配置基础依赖镜像

构建任务中使用的基础镜像源为DockerHub。由于DockerHub的限制,短时间内拉取 次数较多时将受限无法拉取,因此可能会造成构建失败。

可以采取本节介绍的方式确保基础镜像源拉取成功。

步骤1 新建构建任务。

1. 进入“凤凰商城”项目,单击页面上方导航“构建&发布 > 编译构建”。

(47)

1-19 构建任务配置

步骤 填写/选择建议

选择代码源 依次选择代码源“CodeHub”、仓库“phoenix-sample”、默 认分支“master”。

选择构建模板 选择“空白构建模板”。

3. 单击页面左上方 ,修改任务名称为“phoenix-prebuild”。

4. 添加1个“执行shell命令”步骤、5个“制作镜像并推送到SWR仓库”步骤,并将 后5个步骤的名称分别修改为:“制作Postgres镜像并推送到SWR仓库”、“制作 Redis镜像并推送到SWR仓库”、“制作Node镜像并推送到SWR仓库”、“制作 Python镜像并推送到SWR仓库”、“制作Java镜像并推送到SWR仓库”,如图

1-56所示。

1-56 添加构建步骤

步骤2 配置参数。

1. 选择“参数设置”页签,单击“新增参数”。

2. 输入名称“dockerOrg”,将在配置SWR服务创建的组织名称填入默认值,如图

1-57所示。

1-57 新增参数

步骤3 选择“构建步骤”页签,配置构建步骤。

(48)

1. 执行shell命令:删除命令框中的命令行,输入以下命令,如图1-58所示。

echo from postgres:9.4 > Dockerfile-postgres echo from redis:alpine > Dockerfile-redis echo from node:8.16-slim > Dockerfile-node echo from python:2.7-alpine > Dockerfile-python echo from java:openjdk-8-jdk-alpine > Dockerfile-java

1-58 执行 shell 命令

2. 制作Postgres镜像并推送到SWR仓库:参照表1-20完成配置,如图1-59所示。

1-20 Postgres 镜像配置

配置项 配置建议

组织 ${dockerOrg}

镜像名字 postgres 镜像标签 9.4

Dockerfile路径 ./Dockerfile-postgres

(49)

1-59 制作 Postgres 镜像并推送到 SWR 仓库

3. 制作Redis镜像并推送到SWR仓库:参照表1-21完成配置。

1-21 Redis 镜像配置

配置项 配置建议

组织 ${dockerOrg}

镜像名字 redis 镜像标签 alpine

Dockerfile路径 ./Dockerfile-redis

4. 制作Node镜像并推送到SWR仓库:参照表1-22完成配置。

1-22 Node 镜像配置

配置项 配置建议

组织 ${dockerOrg}

(50)

配置项 配置建议 镜像名字 node 镜像标签 8.16-slim

Dockerfile路径 ./Dockerfile-node

5. 制作Python镜像并推送到SWR仓库:参照表1-23完成配置。

1-23 Python 镜像配置

配置项 配置建议

组织 ${dockerOrg}

镜像名字 python 镜像标签 2.7-alpine

Dockerfile路径 ./Dockerfile-python

6. 制作Java镜像并推送到SWR仓库:参照表1-24完成配置。

1-24 Java 镜像配置

配置项 配置建议

组织 ${dockerOrg}

镜像名字 java

镜像标签 openjdk-8-jdk-alpine Dockerfile路径 ./Dockerfile-java

步骤4 生成基础镜像。

1. 单击“新建并执行”,启动编译构建任务。

任务执行耗时约1分钟,当页面中显示 时,表示任务执行成功。

若由于多次拉取镜像受限而导致任务失败,请参考构建加速设置镜像加速器。

2. 进入SWR控制台,在页面左侧导航选择“我的镜像”。

列表中可看到新增的5个镜像(java、python、node、redis、postgres),如图

1-60所示。

(51)

1-60 基础镜像

步骤5 替换基础镜像源地址。

1. 单击页面上方导航“代码 > 代码托管”,选择代码仓库“phoenix-sample”。

2. 参照表1-25编辑代码文件中的基础镜像源地址。

说明

表中的“${dockerServer}”、“${dockerOrg}”仅为参数示例。实际替换镜像源地址时,

请参照图1-61所示,将“${dockerServer}”在配置SWR服务中记录的SWR服务器地址,

“${dockerOrg}”替换为在配置SWR服务中创建的组织。

1-25 替换基础镜像源地址

路径与位置 修改前内容 修改后内容 文件“result/

Dockerfile”第1 行

node:5.11.0-slim ${dockerServer}/${dockerOrg}/node:

8.16-slim

文件“/vote/

Dockerfile”第2 行

python:2.7-

alpine ${dockerServer}/${dockerOrg}/

python:2.7-alpine

文件“/worker/

Dockerfile.j2”第 1行

java:openjdk-8-

jdk-alpine ${dockerServer}/${dockerOrg}/

java:openjdk-8-jdk-alpine

(52)

1-61 替换基础镜像源地址

----结束

配置并执行编译构建任务

步骤1 配置编译构建任务。

1. 进入“凤凰商城”项目,单击页面上方导航“构建&发布 > 编译构建”。在列表 中找到任务“phoenix-sample-ci”,如图1-62所示。

1-62 编译构建

2. 单击图标 ,在下拉列表中单击“编辑”进入编辑页面。

3. 选择“构建步骤”页签,找到步骤“生成Postgres and Redis Dockerfile”,单击 图标 ,在下拉列表中选择“禁用”,如图1-63所示。

使用同样方法将步骤“制作Postgres镜像并推送到SWR仓库”、“制作Redis镜像 并推送到SWR仓库”禁用。

(53)

1-63 禁用步骤

4. 选择“参数设置”页签,参照表1-26编辑参数值,如图1-64所示。

1-26 参数设置 参数名称 参数值 codeBranch 保持默认值。

dockerOrg 输入在配置SWR服务中创建的组织。

dockerServer 输入在配置SWR服务中记录的SWR服务器地址。

1-64 参数设置

说明

请务必确保参数“dockerOrg”、“dockerServer”的输入值是正确的,否则将导致任务失 败。

5. 单击“保存”,完成编译构建任务的编辑。页面自动跳转至任务详情页。

(54)

步骤2 执行编译构建任务。

单击“开始构建”,启动编译构建任务。

任务执行耗时约4~5分钟,当页面中显示 时,表示任务执行成功,如图1-65所示。

请记录“构建编号”对应的数字串,在后续检查发布件查看镜像详情中,镜像版本即 此数字串。

若构建失败,请仔细检查参数“dockerOrg”、“dockerServer”的设置是否正确。

1-65 构建成功

步骤3 检查发布件。

1. 单击页面上方导航“构建&发布 > 发布”,进入发布服务。

列表中可找到下图所示的两个文件夹,如图1-66所示。

1-66 软件发布库

2. 进入容器镜像服务控制台,在页面左侧导航选择“我的镜像”。

列表中可看到新增的3个镜像(worker、result、vote),镜像的所属组织为配置

SWR服务中创建的组织,版本数如图1-67所示。

(55)

1-67 我的镜像

3. 在列表中单击“vote”查看镜像详情。

在页面下方“镜像版本”页签中找到最新版本镜像,如图1-68所示,镜像版本与 最新一次构建任务的构建编号一致,构建编号r的查看方法请参考执行编译构建任 务。

1-68 vote 镜像

----结束

设置提交代码触发自动编译

通过以下配置,可实现代码变更后自动触发应用编译构建任务的执行,从而实现项目 的持续集成。

步骤1 在编译构建任务“phoenix-sample-ci”的详情页,单击页面右上角“编辑任务”。

步骤2 选择“执行计划”页签,页面默认显示“持续集成”页面。

步骤3 打开“提交代码触发执行”开关,如图1-69所示。

由于在参数设置页面为参数codeBranch配置的默认值为“master”,因此本次设置的 结果是当master有代码变更时自动触发构建。

(56)

1-69 持续集成

步骤4 验证配置结果:修改项目代码并提交至master(代码开发方式请参考步骤四:开发项 目代码,本节不再赘述),即可查看编译构建任务是否自动执行。

----结束

设置定时执行编译构建任务

为了防止问题代码进入生产环境,确保应用总是处于可部署的状态,团队建议对应用 进行持续不断的验证。

通过以下设置,可实现编译构建任务的定时执行。

步骤1 在编译构建任务“phoenix-sample-ci”的详情页,单击页面右上角“编辑任务”。

步骤2 选择“执行计划”页签,在左侧导航中单击“定时执行”。

步骤3 打开“启用定时执行”开关,根据需要选择执行日与执行时间,单击“保存”。

本文档中勾选“全选”,执行时间为“12:00”,如图1-70所示。

1-70 设置定时执行

步骤4 验证配置结果:根据配置时间查看编译构建任务是否自动执行,本节不再赘述。

----结束

(57)

1.10 步骤七:部署应用(弹性云服务器篇)

部署提供可视化、一键式部署服务,支持并行部署和流水线无缝集成,实现部署环境 标准化和部署过程自动化。

为了可以更快的、更稳定的持续地交付软件,开发团队需要一部分自助化部署服务的 能力,以减轻部分后续维护工作。

本章节介绍开发人员Chris如何将发布件部署至弹性云服务器。若您需要了解如何署至 云容器引擎,请参照步骤七:部署应用(云容器引擎篇)操作。

预置部署任务简介

样例项目中预置了如表1-27所示的3个部署任务,本章节以任务“phoenix-sample- standalone”为例进行讲解。

1-27 预置部署任务

预置部署任务 任务说明 phoenix-sample-

standalone 部署至弹性云服务器流程对应的部署任务。

phoenix-cd-cce 部署至云容器引擎流程对应的部署任务。

phoenix-sample-

test 测试环境对应的部署任务。

购买并配置弹性云服务器

本文档使用的是弹性云服务器ECS,您也可以使用自己的Linux主机(Ubuntu 16.04操 作系统)。

步骤1 购买弹性云服务器。

本文档中建议参照表1-28配置购买弹性云服务器(表中未涉及的可保留默认值)。

1-28 弹性云服务器购买配置 配置分类 配置项 配置建议

基础配置 计费模式 选择“按需付费”。

区域 最好选择部署任务所在的区域(若项目所在区域主机已售 罄,可选其他区域)。

规格 选择“通用计算型”、2核8G或以上规格。

镜像 选择“公共镜像 > Ubuntu > Ubuntu > 16.04 Server 64bit” 。

网络配置 网络 在列表中任选一个即可。

(58)

配置分类 配置项 配置建议

弹性公网IP 选择“现在购买”。

规格 选择“静态BGP”。

计费方式 选择“按宽带计费”。

高级配置 云服务器 名称

自定义(为避免帐号下购买过多个主机时不易查找的情 况,建议修改系统默认主机名称,使用易于辨认的主机 名)。

登录凭证 选择“密码”。

密码 自定义。

云备份 选择“暂不购买”。

步骤2 配置安全组规则。

样例项目的验证需要用到端口5000与5001,因此添加一条允许访问5000以及5001端 口的入方向规则。

操作步骤如下:

1. 登录弹性云服务器控制台,在列表中找到步骤步骤1中购买的弹性云服务器,单击 服务器名称。

2. 选择“安全组”页签,单击“配置规则”。

3. 选择“入方向规则”页签,单击“添加规则”,参照图1-71添加规则。

1-71 配置安全组规则

----结束

添加授信主机至项目

部署应用到弹性云服务器之前,需要先对其授信,保证部署服务能够访问弹性云服务

(59)

步骤1 创建主机组。

本文档中使用的主机组名“phoenix-hostgroup”,操作系统为“Linux”。

步骤2 向主机组中添加主机。

将已购买的弹性云服务器添加至新创建的主机组中。其中,该弹性云服务器的主机 名、IP、用户名可参考查看弹性云服务器详细信息获取,SSH端口为“22”。

步骤3 当出现如图1-72所示的提示时,表示主机添加成功。

若主机添加失败,请参考部署-常见问题-主机问题排查。

1-72 添加主机成功

----结束

向授信主机中安装依赖工具

样例程序的运行需要Docker及Docker-Compose环境,需要将依赖环境安装到授信主 机中。

步骤1 进入“凤凰商城”项目,单击页面上方导航“构建&发布 > 部署”。

步骤2 单击“新建任务”,参照表1-29配置构建任务,单击“下一步”。

1-29 部署任务配置

步骤 填写/选择建议

基本信息 输入任务名称“phoenix-predeploy”。

选择构建模板 选择“空白模板”。

步骤3 添加步骤“安装/卸载Docker”,在主机组下拉列表中选择“phoenix-hostgroup”。

若页面显示弹框“是否将后续步骤的主机组也修改为phoenix-hostgroup?”,单击

“确定”即可。

步骤4 添加步骤“执行Shell命令”,在命令框中输入以下命令,如图1-73所示。

sudo apt-get install libssl-dev libffi-dev python-dev build-essential libxml2-dev libxslt1-dev -y pip3 install six --user -U

pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple docker-compose==1.17.1

(60)

1-73 执行 shell 命令

步骤5 单击“保存并执行”,启动部署任务。

任务执行耗时约1~2分钟,当出现页面提示“部署成功”时,表示任务执行成功。

步骤6 登录弹性云服务器,执行以下命令,检测依赖工具是否安装成功。

● 查看Docker镜像版本。

docker -v

● 查看Docker-Compose版本。

docker-compose -v

当出现如图1-74所示提示时,表示安装成功。

1-74 查看 Docker 及 Docker-Compose 版本

----结束

配置并执行部署任务

部署应用到弹性云服务器之前,需要先对其授信,保证部署服务能够访问弹性云服务 器。

(61)

1. 进入“凤凰商城”项目,单击页面上方导航“构建&发布 > 部署”,在列表中找 到任务“phoenix-sample-standalone”,如图1-75所示。

1-75 部署

2. 单击图标 进入编辑页面。

3. 在“部署步骤”页签,编辑部署任务的步骤。

a. 步骤“选择部署来源”,参照表1-30设置部署来源,如图1-76所示。

1-30 部署来源配置 配置项 配置建议

选择源类型 选择“构建任务”。

主机组 选择“phoenix-hostgroup”。页面会显示弹框“是否将后 续步骤的主机组也修改为phoenix-hostgroup?”,单击

“确定”即可。

请选择构建 任务

选择“phoenix-sample-ci”。

數據

表 1-9 测试计划信息配置 配置项 子配置项 配置建议 基本信息 名称 输入“迭代4”。 处理者 选择“Billy”。 计划周期 与迭代4的周期一致(迭代的配置请参考创建 迭代)。 关联迭代 选择“迭代4”。 高级配置 测试类型 勾选“功能手工测试”。 添加需求 选择迭代4中计划完成的三个Story(迭代的配 置请参考规划迭代)。 3
表 1-15 合并请求配置 配置项 配置建议 标题 输入“添加门店网络列表”。 合并人 单击“添加合并人”,在弹框中选择“Maggie”。 评审人 单击“添加评审人”,在弹框中选择“Maggie”。 4
表 1-19 构建任务配置 步骤 填写/选择建议 选择代码源 依次选择代码源“CodeHub”、仓库“phoenix-sample”、默 认分支“master”。 选择构建模板 选择“空白构建模板”。 3
表 2-5 开发测试组成员与角色映射 团队成员 成员角色 Carl 组长(项目创建者) David 开发人员 Eric 测试人员 Frank 运维经理 本节介绍创建软件开发平台项目并添加项目成员的方法。 步骤1 登录软件开发平台,单击“新建项目”。 步骤2 选择空白项目“Scrum”,输入项目名称,设置关联企业项目(资源组)为“企业项 目A”,单击“确定”完成项目创建。 图 2-13 新建项目 步骤3 单击页面上方导航“设置 &gt; 通用设置”,在页面左侧导航中选择“成员管理”,列表 中显示项目创建者Ca

參考文獻

相關文件

步骤1 登录GCS控制台,选择左侧导航栏的“基因分析”,选择“示例流程”或“自定义流 程”。.

步骤3 在页面左上角单击 ,选择“数据库 &gt; 云数据库 RDS”。进入云数据库 RDS信息页 面。..

步骤3 在页面左上角单击 ,选择“数据库 &gt; 云数据库 GaussDB”。进入云数据库 GaussDB控制台,在左侧导航栏选择“GaussDB(for MySQL)”。1.

步骤3 在SQL预览页面中单击“选项”,对存储过程的SQL Security、确定性、数据访问等进 行配置。. 图

步骤2 在左侧导航树上,选择“管理中心 &gt; 工作空间”,进入工作空间页面。. 步骤3

步骤2

参数 配置说明 描述 API的描述。.

步骤2 在页面左上角选择“区域”,单击 ,选择“安全与合规 &gt; 企业主机安全”,进入 企业主机安全页面。. 图