云社区 > 云博客 > 博客详情
云社区 > 云博客 > 博客详情

Java on 华为云DevCloud

DevCloud 发表于 2018-06-25 09:23:5706-25 09:23
DevCloud 发表于 2018-06-25 09:23:5706-25 09:23
0
1

【摘要】 本文主要帮助想要或者正在将Java项目迁移到华为云软件开发服务DevCloud中的用户,将本地Java项目迁移到云上,实现云端DevOps。

文章目的

本文主要帮助想要或者正在将Java项目迁移到华为云软件开发服务DevCloud中的用户,将本地Java项目迁移到云上,实现云端DevOps

相关名词解释

2.1 Java

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式健壮性安全性、平台的独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序Web应用程序分布式系统嵌入式系统应用程序等(摘自百度百科)

2.2 华为云软件开发服务DevCloud

华为云软件开发服务DevCloud(以下简称DevCloud)是集华为近30年研发实践,前沿研发理念,先进研发工具为一体的一站式云端DevOps平台,面向开发者提供包括项目管理,代码托管,流水线,代码检查,编译构建,测试管理,移动应用测试,部署,发布,CloudIDE,研发协同等基础功能的研发工具服务。覆盖软件开发全生命周期,支持多种主流研发场景,让软件开发更高效。

项目管理

DevCloud提供基于Scrum和看板协作两种模式的项目管理服务,用户可以在项目管理中进行项目规划,工作项跟踪;同时,项目管理包括文档,wiki,仪表盘等功能。仪表盘功能可以自定义多种图标,便于对项目进行实时监控,及时掌握项目进度,提前管控风险。

代码

代码功能包括:代码仓库(基于Git的版本控制系统),代码检查两个功能。

1.代码仓库

在开发工作过程中,通过DevCloud的代码仓库,创建一个云端代码仓库,然后通过本地Git客户端将代码与云端仓库同步。

2.代码检查

DevCloud代码检查功能集华为三十多年研发经验,定义了1700多条检查规则,规则内容小到编码规范,大到防止SQL注入,防止内存泄漏等问题,帮助开发者优化编程习惯,减少代码风险。

构建&发布

构建&发布功能包括:编译(打包),发布(构建包管理),部署,流水线。

1.编译

DevCloud提供了多种开发语言环境的云上编译构建功能,本项目将会选择Java语言常用的Maven构建软件包。

2.发布

DevCloud的发布功能是针对构建包的管理功能。发布功能提供了:对构建生成的软件包进行管理的软件发布仓库,对第三方插件进行管理的Maven私有依赖仓和开源镜像仓。前者帮助实现了持续部署,提高了部署效率,方便对项目版本包管理;后两者极大程度提升了构建效率。

3.部署

Devcloud提供了Shell脚本部署,Docker部署,有常用部署模板的Ansible部署。简单的Java项目可以选择Ansible部署中的Tomcat模板,从发布库或本地获取软件包,部署到有公网IP的主机上。

4.流水线

流水线功能可以将代码检查,构建,接口测试,部署等功能串联起来,形成可视化、可定制的自动(可定时自动执行)交付流水线,帮助企业缩短交付周期,提升交付效率。

测试

测试功能包括:测试管理,移动应用测试,接口测试。

1. 测试管理

测试管理提供了测试用例管理,测试用例可以关联工作项,起到双向追溯。还可以根据测试结果生成测试报告,鞭策开发人员提升开发质量。

2. 移动应用测试

华为和第三方TestBird合作,提供了移动应用测试。移动应用测试提供了当下千种主流机型,供软件开发人员进行手机应用的兼容性测试。

3. 接口测试

接口测试向有RestfulAPI的程序提供自动化的测试。

2.3 DevOps

DevOpsDevelopOperations的缩写,它通过使用特定化工具,虚拟云计算等技术,将开发、运维运营和质量保障QA这三种角色打通,融合,提高研发和运维的沟通效率,提高产品质量

有研究显示,在那些引入了DevOps概念的企业中,开发与运营人员在设计、构建、测试工作中,共同在内部应用上进行协作之后,可以将产品开发的效率提升20%

使用DevCloud的前提条件

3.1 华为云账号

华为云官网地址http://www.huaweicloud.com

点击右上角注册注册华为云账号,账号适用于所有华为云产品。

 图片1.png

 图片2.png

3.2 Git客户端

使用Git托管代码,在本地需要安装Git客户端,与云上代码仓库建立连接

Git具有类似SVN功能,是个开源的分布式版本控制系统,可以统一管理项目中的代码,可用于敏捷高效地处理任何或小或大的项目。

Git的具体使用方法会在本文第五节“DevCloud如何助力Java开发”的第三小节“构建云端仓库”中具体阐述。

概览

4.1 示例项目概述

1.项目名称:小幺鸡在线文档管理系统

2.项目简介:小幺鸡在线文档管理,支持在线测试,支持json,txt,xml,html,js,,WebSocket

3.开发语言:Java

4.项目类型:Java Maven基于SSMSpring+SpringMVC+Mybatis)框架的web项目

5.开发环境Windows JDK1.8; IDE:Eclipse

6.部署环境:Linux JDK1.8 + MySQL

7.部署方式Ansible部署

图片3.png 

典型B/S架构系统,用户通过互联网访问系统,客户端处理用户操作及数据库读取或写入数据。

4.2 通用客户场景

图片4.png 

目前软件开发过程中可以使用一些免费或者付费的工具帮助我们更高效的进行软件开发,存在以下缺点:

Ø 每个项目参与者必须同时使用多种工具导致工作的遗漏和不能及时的更新

Ø 安装类型的工具会面临版本更新升级的问题。

Ø 运维人员在系统发布时环境搭建难度大,准备工作比较多,容易出现纰漏导致系统不能顺利发布。

Ø 开发、测试、运维之间相互隔离,发现问题不能及时定位。

DevCloud如何助力Java开发

DevCloud功能强大,提供了多种工具辅助开发,如果时间充裕,请仔细阅读以下内容,如果只想完成项目迁移,请重点了解以下章节:5.3创建云端仓库,5.5.1构建,5.5.3部署。   

5.1 新建项目

创建项目 

华为云官网首页---产品---软件开发服务进入DevCloud首页;点击立即体验,即可进入DevCloud系统中。

 图片5.png

点击右上角新建按钮新建项目

 图片6.png

输入项目名称,选择开发流程,输入项目描述,点击“新建”按钮即完成了一个项目的创建。

开发流程Scrum流程看板协作Scrum流程是标准的敏捷开发流程,看板协作类似于瀑布模型,只包含工作项的开发流程(工作没有EpicFeatureBacklog层级,只有工作项),本文Demo选择的是Scrum流程。

 图片7.png

 

Scrum

Scrum 是一个用于开发和维护复杂产品的框架 ,是一个增量的、迭代的开发过程。在这个框架中,整个开发过程由若干个短的周期组成,这个周期称为迭代,每个迭代的建议长度是24(互联网产品研发可以使用1周的迭代)。在Scrum中,使用产品Backlog来管理产品的需求,产品Backlog是一个按照商业价值排序的需求列表,列表条目的体现形式通常为用户故事

5.2 项目管理

点击进入新创建的项目,左侧菜单栏展示DevCloud为开发者提供的各服务,项目管理功能包括仪表盘工作Wiki文档四大功能。因为项目管理是以产品Backlog为核心,所以默认展示Backlog工作项界面。

图片8.png


项目规划

在项目规划里思维导图的形式项目的需求细化将工作项分配给具体人员,并配置工作项基本信息。

图片9.png 


工作项

DevCloud中,引用了多种粒度来记录产品的需求:EpicFeatureStory/Bug

EpicFeatureBacklog(Backlog中包含StoryBug)可以查看和操作不同层级的工作项(修改状态,指定迭代等)

图片10.png 

 

Epic(史诗)

描述旨在帮助最终用户解决商业技术问题的一系列活动或者一个工作流通常可以Epic理解为一个大的用户故事Epic交付周期可以是一个或者多个迭代。Epic通常从客户交付层面出发,周期以月为单位。

Feature(功能,特性)

定义或者描述了整个产品的某一个交付功能,Feature从产品功能角度出发,周期以一或以上个迭代为单位

Story/BugBacklog记录)

StoryBug相对于Feature来说,粒度更小,小到具体某一个细节功能或某一行代码,Story/Bug通常是需要在某一个迭代内完成,Story/Bug是团队层面。

通过定义Feature或者修改已有的Feature来实现EpicFeature团队尝试并完成Story来最终交付Epic

通常产品使用过程中遇到的小需求或者Bug都可以填写到Backlog中,指定对应的迭代和处理人,要求处理人按时完成任务。

 

仪表盘

仪表盘界面可以通过多种常用图表,对项目进度和问题进行实时监控,及时掌握项目进度,提前管控风险。

图片11.png

Story/Bug

Story/Bug图表可以很清晰的看到当前迭代任务的完成情况,图表中的数字可以直接跳转到对应的Backlog页面。

路标日历

路标日历图表可以很好地了解每个迭代的周期以及每个迭代的工作项完成度(按百分比计算)。

进度

进度图表可以按不同维度:StoryBugTask按数量统计项目进度。

燃尽图

燃尽图Y轴代表的是剩余工作量,X轴代表的是迭代中的工作日。燃尽图有两条曲线,分别显示了Story的总数和未完成数可以很好地反映工作量完成状况。

文档,Wiki

“文档”里可以上传下载项目相关的文档作为知识的沉淀,在Wiki可以添加项目相关的词条便于产品知识学习。

图片12.png

《人月神话》曾经指出,向已经启动的项目中增加人力投入常常会适得其反,因为新人了解项目的成本是很高的,将已有的经验或方法(包括基本的开发环境配置等等)总结归纳,放到Wiki或文档中,让新人直接通过Wiki了解项目,其他人员正常工作,就能节省培养新人的投入。

5.3 创建云端仓库

DevCloud提供基于Git的代码仓库,仓库提供可视化的管理界面,Java开发者可将自己的Java工程代码上传到此仓库中进行代码托管。

云端代码托管方便了代码的协同工作,处于两地的研发人员可以共同使用同一个代码仓库。同时,将代码交给DevCloud,华为会为代码提供更安全的云端环境,节省了本地服务器等成本开支。

介于Git功能强大,DevCloud中关于Git方面的操作包括配置秘钥,提交代码等操作请参考以下链接:Git代码托管请参考Git on 华为云DevCloud

上方链接提到的方法使用了很多命令行,如果觉得不方便可以下载TortoiseGitTortoiseGit是基于Git做成可视化工具的小程序,使用方法参TortoiseGit on 华为云DevCloud。(由于产品升级,关于“添加SSH秘钥”/“设置HTTP秘钥”的操作,请移步 服务---代码仓库 中进行设置)。

图片13.png 

代码仓库

代码仓库首页点击“新建仓库”,创建代码仓库。代码仓库支持文件在线编辑,统计提交记录,代码贡献度统计等多种功能,满足各类开发者的需求。

图片14.png

代码仓库在创建的时候有多种选项:普通新建、模板新建、导入仓库(建议选择普通新建);还可以根据自己的需求,选择仓库是否公开:私有仓库安全性好,非授权人员无法访问;公有仓库将代码变成开源的,放到代码广场(下文有具体的功能描述)中进行分享,其他用户可以借鉴。

图片15.png 

普通新建

普通新建是建立一个只有readme文件的空仓库。

模板新建

模板新建是创建一个具有简单Demo的代码仓库,Demo的语言类型可选,包括JavaCC#等。

导入仓库

导入仓库可以通过复制仓库地址,将其他仓库的代码导入到当前项目中。

仓库的是否公开也可以在代码仓库的“设置”---“基本设置”中进行切换。

图片16.png

 

示例项目代码下载(代码广场)

上文提到,DevCloud提供了“代码广场”功能。代码广场是一个面向开源软件的代码托管平台,它托管了海量的开源Git仓库,这些Git仓库对开发者都是开放的,开发者可以fork/clone代码至自己项目,并做引用。

本文采用的代码广场中的一个开源Java代码大家可以通过以下方式进行下载使用。进入DevCloud代码广场,搜索框中输入xiaoyaoji点击搜索。

图片17.png 

搜索出相应代码后,可以直接通过fork功能,将代码fork到自己新建的项目中。

图片18.png 

也可以通过点击项目,进入项目的代码仓库,将代码下载到本地,

图片19.png 

代码同步

通过Git客户端将代码上传到DevCloud代码仓库。再将代码提交、推送到云端仓库,详细操作参见本节开头提到的Git使用方法或TortoiseGit使用方法推送成功后,可以到DevCloud中查看项目的代码仓库。

代码仓库功能非常强大,除了常规的推送代码之外,还提供了提交记录查看,分支管理(对应GitBranch),分支合并(对应GitMerge)等Git基本功能。

图片20.png

很多公司有代码安全方面的顾虑,DevCloud的代码仓库提供了“IP白名单”功能,研发人员只能在指定IP或指定IP范围内才可以访问代码仓库,避免通过公网访问仓库产生的代码信息安全问题。

 图片21.png

仓库统计功能统计了代码提交次数,可以看到各研发人员的贡献度。

图片22.png

5.4 代码检查

产品交付后出现问题造成的损失远比交付前大很多,DevCloud提供了代码检查功能。代码检查功能是基于华为30年研发经验,收集了1700多条编码问题,帮助研发人员规范代码书写,减少代码漏洞。研发人员推送代码之后,即可进行云端代码检查,极大程度减少项目上线后发生问题的可能性。

代码检查可在线进行代码静态检查、代码架构检查、代码安全检查、编码问题检查、质量评分、代码缺陷改进趋势分析,辅助用户管控代码质量

代码质量评估操作指

产品介绍 基础操作 进阶操作

 

代码检查

代码服务下的“代码检查”中可以看到项目下的代码检查任务,点击新建任务进入

到新建代码检查任务界面。

图片23.png 

 

输入任务名称,选择需要检查的代码仓库地址、分支(建议选择master分支);

图片24.png 

根据自己的实际需求,选择想要检查的问题,比如:本文演示的是Java项目,那么选择Java致命问题规则集和Java严重问题规则集。

图片25.png 

选择完成后,点击下方确定按钮进入到新创建的检查任务中,点击“启动任务”

图片26.png 

 

任务检查进度显示

图片27.png 


代码质量评估报告

检查任务执行结束,生成详细的代码质量报告,评估代码质量。

图片28.png 

代码检查结果会分成三个维度(配置任务时勾选“包安全”的话是四个维度):

源码问题

源码问题是最基础的检查结果,会根据配置的规则检查问题,SQL注入,内存泄漏等问题都会出现在这里,针对检查结果,DevCloud会给出具体的修改建议(下文有介绍)。

圈复杂度

圈复杂度就是嵌套层数,嵌套层数太多,项目运行消耗资源,开发人员可根据检查结果,酌情处理。

代码重复率

同一段代码复用过多,当这段代码出现问题的时候,造成的损失是会翻倍的,找出重复代码进行修改,避免代码重复,从而避免出现上述问题。


代码修改建议

在问题列表中查看代码检查结果,针对每个问题都会给出详细的问题描述和修改建议,修改完毕后,再次执行代码检查任务,查看任务执行结果,形成代码质量改进闭环。

图片29.png

5.5 持续集成&持续部署CI&CD

持续集成&持续部署是指高频度的将代码进行编译,然后部署到生产或其他环境。这样做的优势在于能够尽早的发现问题并解决问题,CI&CD也是促成DevOps极其重要的一个因素。

华为云DevCloud的代码检查,编译构建,部署等功能都支持自动化定时执行,为研发人员提供了可靠的CI&CD功能。

5.5.1 编译构建

Java项目需要将源码编译成目标软件包,才能进行项目的部署。DevCloud提供了云端编译构建功能,将程序打包,进行软件组件的归档发布管理,同时方便下个阶段的部署环节直接调取,实现自动化部署。

编译构建操作南:

产品介绍 基础操作 进阶操作 


编译

点击“新建任务”,进入新建任务界面,按步骤配置构建任务。

图片30.png 

基本信息步骤,设置任务名称,点击下一步,进入代码配置步骤

图片31.png 

代码配置步骤选择需要构建的代码仓库以及分支(建议选择Master分支)之后点击下一步进入构建配置步骤

图片32.png 

“构建配置”步骤编译构建环境“构建工具”根据实际情况填写,DevCloud提供了多种语言的构建工具:JavaMavenC#MSBuildAndroidGradle等。本文是Java项目,故选择Maven。选择Maven之后,继续点击下一步,进入构建执行配置。

图片33.png

“构建执行配置” 步骤,可以通过“添加结果步骤”对构建生成的软件包进行操作,常见操作有:“上传软件包到软件发布库”和“归档”。

上传软件包到软件发布库:

上传软件包到软件发布库将软件包放到DevCloud的提供的软件发布库进行保存,方便构建包的版本管理以及其他操作的调用。

归档

选择了归档,可以通过构建历史下载构建包。

“归档”中“用于归档的文件”和“上传软件包到软件发布库”中的“构建包路径”是指在本地IDE中,通过Maven编译出war包的路径(包含文件名)。“上传软件包到软件发布库”中的“包名”是软件发布库中的存档名称,可以随意写,但最好保持某种规范,便于管理。

图片34.png 


定时构建

“构建计划配置”中可以设置任务的执行计划,可以使构建任务指定时间执行。点击保存完成构建任务的创建。

 图片35.png

 图片36.png


构建日志

点击进入构建任务,点击开始构建按钮,即执行构建,构建过程中,工作空间会显示构建日志检查构建过程和归档发布过程是否出现问题。成功后可以点击下载构建包下载本次构建生成的软件包

图片37.png 


构建历史

点击构建历史可以查看历史构建详情如果之前在“构建执行配置”填写了归档,则支持下载历史构建软件

图片38.png 

5.5.2 发布

DevCloud的发布功能是针对构建包的管理功能。发布功能提供了:对构建生成的软件包进行管理的软件发布仓库,对第三方插件进行管理的Maven私有依赖仓和开源镜像仓。前者帮助实现了持续部署,提高了部署效率,方便对项目版本包管理;后两者极大程度提升了构建效率。

spacer.gif 

发布服务操作指

产品介绍 基础操作 进阶操作

 

版本管理和下载

软件发布库

由于在构建任务里配置了上传到发布仓库步骤每次构建结束后,就会在发布仓库里新增一个本次构建生成的软件包实现软件版本的自动管理。配置部署任务时可以在这里选择要部署的软件包文件了,也支持将构建的软件包下载本地

图片39.png 

开源镜像站

有的项目需要下载国外构建包,可以引用开源镜像仓,从华为的镜像仓库下载构建包,提高了构建效率,缩短了构建时间。

图片40.png 

Maven私有依赖仓

对于自己本地配置的一些第三方包或自己编写的Jar包,可以上传到Maven私有依赖仓,通过将软件包的depedency标签添加到项目的pom.xml文件中,实现项目和Maven私有依赖仓关联。

图片41.png 

5.5.3 spacer.gif部署

部署服务操作指

产品介绍 基础操作 进阶操作 Ansible部署playbook编写指导


当代码构建打包成功并归档到发布仓库后,可以进行部署工作。部署任务一共分为四部分,分别是主机授权,编写部署脚本,任务配置,和执行部署。

图片42.png 

主机授信

将一台有公网ip的主机授信到DevCloud平台里,用于部署网站“部署”服务首页点击主机管理进入主机管理界面。

图片43.png 

主机管理界面展示已经授信到项目的主机列表,点击添加主机进入添加授信主机界面。

图片44.png 

添加授信主机界面,填入要添加的主机信息,点击“添加”即将一个主机添加到项目里,本项目需要部署在Linux主机,然后用户名密码的形式进行授信。

图片45.png 


任务配置

主机授信完毕,就可以创建部署任务了,在部署服务首页,点击新建任务进入新建部署任务页面。

图片46.png 

部署功能提供了三种部署方式:Shell部署,容器部署,Ansible部署。

Shell部署

Shell部署可以通过编写Shell脚本或填写已有Shell脚本路径方式,启动服务器上的脚本,达到部署目的。

容器部署

容器部署需要向华为云ServiceStage集群上传镜像,在部署时候启动镜像,进行容器部署。

Ansible部署

Ansible部署提供了多种部署模板,部署时根据模板,下载相关资源,完成部署。

本项目是简单的Java项目,需要部署到Tomcat服务器上,可以选择“Ansible部署”;配置主机处选择之前配置好的主机,在软件包路径可以从发布仓库选择软件包,或者从本地上传软件包到发布仓库。在应用验证处根据实际情况填写验证路径,Linux主机通常端口是8080,后缀是构建包名(不包含文件类型,如:http:192.168.0.0:8080/xiaoyaoji)。

 图片47.png

 图片48.png


执行部署

点击进入具体的部署任务点击开始部署工作空间会显示部署进度。

图片49.png 

部署完成后就可以点击“应用验证路径”访问网站了

图片50.png 

5.5.4 流水线

流水线是DevOps的核心,也是DevOps最直观的体现,流水线把开发、测试、运维等多项功能无缝衔接到一起,打破运维开发人员的沟通墙,让研发人员把工作重点放在开发和迭代升级上,通过CI&CD提高了交付效率。

流水线操作指南:

基础操作  进阶操作

 

图片51.png 

将需要的任务添加进流水线中,选择定时或手动执行流水线,即可完成流水线配置。

图片52.png 

5.5.5 测试

spacer.gif测试管理(TestMan)是面向软件开发者提供的一体化测试解决方案,覆盖测试需求、用例管理、测试任务管理、缺陷管理,多维度评估产品质量,高效管理测试活动,保障产品高质量交付。


测试管理操作指导:

基础操作 进阶操作


用例管理

用例管理页面可以对已经创建的测试用例进行管理可以将用例关联到具体的需求或者针对需求设计测试用例,提Bug就能够直接将Bug指给需求负责人,实现需求-用例-缺陷的双向追溯。

图片53.png


测试总览

包括需求覆盖率、缺陷、用例通过率、用例完成率、缺陷分布、用例进展、需求测试进度、成员用例进展和缺陷等。

图片54.png 

以上即为DevCloud能够助力Java开发的内容,各位可根据实际情况,选择使用某些功能或全部使用配置流水线,相信DevCloud一定会帮助大家提高研发效率。

 

FAQ

6.1 华为云社区DevCloud产品答疑FAQ           http://forum.huaweicloud.com/forum-642-1.html

附录

7.1 华为云软件开发服务DevCloud)用户指南

1、视频教程

【新手训练营几分钟教你掌握各个服务基本操作

项目管理  代码仓库  流水线  代码检查  编译构建  测试管理  部署  发布

【云途进阶课场景化教学,从实战中玩转软件开发服务

Web应用场景——开发一套EHR系统:规划阶段  开发阶段  交付阶段

App应用场景——打造一款趣味交友App规划阶段  开发阶段  交付阶段

迁移上云秘籍

1SVN迁移GIT最强指南

2为何选择Git版本控制系统

3、Git的工作模式

4如何将本地代码提交到托管平台



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享文章到微博
分享文章到朋友圈

相关文章


评论(0)


0/1000
评论

登录后可评论,请 登录注册

评论
温馨提示

您确认删除评论吗?

确定
取消
温馨提示

您确认删除评论吗?

删除操作无法恢复,请谨慎操作。

确定
取消
温馨提示

您确认删除博客吗?

确定
取消

确认删除

您确认删除博客吗?

确认删除

您确认删除评论吗?

温馨提示

登录超时或用户已下线,请重新登录!!!

确定
取消