1 概述

1.1 背景介绍

DevOps 是一种结合开发(Development)和运维(Operations)的软件开发和运维实践,旨在通过自动化、协作和持续改进,缩短开发周期,提高交付效率和质量。

软件开发生产线(CodeArts)是华为云提供的一站式 DevOps 平台,即开即用,随时随地在云端交付软件全生命周期,覆盖需求下发、代码提交、代码检查、代码编译、验证、部署、发布,打通软件交付的完整路径,提供软件研发流程的端到端支持。CodeArts 作为华为云的 DevOps 平台,为企业提供了一套完整的工具链和实践方法,帮助企业快速实现 DevOps 落地,提升软件开发和运维的效率与质量。通过 CodeArts,企业可以构建自动化、协作化和持续改进的 DevOps 文化,适应快速变化的市场需求。

1.2 适用对象

  • 企业
  • 个人开发者
  • 高校学生

1.3 案例时间

本案例总时长预计60分钟。

1.4 案例流程

3a6a7552f08ff877b23dacc72aea52ec.png

说明:

① 登录开发者空间-云主机;
② 打开浏览器访问CodeArts,购买CodeArts,在CodeArts项目中,进行需求管理操作,创建代码仓库及分支;
③ CodeArts IDE安装CodeArts Check代码检查插件,代码开发,代码检查;
④ 提交、推送代码,合并代码分支。

1.5 资源总览

本案例预计花费总计0元。

资源名称 规格 单价(元) 时长(分钟)
开发者空间-云主机 鲲鹏通用计算增强型 kC2 | 4vCPUs | 8G | Ubuntu 免费 60
软件开发生产线 CodeArts 免费体验版 免费 60

体验完整案例请点这里👉️👉️👉️团队协作:从需求到代码实现指南

2 实践准备

2.1 购买CodeArts

进入华为开发者空间工作台界面,点击打开云主机 > 进入桌面连接云主机。
如果还没有领取云主机进入工作台界面后点击配置云主机,选择Ubuntu操作系统。
image.png

本案例中,使用华为云CodeArts作为云上开发平台,完成需求管理、代码托管、代码检查,所以首先需要购买CodeArts,如果您已购买CodeArts,请直接进行步骤2.2 创建用户。

在开发者空间-云主机桌面,双击软件开发生产线

3d3e7e3c49d0142a61d92af4d3e722a1.png

单击立即使用按钮,根据提示登录华为云账号,勾选同意服务声明,单击立即开通

abdb8efb8e85dbb511bebea381f92dc6.png

提示恭喜!您已开通成功,即完成了CodeArts服务的购买。

470738b0cc516f808a4bc5ae00d45378.png

2.2 创建用户

软件开发是多个角色共同协作,确保软件开发项目的顺利进行和高质量交付,所以我们需要先创建几个用户。

登录统一身份认证服务IAM,单击创建用户,依次创建三个用户MaggieChrisBilly,自定义设置用户初始密码,其他配置项保持默认,单击下一步

7233381fb6a40c6fda8f7e42706cb866.png

加入用户组(可选)页,不做配置,直接单击创建用户

操作确认弹窗中,按照提示填写验证码等信息,单击确定完成用户创建。

28ccfbcc795a92c04ba17c3ffb31dbe6.png

2.3 创建CodeArts项目

返回CodeArts首页,单击立即使用

c89890261025e2dabe33f597ccb5a63b.png

CodeArts预置了多个项目模板可供选择,每个模板适用不同的场景:

  • IPD-系统设备类:涉及到软硬件配套开发,产品需求相对固定,开发周期长,一般为6~9个月,多采用瀑布模式。适用于嵌入式软件场景,比如通信设备、汽车、家电、消费电子等涉及到软硬件复杂产品。
  • IPD-独立软件类:软件可独立部署销售,多采用敏捷开发,客户需求变化频繁、快速规划、敏捷发布,交付周期一般为2~3个月甚至更快。适用于IT应用及平台类软件,比如ERP软件、CRM、数据库、网管软件等。
  • IPD-自运营软件/云服务类:以微服务为作战单元小步快跑,快速规划持续交付,发布频繁,交付周期23周左右甚至35天,多采用DevOps敏捷模式。适用于云服务开发,微服务架构,自运营软件场景居多,比如公有云、互联网应用软件。
  • Scrum:增量迭代式的业界敏捷研发流程,通过迭代计划会议、每日站会、迭代回顾、验收会议来进行简单高效的研发管理。适用于迭代式增量的软件开发。
  • 看板:轻量、灵活和简单的团队协作方法,它将项目的需求、缺陷和任务可视。适用于任何行业、任何团队、任何角色高效协作。

ae6958114232d7da5838d7033286f968.png

CodeArts也提供了一些示例项目,供开发者熟悉使用:

11a22177345d8a38a93d75ac619619a2.png

根据模板的介绍,本项目以Scrum模式进行迭代开发,每一周为一个周期,进行项目进度模拟,下面演示创建项目的具体操作。

未创建过项目的用户,直接在项目模板中选择Scrum,单击选用。

5be8abf4ae702e68ee2656a5316fd600.png

创建过项目的用户,单击新建项目。选择Scrum项目模板,单击选用,进入新建项目页。

b68801b31b9a464d57a091c2d6b47969.png

自定义输入项目名称(如:Test_Item_Demo),其它保持默认即可,单击确定

0dc21525b7779be34286c284d03506d6.png

自动进入到新建的项目下。

918f7cf81768d2f445dcb9c3466fab09.png

2.4 添加项目成员

由产品负责人项目创建者为团队成员创建账号,并将成员添加到项目中;

  • 本案例项目涉及一些项目角色(部分可缺省,这里仅为示例),为了方便介绍,本文档中每个角色对应一个人(可以是同一人),具体如下表:
项目成员 项目角色
Sarah 产品负责人(项目创建者)
Maggie 项目经理
Chris 开发人员
Billy 测试人员

进入创建CodeArts项目,单击导航 设置 > 成员管理 页面。

成员视图页签中,单击添加成员 > 从本账号导入IAM用户

image.png

在弹框中勾选步骤2.2中创建的3个用户,单击下一步。

ecd0620b1e37ad4fab6271a581303291.png

为每一个成员在项目角色下拉列表中,依次为Maggie设置项目经理角色,Chris设置开发人员角色,Billy设置测试人员角色,单击保存

976d890c9703090e174950b62411afff.png

最终添加完成所有项目成员并分配完成角色后,可在成员管理列表查看分配结果呈现。

273374b928ebfb752db6260363105dbe.png

3 项目管理与规划

CodeArts需求管理服务为团队协作提供高效支持,其功能涵盖多项目管理、敏捷迭代及任务管理等。

通过本章节,您将了解产品负责人和项目经理如何管理需求规划、迭代规划以及跟踪项目进度。

3.1 管理需求规划

使用思维导图的形式管理项目需求规划,将工作项的层级结构Epic > Feature > Story > Task展示出来,各层级工作项类型代表的含义如下表所示;

工作项类型 说明
Epic 通常是公司重要战略举措,对于公司是一个与企业生存攸关的关键战略措施。
Feature 通常是对客户有价值的功能,特性通常会通过多个迭代持续交付。
Story 通常是对一个功能进行用户场景细分,并且能在一个迭代内完成。
Task 通常是用户故事的细分,准备环境、准备测试用例等都可以是完成Story的细分任务。

在规划页面依次创建EpicFeatureStoryTask,并填补相应的内容(全部内容自定义填充,本案例不提供详细内容填充);

进入创建CodeArts项目,单击导航 工作项 > 需求管理,选择规划页签,单击规划 > 思维导图规划

1d8c0798aedfc258a2b2700b96916805.png

自定义输入思维导图规划名称(如:Test_Item_Project_Plan),单击确定

bacbd80bd9459dbadd5b06c5fea08e03.png

自动进入创建的规划,单击Epic列的+号,自定义输入Epic名称(如:演示项目Demo),单击回车键,完成Epic创建。

aa17a07e40b4892af896d26120158d27.png

创建完成后展示如下:

0909e49a307c598551c9ada00e7f04b5.png

鼠标悬浮在Epic卡片上,单击插入子节点图标844b422d0988918eb9df6e6add46586a.png,进行Feature创建。

d088f496922e0fd4f1a0c39839c0c280.png

自行填写Feature内容(以下图片内容仅为示例),创建结果如下:

f9c757975be4071c0b03f6746e4aec60.png

同样,鼠标悬浮在Feature卡片上,单击插入子节点图标844b422d0988918eb9df6e6add46586a.png,进行Story创建,并自行填写Story内容(以下图片内容仅为示例),创建结果如下:

2d1997eaf0de90ca900fe95dc55855ad.png

同样,鼠标悬浮在Story卡片上,单击插入子节点图标844b422d0988918eb9df6e6add46586a.png,进行Task创建,并自行填写Task内容(以下图片内容仅为示例),创建结果如下:

7aa8e6c2440bb0bd223665c10999850b.png

各节点均可通过单击标题,进入工作项详细页面,可进行描述信息补充,状态及负责人设置,附件上传和属性等内容修改,修改完毕后保存即可生效。

3.2 管理迭代规划

CodeArts支持敏捷迭代开发、迭代计划和时间线清晰展现项目进展。本章节进行迭代创建、规划及任务分配。

创建迭代:进入创建CodeArts项目,单击导航 工作项 > 需求管理,选择迭代页签,单击af3936c417e7a03d9a03217823ec5d5e.png图标,自定义输入迭代名称(如:迭代一、迭代二、迭代三、迭代四),设置计划时间,单击确定,完成迭代创建。

1a85b027338ffddf7869d3d4305fd785.png

规划迭代:单击未规划的工作项,在待规划列表中,勾选Story/Task,在页面底部单击编辑 > 添加字段,在字段名称下拉列表中选择迭代,并在字段值下拉列表中选择对应的迭代,单击保存

b41b622cd6ece106e0d2e1846adde9fb.png

在迭代列表中,单击刚刚规划的迭代,可以看到上面选择的Story/Task已经纳入这个迭代。

506571cdac30828f848ed100fc21a935.png

分配Story/Task:在迭代列表中,单击某个迭代,选择一个或多个Story/ Task,参照规划迭代的方式,将字段处理人的值设置为对应责任人(如可分配给开发人员Chris),单击保存

3e400c46519eca481b991375792912d3.png

3.3 跟踪项目状态

迭代开始后,项目组通过每日站立会议沟通每个工作项的当前进展,并对工作项状态进行更新,使用卡片模式能够简单直观的查看迭代中各工作项的当前状态。

每日跟踪任务进度:在迭代列表中,单击某个已规划的迭代,切换到卡片模式,页面展示如下:

b83d4e9ba22c3a11818f12415797fc43.png

页面中展示了处于每种状态下的工作项卡片,根据项目实际进展在每日站立会议上,通过拖拽工作项卡片即可更新其状态,操作效果如下:

e4a72a6a2f717c2cbe5a46df195c326a.png

迭代评审会议验收迭代成果:在到达迭代的预计结束时间前,项目组召开迭代评审会议,展示当前迭代的工作成果,迭代页面提供了迭代统计图表,团队可以方便的统计当前迭代的进度情况,包括需求完成情况、迭代燃尽图、工作量等。进入迭代页面,单击统计,即可展开迭代进度视图,页面效果展示如下(刚创建的项目和迭代不方便展示,这里用历史迭代做展示):

14889e2f477f2ad267cee5f47316bff3.png

4 代码开发

CodeArts代码托管服务提供基于Git的在线代码管理服务,包括代码克隆/提交、分支管理等功能,本案例中模拟简单的代码开发全流程,包括:代码仓库和分支的创建、代码克隆、开发、检查、提交及合并代码分支。

4.1 下载样例代码

本案例为没有准备项目代码的开发者准备了样例代码。

在开发者空间-云主机桌面,单击鼠标右键,选择Open Terminal Here,打开终端,输入以下命令,回车执行。

git clone https://gitcode.com/CaseDeveloper/E-Commerce-Java.git

执行完成后,代码会下载到桌面的E-Commerce-Java文件夹下。

30a443ab67823964b10bc0ef573e2154.png

4.2 创建仓库管理代码

进入创建CodeArts项目,单击导航代码 > 代码托管 > 新建仓库。

d903866c251097d6b270a97f20af0ef8.png

新建方式选择普通新建,单击下一步

4985158781620b891580287156c3d3a9.png

自定义输入代码仓库名称(如:Test-Demo-Vue),其他配置项保持默认,单击确定

5a02915bdaad4c91d9b4daad681607a1.png

创建完成如下图所示:

a410e777b620e48cd0367870c76a1b22.png

4.3 修改、检查、提交代码

代码托管服务支持多分支开发,并为分支合并建立了可配置的审核规则,当一个开发者发起一次分支合并请求时,仓库成员都可以参与到评审中,让更多的人参与到代码审视中,以确保合并代码的正确性。

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

4.3-1.png

4.3.1 创建代码分支

仓库创建完成,会有一个默认分支master,即主线。一般而言,作为项目经理应该建议:不直接在master分支上进行代码开发,而是统一采用功能分支+合并请求的方式,并且每一个功能分支的代码,必须经过团队的其他成员评审后,才可以进行合并。本案例以实现商品详情需求为例展开演示操作。

单击导航工作项 > 需求管理,选择迭代页签,本次迭代待实现Task,并将Task的状态修改为进行中

dac341edd8d888f8f14aad7cdf71bf0d.png

单击导航代码 > 代码托管,找到刚刚创建的仓库,单击仓库名称进入代码仓库,选择代码页签,选择分支页签,单击新建分支

c8a57486c0e831aa9fd2183186b94575.png

自定义输入分支名称(如:product_details),关联工作项选择待实现的Task,单击确定,完成分支创建。

3797616a3813e2c593c8baf51fb35fe1.png

4.3.2 代码克隆

在代码仓库中,单击克隆/下载,选择用HTTPS克隆,复制代码仓库的HTTPS地址。

1838070e0e3c95cc12ac97d925f5be20.png

在开发者空间-云主机桌面,单击鼠标右键,选择Open Terminal Here,打开终端,输入以下命令,回车执行。

git clone 仓库地址

说明:仓库地址用上面复制代码仓库的HTTPS地址。

e7e4306720ed5ab18a3937646f48a822.png

克隆代码需要用户鉴权,在提示输入Username和Password时,输入云端仓库的HTTPS用户名和密码(获取和设置方式见下图),执行完成后桌面上会出现与仓库名称相同的文件夹,证明代码已经克隆成功。

b8d69db00d33536ea0ab59dabdbad111.png

4.3.3 代码开发

在开发者空间-云主机桌面,双击打开CodeArts IDE for Java,单击打开工程,选择桌面上克隆的仓库文件夹,单击打开

fccb29a18ac063059c93e66f3bba2192.png

打开工程后,单击左下角master,在弹窗中选择步骤4.2中创建的product_details分支。

440f44992d8f2ae0c99fd63209201650.png

开发者可在该分支上开发及调试代码,考虑案例时间及可操作性,我们直接将步骤4.1中下载的代码,复制到仓库文件夹下,模拟代码已经开发完成。

1984c63655158dc78ac7d91169783a29.png

4.3.4 代码检查

在CodeArts IDE for Java中,单击右上角的扩展,打开插件市场,输入CodeArts Check搜索出CodeArts Check代码检查插件,单击安装

11c9a41c3bea0ca6586df87157f0200e.png

安装成功后,单击立即重载进行插件刷新。

60ec6263e9dc352cdd93464d97e331cd.png

项目重载需要3~5分钟,请耐心等待,待项目重载完成,即完成代码检查插件的安装。CodeArts IDE for Java中单击鼠标右键,选择CodeArts Check项目检查进行代码检查。

cf0ef9c3fd85fe72852e74ce5947932a.png

检查完毕后,单击IDE下方的CodeArts Check菜单(若您的IDE下方找不到该菜单,是被折叠了,单击…即可找到),可以看到整体的项目的代码质量情况。

a6786997c70591fb1c4ec26fefdd028e.png

开发者根据代码检查结果和项目实际情况修改代码,本案例中不继续展开。

4.3.5 代码提交

项目代码在本地检查及调试无误后,即可将代码提交到云端仓库中。

在CodeArts IDE for Java中打开终端,执行以下命令,设置你的git身份标识。

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

说明:命令中的Your Name和you@example.com用自己的用户名和邮箱替换。

48660d61bffb2f6fe0a72967ba633b9d.png

单击左侧菜单栏的源代码管理,按如下操作提交和推送代码:

  • 保存更改到本地仓库:单击变化列表上的23b1e7e458eb6a36ff581e14744072c3.png号图标;
  • 提交代码:在提交信息中填写本次代码实现的功能(本案例用实现商品详情API交互联调功能举例,提交信息填写fix #工作项编号),单击Commit
  • 推送代码:单击上方更多操作图标5178638c786bbb9e9042e06c743b766a.png,选择Pull,Push > Push

dddbb838e80886854aef6445cca13103.png

根据弹框提示输入步骤4.3.2克隆代码时使用的HTTPS用户名和密码,并回车。

进入创建CodeArts项目,单击导航代码 > 代码托管,找到4.2中创建的仓库,单击仓库名称进入代码仓库,选择代码页签,分支切换到product_details分支,可以看到代码已经提交到云端仓库的product_details分支。

a782038425b6364a41a572a59f795c1c.png

单击导航工作项 > 需求管理,选择迭代页签,可以看到在代码提交信息时关联的工作项(这里是商品详情API交互联调),状态已经由进行中变为已解决

99b014ed219ef76b0b32bf09af8ecbf3.png

4.3.6 合并代码分支

开发人员发起合并请求,将product_details分支代码合入maser分支。

在代码仓库中,单击合并请求 > 新建合并请求

0b8042d43d1b4c0c80834cc5c5cf096f.png

源分支选择product_details,目标分支选择maser,单击下一步。

5c5f0fad662e58471f7984a4319bdacc.png

填写标题(可自动带入),根据实际人员分工编辑选择合并人检视人审核人,本案例中为了方便可以选择自己,单击新建合并请求。如果源分支不再使用,可同时勾选合并后删除分支

a0673e7ec4c0cd9877d5f0d7fa058da3.png

本案例中,合并请求的评审人与合并人均是自己。因此可评审合并请求内容,并在评审通过后完成分支合入。

进入代码仓库后,选择合并请求页签,可找到由开发人员创建的合并请求,单击该请求,查看合并请求详情。

8fe20383db5618a73f5cb7c493824b97.png

依次单击检视门禁中的检视通过,审核门禁中的通过,并可在页面中留下评审意见,最后单击右上角的合入

ae91a9084e155783d1bd99655d89909f.png

待合入完成,切换到代码页签,可以看到product_details分支中的代码已经合入master主分支。

5301e46997e719f7f73b0235e868b541.png

至此,团队协作:从需求到代码实现指南全部完成。

4.4 反馈改进建议

如您在案例实操过程中遇到问题或有改进建议,可以到论坛帖评论区反馈即可,我们会及时响应处理,谢谢!

Logo

欢迎大家加入成都城市开发者社区,“和我在成都的街头走一走”,让我们一起携手,汇聚IT技术潮流,共建社区文明生态!

更多推荐