• 沒有找到結果。

编译构建提供配置简单的混合语言构建平台,支持任务一键创建、配置和执行,实现 获取代码、构建、打包等活动自动化。

通过本章节,您将了解开发人员Chris如何使用编译构建服务构建环境镜像、将代码编 译打包成软件包,以及通过代码变更触发自动构建来实现持续集成。

预置编译构建任务简介

样例项目中预置了如表1-17所示的5个编译构建任务。

1-17 预置编译构建任务 预置编译构建任务 任务说明

phoenix-sample-ci 基本的编译构建任务。

预置编译构建任务 任务说明

phoenix-sample-ci-test 测试环境对应的编译构建任务。

phoenix-sample-ci-worker Worker功能对应的编译构建任务。

phoenix-sample-ci-result Result功能对应的编译构建任务。

phoenix-sample-ci-vote Vote功能对应的编译构建任务。

说明

关于Vote、Result、Worker的说明,请参见HE2E DevOps实践介绍。

本章节以任务“phoenix-sample-ci”为例进行讲解,此任务包含的步骤如表1-18所 示。

1-18 构建步骤

构建步骤 说明

制作Vote镜像并推

送到SWR仓库 通过路径工作目录“./vote”及Dockerfile路径“./

Dockerfile”找到“Dockerfile”文件,依据“Dockerfile”文 件制作并推送Vote功能镜像。

制作Result镜像并

推送到SWR仓库 通过路径工作目录“./result”及Dockerfile路径“./

Dockerfile”找到“Dockerfile”文件,依据“Dockerfile”文 件制作并推送Result功能镜像。

使用Maven安装

Worker依赖包 使用Maven安装Worker功能所需的依赖。

制作Worker镜像并

推送到SWR仓库 通过路径工作目录“./worker”及Dockerfile路径

“Dockerfile.j2”找到“Dockerfile”文件,依据

“Dockerfile”文件制作并推送Worker功能镜像。

生成Postgres and

Redis Dockerfile 通过Shell命令生成Postgres和Redis的Dockerfile文件。Redis 和Postgres分别是缓存和数据库。

制作Postgres镜像

并推送到SWR仓库 通过工作目录“.”及Dockerfile路径“./Dockerfile-postgres”

找到“Dockerfile”文件,依据“Dockerfile”文件制作并推送 Postgres镜像。

制作Redis镜像并推

送到SWR仓库 通过工作目录“.”及Dockerfile路径“./Dockerfile-redis”找 到“Dockerfile”文件,依据“Dockerfile”文件制作并推送 Redis功能镜像。

构建步骤 说明

替换Docker-Compose部署文件 镜像版本

首先,将文件“docker-compose-standalone.yml”中的以下

参数“docker-server”、“docker-org”、“image-version”依次用构建任务当中的参数“dockerServer”、

“dockerOrg”、“BuildNumbe”“r”进行替换,以便后续 进行ECS部署时可以拉取到正确的镜像。

然后,使用tar命令将文件“docker-compose-standalone.yml”压缩为“docker-stack.tar.gz”,将部署所 需文件进行打包,以便于后续步骤将该文件上传归档。

替换Kubernetes部 署文件镜像版本

首先,将在目录“kompose”下,所有以“deployment”结 尾的文件中,参数“docker-server”、“docker-org”、

“image-version”依次用构建任务当中的参数

“dockerServer”、“dockerOrg”、“BuildNumber”进行 替换,以便后续进行CCE部署时可以拉取到正确的镜像。

然后,使用tar命令将整个“kompose”目录压缩为

“phoenix-sample-k8s.tar.gz”,将部署所需文件进行打包,

以便于后续步骤将该文件上传归档。

上传Kubernetes部 署文件到软件发布 库

将之前压缩好的“phoenix-sample-k8s.tar.gz”(构建包路 径)上传到软件发布库中归档,包名命名为“phoenix-sample-k8s”,实现软件包的版本管理。

上传docker-compose部署文件 到软件发布库

将之前压缩好的“docker-stack.tar.gz”(构建包路径)上传 到软件发布库中归档,包名命名为“docker-stack”,实现软 件包的版本管理。

说明

在项目部署过程中,经常遇到由于环境不一致而导致的失败,例如研发调试环境的JDK升级后,

未在环境清单中标记清楚,导致生产环境未做相应升级而引发失败。为了避免因为环境不一致导 致的各种问题,本样例项目中统一使用Docker的方式将各微服务应用与环境统一打包到镜像,

保持每个环境(开发调测环境、测试环境、QA环境、生产环境)一致。

配置 SWR 服务

本文档使用容器镜像服务SWR来保存环境镜像,需要首先配置SWR服务。

步骤1 登录容器镜像服务控制台。

“dockerServer”。

1-54 docker login 指令

说明

此处生成的登录指令为临时登录指令,有效期为24小时。若需要长期有效的登录指令,请参见 获取长期有效登录指令。

步骤3 单击“创建组织”,在弹框中输入组织名称“phoenix”(或自定义,此名称全局唯 一),单击“确定”保存,如图1-55所示。

这里的组织名称,即为后续配置编译构建任务中的参数“dockerOrg”。

1-55 创建组织

----结束

配置基础依赖镜像

构建任务中使用的基础镜像源为DockerHub。由于DockerHub的限制,短时间内拉取 次数较多时将受限无法拉取,因此可能会造成构建失败。

可以采取本节介绍的方式确保基础镜像源拉取成功。

步骤1 新建构建任务。

1. 进入“凤凰商城”项目,单击页面上方导航“构建&发布 > 编译构建”。

1-19 构建任务配置

步骤 填写/选择建议

选择代码源 依次选择代码源“CodeHub”、仓库“phoenix-sample”、默 认分支“master”。

选择构建模板 选择“空白构建模板”。

3. 单击页面左上方 ,修改任务名称为“phoenix-prebuild”。

4. 添加1个“执行shell命令”步骤、5个“制作镜像并推送到SWR仓库”步骤,并将 后5个步骤的名称分别修改为:“制作Postgres镜像并推送到SWR仓库”、“制作 Redis镜像并推送到SWR仓库”、“制作Node镜像并推送到SWR仓库”、“制作 Python镜像并推送到SWR仓库”、“制作Java镜像并推送到SWR仓库”,如图

1-56所示。

1-56 添加构建步骤

步骤2 配置参数。

1. 选择“参数设置”页签,单击“新增参数”。

2. 输入名称“dockerOrg”,将在配置SWR服务创建的组织名称填入默认值,如图

1-57所示。

1-57 新增参数

步骤3 选择“构建步骤”页签,配置构建步骤。

1. 执行shell命令:删除命令框中的命令行,输入以下命令,如图1-58所示。

echo from postgres:9.4 > Dockerfile-postgres echo from redis:alpine > Dockerfile-redis echo from node:8.16-slim > Dockerfile-node echo from python:2.7-alpine > Dockerfile-python echo from java:openjdk-8-jdk-alpine > Dockerfile-java

1-58 执行 shell 命令

2. 制作Postgres镜像并推送到SWR仓库:参照表1-20完成配置,如图1-59所示。

1-20 Postgres 镜像配置

配置项 配置建议

组织 ${dockerOrg}

镜像名字 postgres 镜像标签 9.4

Dockerfile路径 ./Dockerfile-postgres

1-59 制作 Postgres 镜像并推送到 SWR 仓库

3. 制作Redis镜像并推送到SWR仓库:参照表1-21完成配置。

1-21 Redis 镜像配置

配置项 配置建议

组织 ${dockerOrg}

镜像名字 redis 镜像标签 alpine

Dockerfile路径 ./Dockerfile-redis

4. 制作Node镜像并推送到SWR仓库:参照表1-22完成配置。

1-22 Node 镜像配置

配置项 配置建议

组织 ${dockerOrg}

配置项 配置建议 镜像名字 node 镜像标签 8.16-slim

Dockerfile路径 ./Dockerfile-node

5. 制作Python镜像并推送到SWR仓库:参照表1-23完成配置。

1-23 Python 镜像配置

配置项 配置建议

组织 ${dockerOrg}

镜像名字 python 镜像标签 2.7-alpine

Dockerfile路径 ./Dockerfile-python

6. 制作Java镜像并推送到SWR仓库:参照表1-24完成配置。

1-24 Java 镜像配置

配置项 配置建议

组织 ${dockerOrg}

镜像名字 java

镜像标签 openjdk-8-jdk-alpine Dockerfile路径 ./Dockerfile-java

步骤4 生成基础镜像。

1. 单击“新建并执行”,启动编译构建任务。

任务执行耗时约1分钟,当页面中显示 时,表示任务执行成功。

若由于多次拉取镜像受限而导致任务失败,请参考构建加速设置镜像加速器。

2. 进入SWR控制台,在页面左侧导航选择“我的镜像”。

列表中可看到新增的5个镜像(java、python、node、redis、postgres),如图

1-60所示。

1-60 基础镜像

步骤5 替换基础镜像源地址。

1. 单击页面上方导航“代码 > 代码托管”,选择代码仓库“phoenix-sample”。

2. 参照表1-25编辑代码文件中的基础镜像源地址。

说明

表中的“${dockerServer}”、“${dockerOrg}”仅为参数示例。实际替换镜像源地址时,

请参照图1-61所示,将“${dockerServer}”在配置SWR服务中记录的SWR服务器地址,

“${dockerOrg}”替换为在配置SWR服务中创建的组织。

1-25 替换基础镜像源地址

路径与位置 修改前内容 修改后内容 文件“result/

Dockerfile”第1 行

node:5.11.0-slim ${dockerServer}/${dockerOrg}/node:

8.16-slim

文件“/vote/

Dockerfile”第2 行

python:2.7-alpine ${dockerServer}/${dockerOrg}/

python:2.7-alpine

文件“/worker/

Dockerfile.j2”第 1行

java:openjdk-8-jdk-alpine ${dockerServer}/${dockerOrg}/

java:openjdk-8-jdk-alpine

1-61 替换基础镜像源地址

----结束

配置并执行编译构建任务

步骤1 配置编译构建任务。

1. 进入“凤凰商城”项目,单击页面上方导航“构建&发布 > 编译构建”。在列表 中找到任务“phoenix-sample-ci”,如图1-62所示。

1-62 编译构建

2. 单击图标 ,在下拉列表中单击“编辑”进入编辑页面。

3. 选择“构建步骤”页签,找到步骤“生成Postgres and Redis Dockerfile”,单击 图标 ,在下拉列表中选择“禁用”,如图1-63所示。

使用同样方法将步骤“制作Postgres镜像并推送到SWR仓库”、“制作Redis镜像 并推送到SWR仓库”禁用。

1-63 禁用步骤

4. 选择“参数设置”页签,参照表1-26编辑参数值,如图1-64所示。

1-26 参数设置 参数名称 参数值 codeBranch 保持默认值。

dockerOrg 输入在配置SWR服务中创建的组织。

dockerServer 输入在配置SWR服务中记录的SWR服务器地址。

1-64 参数设置

说明

请务必确保参数“dockerOrg”、“dockerServer”的输入值是正确的,否则将导致任务失 败。

5. 单击“保存”,完成编译构建任务的编辑。页面自动跳转至任务详情页。

步骤2 执行编译构建任务。

单击“开始构建”,启动编译构建任务。

任务执行耗时约4~5分钟,当页面中显示 时,表示任务执行成功,如图1-65所示。

请记录“构建编号”对应的数字串,在后续检查发布件查看镜像详情中,镜像版本即 此数字串。

若构建失败,请仔细检查参数“dockerOrg”、“dockerServer”的设置是否正确。

1-65 构建成功

步骤3 检查发布件。

1. 单击页面上方导航“构建&发布 > 发布”,进入发布服务。

列表中可找到下图所示的两个文件夹,如图1-66所示。

1-66 软件发布库

2. 进入容器镜像服务控制台,在页面左侧导航选择“我的镜像”。

列表中可看到新增的3个镜像(worker、result、vote),镜像的所属组织为配置

SWR服务中创建的组织,版本数如图1-67所示。

1-67 我的镜像

3. 在列表中单击“vote”查看镜像详情。

在页面下方“镜像版本”页签中找到最新版本镜像,如图1-68所示,镜像版本与 最新一次构建任务的构建编号一致,构建编号r的查看方法请参考执行编译构建任 务。

1-68 vote 镜像

----结束

设置提交代码触发自动编译

通过以下配置,可实现代码变更后自动触发应用编译构建任务的执行,从而实现项目 的持续集成。

步骤1 在编译构建任务“phoenix-sample-ci”的详情页,单击页面右上角“编辑任务”。

步骤2 选择“执行计划”页签,页面默认显示“持续集成”页面。

步骤3 打开“提交代码触发执行”开关,如图1-69所示。

由于在参数设置页面为参数codeBranch配置的默认值为“master”,因此本次设置的 结果是当master有代码变更时自动触发构建。

1-69 持续集成

步骤4 验证配置结果:修改项目代码并提交至master(代码开发方式请参考步骤四:开发项

步骤4 验证配置结果:修改项目代码并提交至master(代码开发方式请参考步骤四:开发项