[CloudNative] 企业应用上云实践手记-Cloud Native Phase 2 - 云上DevOps

举报
华为云PaaS服务小智 发表于 2021/03/18 10:49:49 2021/03/18
【摘要】 作者:关耳山石整个端到端CloudNative产品落地,计划分为六个阶段展开:Cloud Native Phase 1 - 云上微服务开发端到端Cloud Native Phase 2 - 云上DevOpsCloud Native Phase 3 - 云原生应用AutoConfigCloud Native Phase 4 – 如何实现云上弹性伸缩和熔断限流Cloud Native Phase...

作者:关耳山石

整个端到端CloudNative产品落地,计划分为六个阶段展开:

Cloud Native Phase 1 - 云上微服务开发端到端

Cloud Native Phase 2 - 云上DevOps

Cloud Native Phase 3 - 云原生应用AutoConfig

Cloud Native Phase 4 – 如何实现云上弹性伸缩和熔断限流

Cloud Native Phase 5 - 云上权限管理和网络安全 

Cloud Native Phase 6 – 如何申请外网域名和SSL证书

本文为第二章即Cloud Native Phase 2 - 云上DevOps。

1. 代码管理与私有仓库

代码管理和私有仓库部分,由CodeHub负责即可。


仓库如何创建、如何拉取和提交代码,在Phase1代码仓库创建和代码提交章节已经描述过了,此处就不重复写了。

2. 编译打包和推送

2.1 本地验证打包

执行Maven命令mvn clean package进行本地打包


PS:这里采用的是spring-boot-maven-plugin,搭配repackage goal,以获得一个fat jar,也可以打小包,在Dockerfile里引入外部jar

2.2创建Dockerfile脚本

Dockerfile用来指定docker image的基础镜像,并操作将前面打包生成的jar置入,并设置docker image入口。


代码参考如下,这里是为了配合fat jar简单写的docker image

1

#引入JRE镜像

2

FROM openjdk:8-jre-alpine

3

#找到应用jar包所在位置 <--其他应用请修改这里

4

ARG JAR_FILE=vod-mgr-service/target/*.jar

5

#复制jar包至app.jar,设置执行入口

6

COPY ${JAR_FILE} app.jar

7

ENTRYPOINT ["java","-jar","/app.jar"]

8



PS:如果为了启动效率,可以将一部分依赖外置,以获得更小的docker image

3. 云上编译并构建容器镜像

3.1 创建构建任务

本地验证没问题以后,就到CloudPipeline上进行配置,首先通过构建&发布->编译构建导航到构建任务创建页面:


然后点击右上角的新建任务。

3.2 配置任务基本信息

配置任务的基本信息中,特别提示了是选X86还是鲲鹏机器,当然,也可以自己申请ECS作为自己的构建资源池,这样就不用和其他人挤在一起。


3.3 配置代码来源

选择前面创建的代码仓即可,这里还支持一些特殊的代码版本选择,根据TAG或者CommitID


3.4 配置构建步骤

这里是重头戏,首先添加组件


这里使用了两个组件,这两个组件是在同一个执行机上顺序执行的,因此可以先打包,然后直接根据打包内容做镜像推送:

Maven构建
组件拿到以后,就自带了一段代码,简单改了一下,修改为

mvn clean package -Dmaven.test.failure.ignore=true -U

意思是强制更新snapshot(因为我这里本地依赖使用的snapshot版本),并且单元测试失败的时候继续执行,因为后面开启了单元测试报告。


额外的一些配置,如果涉及到mvn push,则推送到私有仓库,同时开启了单元测试报告,也开启了缓存,这样同样的包就不用拉两次。


PS:关于maven命令的细节,可以参考官方文档

制作镜像并推送到SWR仓库
制作镜像的过程就是docker build的过程,然后docker pushSWR仓库,这里自动做了docker login的动作,所以省了不少事儿


然后这里修改Dockerfile目录为.build/Dockerfile,完成


PS:关于docker命令的细节,可以参考官方文档

补充:配置系统参数

这里有一个参数,叫${dockerImageVersion},这是在参数设置页面配置的,数据是从外部传入的。


3.5 启动构建任务

点击最下面的保存并执行,会看到前面设置的参数弹出了,这里输入一下版本号v2021.03.04,任务开始


构建完成,开始制作镜像并推送到SWR仓库


推送完成


3.6 检查SWR镜像仓库

从华为云控制台,进入SWR服务,即可看到我的自有镜像。


可以看到刚才的版本v2021.03.04已经在里面了


包还是不小的,SWR提供了老化能力,可以设置保留几天或者几个版本


4. 云上部署应用到ServiceStage

4.1 创建部署任务

编译构建容器镜像,并推送到SWR后,通过构建&发布->部署导航到部署任务创建页面:


同样在右上角创建任务

4.2 配置基本信息


4.3 配置部署步骤

这里选择ServiceStage应用部署,这里组件名称一定要和Phase1中创建的一样,组件版本${modulReleaseVersion}是个参数,后面解释

其他的配置,就是在选择容器镜像和CSE等,参考下图即可

看起来确实不错,很简单,但是选完以后会发现,好像没有设置应用环境啊,果然,部署以后负面效果就显现出来了。

4.4 启动部署任务

这里我也配置了两个参数,可以参考下图

然后点击保存并执行,填写前面的DockerImage版本v2021.03.04


然后任务就跑起来了


回到ServiceStage,一个新的default应用被创建了


组件也被新建了一个


PS:由于我的代码加了多套profile,而自动部署的时候,不会自动引入前面配置的参数,所以补充-Dspring.profiles.active=pro后,又重跑了一次


最后容器启动成功,状态OK

 

5. 配置CI/CD流水线

入口在这里,构建&发布->流水线,点击创建即可。

5.1 创建流水线

这一步不需要太多说明。


5.2 选择代码源

选择代码仓和分支即可


5.3 选择模板

这里不使用模板,从零开始,配置一条流水线。


5.4 配置流水线

第一阶段选择代码源。


第二阶段是编译构建,选择前面配置的VodMgrService-build-and-push-v1,这时候就会带出来,有参数需要填,这里填了${releaseVersion}


这个参数来自左侧的参数配置,是自增长的。

第三阶段是发布仓库,这里不做过多说明

第四阶段是部署,这里选择前面配置的VodMgrService-deploy-v1,同样有参数需要配置。


补充:推送代码后,自动触发流水线

在推送时,自动触发流水线,是在流水线创建时配置的,如果不想配置就取消触发分支设置。


当有代码push上来的时候,流水线就自动触发了


6. 代码质量扫描和门禁

6.1 创建代码检查任务

首先,在构建环节,增加一个步骤,进行代码检查


代码检查任务提供了一些规则集,这里选择华为推荐规则集进行质检


6.2 执行代码检查任务

通过代码检查,可以暴露出来一些JavaDoc问题


6.3 创建门禁任务

创建门禁任务,可以更好的保障代码质量(PS:一般放在MR提交的自动构建流水线上


点击创建,新建一个特别严格的门禁,不允许有质量问题


6.4 带门禁执行流水线

结果很快跑出来,这里报错了,流水线不往下运行了


7. MergeRequst和Committer

7.1 拉取新的分支

回到CodeHub,在代码->代码托管->分支页面,点击新建分支


本地拉取一下,checkout到新的分支


做一点修改,提交并推送


7.2 提交MR

切换到合并请求页面,点击新建合并请求


把审核人、合并人,都设置成我自己(PS:真实场景上,必须不同人,可以在仓库里配置,后面再介绍


在给出意见、评分后,可以进行合入。

补充:MR提交后自动进行代码质量检查

具体入口为:代码->代码检查->代码检查详情


8. 自动化测试

8.1 创建API自动化测试用例

入口在测试->测试设计->接口测试


新建一个测试用例


点击进入测试用例,选择测试脚本,进行API设计


8.2 创建API测试套件

API测试套件可以理解成API测试用例的集合,入口在测试执->测试套件这里


测试套件可以选择并行或者串行


8.3 流水线增加API测试

回到流水线,点击编辑,在部署阶段,增加一个任务


选择接口测试类型,即可选到前面创建的API测试套件


保存即可运行起来。

至此,一条完整的CICD流水线就完成了,里面包含了持续集成、代码质量检查、自动化测试、Code Review等动作。

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

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。