[CloudNative] 企业应用上云实践手记-Cloud Native Phase 2 - 云上DevOps
作者:关耳山石
整个端到端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 push
到SWR仓库,这里自动做了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等动作。
- 点赞
- 收藏
- 关注作者
评论(0)