wps表中以0开头的数字(001)将直接变成1
625
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
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小时内删除侵权内容。