CD 篇见:https://cloud.tencent.com/developer/article/1889088
CODING DevOps 包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
本文通过 CODING DevOps 平台,实现下图所示的持续集成和持续部署功能。具体来说,当开发人员将代码提交到 git 仓库时,自动触发如下一系列操作:
- Coding CI 拉取开发最近提交的代码,然后编译打包,构建 docker 镜像并推送到容器镜像服务 TCR;
- 镜像上传完成后,自动触发 Coding CD 功能,将最近的镜像部署到容器服务 TKE 托管的开发/测试或生产环境。
NOTE:本文重点在于介绍 Coding CI/CD 功能的使用,对于基于的代码仓库配置,java 下的 maven 工程配置的基础功能点请参考相关文档。
创建 DevOps 项目
在 coding 控制台 https://console.cloud.tencent.com/coding 的【前往 CODING DevOps】->【立即使用】进入工作台。
接着,在上图所示的工作台页面中,点击左侧的导航栏选择【项目】-> 【创建项目】会弹出一个项目模板窗口,选择 “DevOps 项目” 后会进入下图所示的项目基本信息填写页面。填写好项目基本信息后,一个空的 Coding DevOps 项目就创建好了。
创建代码仓库
作为 CI/CD 的前提,需要先创建代码仓库,管理所有项目的源码。Coding 本身提供了代码仓库功能,进入项目后,在左侧的导航栏中选择 【代码仓库】->【创建代码仓库】可新建仓库。下图展示的是 QCBM 项目的代码仓库。
持续集成
Coding 中的持续集成
创建构建计划
创建 CI 流水线
Step 1. 配置基本信息
进入项目后,点击左侧的【持续集成】->【构建计划】选择新建构建计划,接着会弹出“选择构建计划模板”页面,在此选择 “镜像仓库” TAB 下的 “构建镜像并推送至 TCR 个人版(容器服务-镜像仓库)”。接下来,会进入流水线的基本配置页面,这里给流水线取个名称 qcbm-ci-pipline,同时配置代码好仓库和环境变量。其中,环境变量里的 个人版镜像仓库访问凭证 需要正确配置,否则推送不了 docker 镜像。第一次配置 CI 流水线时,可按下图那样选择 一键录入 TCR 凭据并使用,Coding 会自动生成一个 TCR 的访问凭据。
点击 “确定” 后会生成一个简单的 CI 流水线 (如下图):
点击流水线右边的 “环境变量” 可以看到之前步骤中设置的变量取值。
接下来,我们模板生成的基础上配置需要的流水线。
Step 2. 流水线基础配置
点击流水线 qcbm-ci-pipline 图形界面中的 开始,在弹出的“基础配置”对话框中可修改配置,这里我们添加了 QCBM 后台微服务的 docker 镜像名作为环境变量,如下:
- USER_SERVICE_IMAGE_NAME = "${TCR_REGISTRY_HOSTNAME}/${TCR_NAMESPACE_NAME}/user-service"
- STORE_SERVICE_IMAGE_NAME = "${TCR_REGISTRY_HOSTNAME}/${TCR_NAMESPACE_NAME}/store-service"
- ORDER_SERVICE_IMAGE_NAME = "${TCR_REGISTRY_HOSTNAME}/${TCR_NAMESPACE_NAME}/order-service"
- FAVORITES_SERVICE_IMAGE_NAME = "${TCR_REGISTRY_HOSTNAME}/${TCR_NAMESPACE_NAME}/favorites-service"
- QCBM_GATEWAY_IMAGE_NAME = "${TCR_REGISTRY_HOSTNAME}/${TCR_NAMESPACE_NAME}/qcbm-gateway"
Note: TCR_REGISTRY_HOSTNAME 和 TCR_NAMESPACE_NAME 为 Step 1 中配置的环境变量。
Step 3. 检出代码
Step 1 使用模板生成的流水线已包含检出代码这一步,即为图中所示的 “2-1 检出”,这里保持不变。
Step 4. 编译打包
点击 “2-1 检出” 后的 号,为流水增加一个步骤:编译打包。对应的步骤操作,选择 “命令” -> “执行 shell 脚本”。
在弹出来得对话框中,添加 mavne 打包命令 mvn package
如下图:
Step 5. 构建镜像
点击流水线中的 “4-1 构建镜像”,将阶段名称该为 “构建 user-service 镜像”。接着点击“执行shell脚本”,在弹出的脚本配置窗口中删除默认的命令 echo hello CODING
,然后配置如下命令:
cd user-service
docker build -t ${USER_SERVICE_IMAGE_NAME}:${GIT_COMMIT_SHORT} .
_NOTE:_user-service 为 QCBM 后台工程 qcbm-backend 的子工程,且构建 user-service 镜像的 Dockerfile 位于 user-service 子工程目录下,所以先进入目录 user-service,然后才能执行镜像构建命令。
USER_SERVICE_IMAGE_NAME
为 Step 2 中添加的环境变量。GIT_COMMIT_SHORT
为短版的 git commit ID,这里采用 commit ID 作为 tag,可以将镜像和代码版本对应起来。
接着,点击 增加并行阶段 为 store-service / order-service / favorites-service / qcbm-gateway 各添加一个 docker 镜像构建步骤,如下图:
Step 6. 推送镜像到 TCR
点击流水线中的 “5-1 推送镜像”,将阶段名称该为 “推送 user-service 镜像”。接着点击“执行 Pipeline 脚本”,将脚本修改成如下,保持此处的镜像名及 tag 和 Step 5 中构建镜像时所用的名称和 tag 一致。
代码语言:txt复制docker.withRegistry("https://${DOCKER_REGISTRY_HOSTNAME}", "${DOCKER_REGISTRY_CREDENTIAL}") {
docker.image("${USER_SERVICE_IMAGE_NAME}:${GIT_COMMIT_SHORT}").push()
}
接着,点击 增加并行阶段 为 store-service / order-service / favorites-service / qcbm-gateway 各添加一个 docker 镜像推送步骤,如下图:
至此,CI 流水线 qcbm-ci-pipline 已创建完成,该流水线具备从 拉取代码 -> 编译打包 -> 构建镜像 -> 推送镜像至TCR 的功能。点击 “保存” 按钮,保存整个流水线的配置。
为流水线 qcbm-ci-pipline 添加触发规则
上一节中创建的流水线 qcbm-ci-pipline,可以手动但不能自动执行。为了实现开发远程提交代码到代码仓库,便触发 CI 还需要添加触发规则。
点击 触发规则 tab 页,可设置 CI 流水线规则:
- 代码源触发:勾选此项后,当有代码更新或合并时,会自动触发流水线,具体配置可按团队代码管理要求进行配置。
- 定时触发:在 Daily Build 场景下,可配置个固定时间和周期,定期执行。
- API 触发:Coding 对外提供了流水线触发 API,方便用户集成到自己的工具中。
- 手动触发:此处可指定手动触发时的代码分支。
设置了触发规则后,保存修改,一条带有自动触发功能的 CI 流水线就创建完成了。