编译构建服务提供配置简单的混合语言构建平台,支持任务一键创建、配置和执行,实现获取代码、构建、打包等活动自动化。
通过本章节,您将了解开发人员Chris如何构建环境镜像、将代码编译打包成软件包,以及通过代码变更触发自动构建来实现持续集成。
预置任务简介
样例项目中预置了如下表所示的5个任务。
预置任务
预置任务 | 任务说明 |
---|---|
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的说明,请参见方案架构
本章节以任务“phoenix-sample-ci”为例进行讲解,此任务包含的步骤如下表所示。
构建步骤
构建步骤 | 说明 |
---|---|
制作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文件。 |
制作Postgres镜像并推送到SWR仓库 | 依据“生成Postgres and Redis Dockerfile”所生成的Dockerfile文件制作并推送Postgres镜像,并将镜像推送到容器镜像服务。 |
制作Redis镜像并推送到SWR仓库 | 依据“生成Postgres and Redis Dockerfile”所生成的Dockerfile文件制作并推送Redis镜像,并将镜像推送到容器镜像服务。 |
替换Docker-Compose部署文件镜像版本 | 为了将镜像部署到ECS时,能够可以拉取到正确的镜像,使用shell命令进行完成以下操作。首先,使用sed命令,依次将文件“docker-compose-standalone.yml”中的参数替换为构建任务的参数“dockerServer”、“dockerOrg”、“BUILDNUMBER”进行替换。然后,使用tar命令,将文件“docker-compose-standalone.yml”压缩为“docker-stack.tar.gz”,将部署所需文件进行打包,以便于后续步骤将该文件上传归档。 |
替换Kubernetes部署文件镜像版本 | 为了将镜像部署到CCE时,能够可以拉取到正确的镜像,使用shell命令进行完成以下操作。首先,使用sed命令,将目录“kompose”下所有以“deployment”结尾的文件中的参数“docker-server”、“docker-org”,替换为构建任务的参数“dockerServer”、“dockerOrg”。然后,使用sed命令,将“result-deployment.yaml”、“vote-deployment.yaml”、“worker-deployment.yaml”三个文件中的参数“image-version”用构建任务参数“BUILDNUMBER”进行替换。 |
上传Kubernetes部署文件到软件发布库 | 将所有“.yaml”文件上传到软件发布库中归档。 |
上传docker-compose部署文件到软件发布库 | 将压缩好的“docker-stack.tar.gz”(构建包路径)上传到软件发布库中归档,包名命名为“docker-stack”,实现软件包的版本管理。 |
说明在项目部署过程中,经常遇到由于环境不一致而导致的失败,例如研发调试环境的JDK升级后,未在环境清单中标记清楚,导致生产环境未做相应升级而引发失败。为了避免因为环境不一致导致的各种问题,本样例项目中统一使用Docker的方式将各微服务应用与环境统一打包到镜像,保持每个环境(开发调测环境、测试环境、QA环境、生产环境)一致。
配置SWR服务
本文档使用SWR来保存环境镜像,需要首先配置SWR服务。
步骤 1 登录SWR服务控制台。
步骤 2 单击“登录指令”,页面弹框显示登录指令。
其中,
- u之后的字符串为用户名。
- p之后的字符串为密码。
- 最后的字符串为SWR服务器地址,此地址即为后续配置并执行任务中的参数“dockerServer”。
步骤 2 单击“创建组织”,在弹框中输入组织名称“phoenix”(此名称全局唯一,若页面提示“组织已存在”,请自定义其它名称),单击“确定”保存。
这里的组织名称,即为后续配置并执行任务中的参数“dockerOrg”。
配置并执行任务
步骤 1 配置任务。
- 进入“凤凰商城”项目,单击导航“持续交付 > 编译构建”。页面中显示样例项目内置的任务。
- 在列表中找到任务“phoenix-sample-ci”。单击图标,在下拉列表中单击“编辑”进入编辑页面。
- 选择“参数设置”页签,参照下表编辑参数值。
参数设置
参数名称 | 默认值 |
---|---|
codeBranch | master。 |
dockerOrg | 输入在配置SWR服务中创建的组织。 |
version | 1.0.0 |
dockerServer | 输入在配置SWR服务中记录的SWR服务器地址。 |
说明请务必确保参数“dockerOrg”、“dockerServer”的输入值是正确的,否则将导致任务失败。
步骤 3 单击“保存并执行”,在弹框中单击“确定”,启动构建任务。
当页面中显示时,表示任务执行成功。请记录以“#”开头的字符串(例如)。
若构建失败,请仔细检查参数“dockerOrg”、“dockerServer”的设置是否正确。
步骤 3 检查发布件。
- 单击导航“制品仓库 > 软件发布库”,进入软件发布库。
- 在与项目同名的仓库中,可以找到“docker-stack”、“phoenix-sample-ci”两个文件夹。
- 在“docker-stack”文件夹中,可找到与步骤2中记录的字符串同名的文件夹,在此文件夹中可以找到发布件“docker-stack.tar.gz”。
- 在文件夹“phoenix-sample-ci/1.0.0”中,可以找到归档的10个“.yaml”格式文件。
3.进入容器镜像服务,在导航中选择“组织管理”,单击在配置SWR服务中创建的组织。
选择“镜像”页签,可以在列表中找到5个镜像(redis、postgres、worker、result、vote)。
查看镜像
4.依次在列表中单击5个镜像的名称进入详情页。在“镜像版本”页签中查看镜像版本。
- redis的镜像版本为alpine。
- postgres的镜像版本为9.4。
- worker、result、vote的镜像版本均与在步骤2中记录的字符串相同。
设置提交代码触发自动编译
通过以下配置,可实现代码变更后自动触发构建任务的执行,从而实现项目的持续集成。
步骤 1 在任务“phoenix-sample-ci”的详情页,单击页面右上角“编辑任务”。
步骤 2 选择“执行计划”页签。
步骤 3 打开“提交代码触发执行”开关,保存任务。
由于在参数设置页面为参数codeBranch配置的默认值为“master”,因此本次设置的结果是当master有代码变更时自动触发构建。
步骤 4 验证配置结果:修改项目代码并提交至master,即可查看构建任务是否自动执行。
设置定时执行任务
为了防止问题代码进入生产环境,确保应用总是处于可部署的状态,团队建议对应用进行持续不断的验证。
通过以下设置,可实现 构建任务的定时执行。
步骤 1 在任务“phoenix-sample-ci”的详情页,单击页面右上角“编辑任务”。
步骤 2 选择“执行计划”页签。
步骤 3 打开“启用定时执行”开关,根据需要选择执行日与执行时间,保存任务。
本文档中勾选“全选”,执行时间为“12:00”。
步骤 4 验证配置结果:根据配置时间查看构建任务是否自动执行,本节不再赘述。