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

网友投稿 645 2022-05-30

整个端到端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. 编译打包和推送

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

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

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

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

COPY ${JAR_FILE} app.jar

7

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

8

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

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

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

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

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

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

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

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

Maven构建

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

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

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

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

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

制作镜像并推送到SWR仓库

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

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

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

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

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

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

推送完成

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

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

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

4. 云上部署应用到ServiceStage

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

同样在右上角创建任务

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

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

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

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

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

然后任务就跑起来了

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

组件也被新建了一个

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

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

5. 配置CI/CD流水线

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

这一步不需要太多说明。

选择代码仓和分支即可

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

第一阶段选择代码源。

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

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

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

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

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

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

6. 代码质量扫描和门禁

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

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

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

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

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

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

7. MergeRequst和Committer

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

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

做一点修改,提交并推送

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

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

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

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

8. 自动化测试

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

新建一个测试用例

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

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

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

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

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

保存即可运行起来。

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

DevOps Docker

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎样才能画出清晰明了的时序图
下一篇:linux gdb快速入门教程
相关文章