DevOps 之 Coding CI

2021-10-14 17:25:34 浏览数 (3)

CD 篇见:https://cloud.tencent.com/developer/article/1889088

CODING DevOps 包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。

本文通过 CODING DevOps 平台,实现下图所示的持续集成和持续部署功能。具体来说,当开发人员将代码提交到 git 仓库时,自动触发如下一系列操作:

  • Coding CI 拉取开发最近提交的代码,然后编译打包,构建 docker 镜像并推送到容器镜像服务 TCR;
  • 镜像上传完成后,自动触发 Coding CD 功能,将最近的镜像部署到容器服务 TKE 托管的开发/测试或生产环境。
ci-cd-flow.pngci-cd-flow.png

NOTE:本文重点在于介绍 Coding CI/CD 功能的使用,对于基于的代码仓库配置,java 下的 maven 工程配置的基础功能点请参考相关文档。

创建 DevOps 项目

在 coding 控制台 https://console.cloud.tencent.com/coding 的【前往 CODING DevOps】->【立即使用】进入工作台。

create-coding-project.pngcreate-coding-project.png

接着,在上图所示的工作台页面中,点击左侧的导航栏选择【项目】-> 【创建项目】会弹出一个项目模板窗口,选择 “DevOps 项目” 后会进入下图所示的项目基本信息填写页面。填写好项目基本信息后,一个空的 Coding DevOps 项目就创建好了。

create-coding-project-basic-info.pngcreate-coding-project-basic-info.png

创建代码仓库

作为 CI/CD 的前提,需要先创建代码仓库,管理所有项目的源码。Coding 本身提供了代码仓库功能,进入项目后,在左侧的导航栏中选择 【代码仓库】->【创建代码仓库】可新建仓库。下图展示的是 QCBM 项目的代码仓库。

create-code-base.pngcreate-code-base.png

持续集成

Coding 中的持续集成

创建构建计划

创建 CI 流水线
Step 1. 配置基本信息

进入项目后,点击左侧的【持续集成】->【构建计划】选择新建构建计划,接着会弹出“选择构建计划模板”页面,在此选择 “镜像仓库” TAB 下的 “构建镜像并推送至 TCR 个人版(容器服务-镜像仓库)”。接下来,会进入流水线的基本配置页面,这里给流水线取个名称 qcbm-ci-pipline,同时配置代码好仓库和环境变量。其中,环境变量里的 个人版镜像仓库访问凭证 需要正确配置,否则推送不了 docker 镜像。第一次配置 CI 流水线时,可按下图那样选择 一键录入 TCR 凭据并使用,Coding 会自动生成一个 TCR 的访问凭据。

ci-tcr-pingju.pngci-tcr-pingju.png

点击 “确定” 后会生成一个简单的 CI 流水线 (如下图):

basic-trc-pipline.pngbasic-trc-pipline.png

点击流水线右边的 “环境变量” 可以看到之前步骤中设置的变量取值。

ci-pipline-default-env.pngci-pipline-default-env.png

接下来,我们模板生成的基础上配置需要的流水线。

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"
ci-pipline-start.pngci-pipline-start.png

Note: TCR_REGISTRY_HOSTNAME 和 TCR_NAMESPACE_NAME 为 Step 1 中配置的环境变量。

Step 3. 检出代码

Step 1 使用模板生成的流水线已包含检出代码这一步,即为图中所示的 “2-1 检出”,这里保持不变。

Step 4. 编译打包

点击 “2-1 检出” 后的 ,为流水增加一个步骤:编译打包。对应的步骤操作,选择 “命令” -> “执行 shell 脚本”。

ci-pipline-package.pngci-pipline-package.png

在弹出来得对话框中,添加 mavne 打包命令 mvn package 如下图:

ci-pipline-package-cmd.pngci-pipline-package-cmd.png
Step 5. 构建镜像

点击流水线中的 “4-1 构建镜像”,将阶段名称该为 “构建 user-service 镜像”。接着点击“执行shell脚本”,在弹出的脚本配置窗口中删除默认的命令 echo hello CODING,然后配置如下命令:

代码语言:txt复制
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,可以将镜像和代码版本对应起来。

build-user-image-cmd.pngbuild-user-image-cmd.png

接着,点击 增加并行阶段 为 store-service / order-service / favorites-service / qcbm-gateway 各添加一个 docker 镜像构建步骤,如下图:

build-all-image-cmd.pngbuild-all-image-cmd.png
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()
}
push-user-imge.pngpush-user-imge.png

接着,点击 增加并行阶段 为 store-service / order-service / favorites-service / qcbm-gateway 各添加一个 docker 镜像推送步骤,如下图:

push-all-img.pngpush-all-img.png

至此,CI 流水线 qcbm-ci-pipline 已创建完成,该流水线具备从 拉取代码 -> 编译打包 -> 构建镜像 -> 推送镜像至TCR 的功能。点击 “保存” 按钮,保存整个流水线的配置。

为流水线 qcbm-ci-pipline 添加触发规则

上一节中创建的流水线 qcbm-ci-pipline,可以手动但不能自动执行。为了实现开发远程提交代码到代码仓库,便触发 CI 还需要添加触发规则。

点击 触发规则 tab 页,可设置 CI 流水线规则:

  • 代码源触发:勾选此项后,当有代码更新或合并时,会自动触发流水线,具体配置可按团队代码管理要求进行配置。
  • 定时触发:在 Daily Build 场景下,可配置个固定时间和周期,定期执行。
  • API 触发:Coding 对外提供了流水线触发 API,方便用户集成到自己的工具中。
  • 手动触发:此处可指定手动触发时的代码分支。
pipeline-trigger.pngpipeline-trigger.png

设置了触发规则后,保存修改,一条带有自动触发功能的 CI 流水线就创建完成了。

0 人点赞