文档首页 > > 最佳实践> HE2E DevOps实践>

步骤六:构建应用

步骤六:构建应用

分享
更新时间:2021/03/09 GMT+08:00

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

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

预置编译构建任务简介

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

预置编译构建任务

任务说明

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”为例进行讲解,此任务包含的步骤如表2所示。

表2 构建步骤

构建步骤

说明

制作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环境、生产环境)一致。

容器镜像加速

构建任务中需要使用node镜像。

为了防止拉取node镜像不稳定,在执行编译构建任务之前,可以先通过容器镜像加速服务获取一个更稳定的node镜像地址。

  1. 登录容器镜像服务控制台
  2. 单击页面左侧导镜像资源 > 镜像中心,进入“镜像中心”页面。
  3. 单击“镜像加速器”,在弹框中找到加速器地址,复制“https://”之后的内容。
  4. 修改代码仓库中的“result/Dockerfile”文件,将第一行代码修改为以下内容,如图1所示。

    FROM 加速器地址/library/node:8.16-slim
    图1 增加容器镜像加速器地址

配置并执行编译构建任务

本文档使用容器镜像服务SWR来保存环境镜像,因此需要首先配置SWR服务,然后配置编译构建任务。

  1. 配置SWR服务。

    1. 登录容器镜像服务控制台

      请检查页面左上方的“区域”列表,请确保与编译构建任务所在区相同的区域。若区域不同,请选择相同区域。

    2. 单击“登录指令”,系统生成并弹框显示“docker login指令”,如图2所示。其中,
      • -u之后的字符串为用户名。
      • -p之后的字符串为密码。
      • 最后的字符串为SWR服务器地址,此地址即为后续配置编译构建任务中的参数“dockerServer”
      图2 docker login指令

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

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

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

      图3 创建组织

  2. 配置编译构建任务。

    1. 进入“凤凰商城”项目,单击页面上方导航构建&发布 > 编译构建,页面将显示样例项目自动创建的编译构建任务“phoenix-sample-ci”,如图4所示。
      图4 编译构建
    2. 单击图标进入编辑页面,选择“参数设置”页签。
    3. 将三个参数均勾选为静态参数,并参照表3编辑参数值,如图5所示。
      表3 参数设置

      参数名称

      参数值

      codeBranch

      保持默认值。

      dockerOrg

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

      dockerServer

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

      图5 参数设置

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

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

  3. 执行编译构建任务。

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

    任务执行耗时约4~5分钟,当出现如图6所示页面时,表示任务执行成功。

    请记录“构建成功”字样前面的数字串,该数字串为构建任务中的系统预定义参数“BuildNumber”(参数介绍在“参数设置”页面),在后续检查发布件查看镜像详情中,镜像版本即此数字串。

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

    图6 构建成功

  4. 检查发布件。

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

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

      图7 软件发布库
    2. 进入SWR控制台,在页面左侧导航选择“我的镜像”

      列表中可看到5个镜像(redis、postgres、worker、result、vote),镜像的所属组织为配置SWR服务中创建的组织,版本数如图8所示。

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

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

      图9 vote镜像

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

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

  1. 在编译构建任务“phoenix-sample-ci”的详情页,单击页面右上角“编辑任务”
  2. 选择“源码选择”页签,单击“高级设置”
  3. 打开“提交代码触发执行”开关,单击“保存”,如图10所示。

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

    图10 源码选择

  4. 验证配置结果:修改项目代码并提交至master(代码开发方式请参考步骤四:开发项目代码,本节不再赘述),即可查看编译构建任务是否自动执行。

设置定时执行编译构建任务

为了防止问题代码进入生产环境,确保应用总是处于可部署的状态,团队建议对应用进行持续不断的验证。

通过以下设置,可实现编译构建任务的定时执行。

  1. 在编译构建任务“phoenix-sample-ci”的详情页,单击页面右上角“编辑任务”
  2. 选择“执行计划”页签,可看到如表4所示三种执行计划。

    表4 执行计划

    执行计划

    说明

    手工执行

    选择“手动触发任务执行”

    每日定时执行

    设置“执行开始时间”后,任务每天在此时间启动执行。

    每周定时执行

    设置“执行日”(周一~周日)与“执行开始时间”后,任务每周按照配置启动执行。

  3. 本文档中选择“每日定时执行”,执行开始时间为“12:00”
  4. 验证配置结果:根据配置时间查看编译构建任务是否自动执行,本节不再赘述。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区论坛频道来与我们联系探讨

智能客服提问云社区提问