2021-10-05 04:07:12 中国财经观察网 来源:TechWeb 阅读量:19879
单应用与环境
多应用与环境
CI持续集成
首先,准备一个代码库:
我们来梳理一下CI流水线的步骤:
由于此次实现的代码仓库类型为单一存储库,即一个存储库存放多个服务模块代码,每个子目录为一个服务模块 首先,我们的持续集成流水线需要能够正确获取,当前的commit是哪个服务的代码 确定好服务,然后下载该服务的代码,进行编译打包,单元测试,代码扫描和构建镜像等步骤
如何获取commit的服务信息这里我们使用GitLab WebHook功能和Jenkins 的job 构建触发器对接来实现
工作流程是:当我在Gitlab提交了代码,会通过GitLab webhook 触发Jenkins Scheduler 作业, 会将此次提交代码所产生的hook data数据信息以POST的方式传给Jenkins Job此时Jenkins job可以编写使用Generic Hook插件获取此次POST请求传输过来的请求体Body信息是一段JSON数据, 该job运行后编写Pipeline 解析JSON中的数据拿到所变更的服务模块信息最后触发对应服务的CI作业进行构建
CI—Scheduler 作业
CI流水线—CI作业
每个微服务创建一个CI作业,具有三个字符串参数:分支名称,commitID,项目ID。
在原始CI作业的步骤基础上,增加了一个更新环境的步骤GitOps实践会将当前的基础环境部署文件存放到一个Git仓库中我们的CI作业在完成镜像上传后,同时更新环境部署文件中的镜像标签信息
images
GitOps—CD部分
CD—Scheduler作业
Jenkinsfile pipelineagentanystagesstagestepsscriptecho'HelloWorld'echo"$WebHookData"//GitInfowebhookdata=readJSONtext:"""$WebHookData"""eventType=webhookdatacommits=webhookdatabranchName=webhookdata—"refs/heads/"projectID=webhookdatacommitID=webhookdatachangeServices=forprintln//addedfors=add.splitasListifif)—1)changeServices.add(s(0))//modifiedfor(mincommit.modified)s=m.splitasList//printlns//printlns.size//printlns(0)if//printlnchangeServices.indexOf(s(0))if)—1)changeServices.add(s(0))//removedfor(rincommit.removed)s=r.splitasListprintlnsifif)—1)changeServices.add(s(0))println(changeServices)currentBuild.description="Triggerby$eventType$changeServices"stage('DefineService')stepsscriptprintln(changeServices)//服务构建顺序控制services=('service02','service01')for(serviceinservices)if(changeServices.indexOf(service)!=—1)jobName='microservicecicd—'+service+'—service—CD'buildjob:jobName,wait:false,parameters:(string(name:'branchName',value:"$branchName")) 环境库配置webhook
CD流水线—CD作业