操作场景
本文以 Java 应用为例,介绍如何使用 Coding 以 镜像 及 JAR/WAR 包 方式部署应用至弹性微服务。
准备工作
准备 Demo 应用
DEMO 代码由 Spring Initializr 自动生成,使用 Gradle 构建,依赖 Spring Web、Actuator 和 Prometheus 等。
在控制台完成首次部署(可选)
首次部署时,有较多的参数需要设置。这部分信息如果全部固化到 CI/CD 流程里,就会显得特别复杂。
说明:
Coding 构建计划里配置的发布方式应当与 TEM 保持一致,例如:如果弹性微服务应用为镜像部署方式,则 Coding 构建计划内也使用镜像部署。
确认 TCR 镜像信息


Coding 平台操作
创建 Coding 项目和仓库
1. 登录CODING 控制台。
2. 创建全功能 DevOps 项目。


3. 创建代码仓库。


4. 添加 remote 仓库,并推送代码。
git initgit add .git commit -m "init"git remote add origin ***/tem-test/tem-demo.gitgit push -u origin master
构建计划概览
默认
git push origin master
后,会触发构建计划。如您有特殊需求,可自行配置构建计划的触发规则。采用镜像方式部署时:


采用程序包方式部署时:


配置构建计划
1. 模板选择自定义构建计划。


2. 在流程配置中,添加构建模块(执行 Shell 脚本)。由于 DEMO 中使用的 gradle 构建,可参考以下命令:
(cd /root/.gradle && rm init.gradle)./gradlew clean build


3. 镜像部署时在流程配置中,添加镜像构建模块(执行 Shell 脚本)
"docker build -t ${DOCKER_NAMESPACE}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION} -f ${DOCKERFILE_PATH} ${DOCKER_BUILD_CONTEXT}"
您可自行在环境变量中定义相关变量:
DOCKER_NAMESPACE: 命名空间。
DOCKER_IMAGE_NAME:镜像仓库名称。
DOCKER_IMAGE_VERSION:镜像版本号,e.g. ${GIT_COMMIT}。
DOCKERFILE_PATH:dockerfile 文件位置,e.g. Dockerfile。
DOCKER_BUILD_CONTEXT:Docker 构建目录,e.g. 使用当前目录。
4. 镜像部署时在流程配置中,添加镜像推送模块(TCR 插件),腾讯云内网目前只支持 TCR(由于镜像拉取是大流量操作,对带宽要求比较高,不建议 NAT 接出公网)。您也可使用 docker login && docker push 自行完成镜像推送。


5. 在流程配置中,添加 TEM 部署模块。


TEM 部署插件配置
1. 配置通用信息与应用基本信息。


插件版本:选择最新。
SecretId/SecretKey: 腾讯云的 API 密钥。
地域:TEM 的服务地域。
应用名称:支持根据名称新建应用, 或选择存量应用部署至新环境。
环境名称:根据环境名称指定一个存量环境,若无合适环境,请前往创建环境。
2. 配置镜像:配置关联的镜像 TAG,如 commitId 等。


3. 配置 JAR / WAR 包:除了配置部署版本以外,还需要额外配置 JAR/WAR 的文件路径。


4. 部署配置。


发布触发策略:
自动触发:发布全自动执行。
全手动触发:发布不同批次间,需要用户人工确认才会继续执行。
小批量验证后自动触发:小批量验证完成后,经人工确认,后续批次自动触发。
发布批次:实例的发布批次数。
批次间等待时间:发布批次之间的间隔时间,以秒为单位,用来减少可能的服务抖动。
发布过程中保障的最小可用实例数:
-1 代表保证全量实例可用。
0 代表不保障发布过程中一定有实例可用。
n 代表发布过程中保障有n个实例可用。
部署详情
部署操作是异步的,在部署操作执行完之后,会返回访问部署详情的链接。


手工确认的分批次发布场景(可选)
1. 增加 Coding 插件(人工确认)。


2. 继续下一批(执行 Shell 脚本)。
pip install tcclitccli configure set secretId $SECRET_ID secretKey $SECRET_KEY region $REGION output jsontccli tem ResumeApplication --version 2021-07-01 --ApplicationId $APPLICATION_ID --EnvironmentId $ENVIRONMENT_ID