更新时间:2025-06-27 GMT+08:00
分享

构建应用并推送镜像至SWR

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

在项目部署过程中,经常遇到由于环境不一致而导致的部署失败,例如研发调试环境的JDK升级后,未在环境清单中标记清楚,导致生产环境未做相应升级而引发失败。为了避免因为环境不一致导致的各种问题,本样例项目中将各微服务应用与环境统一打包到镜像,保持环境(开发调测环境、测试环境、QA环境、生产环境)一致。

本章节介绍开发人员Chris如何构建并归档镜像至SWR。

预置任务简介

样例项目中预置了以下5个构建任务。

表1 预置任务

预置任务

任务说明

phoenix-sample-ci

基本的构建任务。

phoenix-sample-ci-test

构建测试环境可用镜像的任务。

phoenix-sample-ci-worker

构建Worker功能镜像的任务。

phoenix-sample-ci-result

构建Result功能镜像的任务。

phoenix-sample-ci-vote

构建Vote功能镜像的任务。

本章节以任务“phoenix-sample-ci”为例进行讲解,任务内置的步骤及作用如下表所示,用户完成任务的参数配置后即可执行该任务。

表2 构建步骤

构建步骤

说明

制作Vote镜像并推送到SWR仓库

依据文件“vote/Dockerfile”制作Vote功能镜像,并将镜像推送到SWR服务中保存。

制作Result镜像并推送到SWR仓库

依据文件“result/Dockerfile”制作并推送Result功能镜像,并将镜像推送到SWR服务中保存。

使用Maven安装Worker依赖包

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

制作Worker镜像并推送到SWR仓库

依据文件“worker/Dockerfile”制作并推送Worker功能镜像,并将镜像推送到SWR服务中保存。

生成Postgres and Redis Dockerfile

通过shell命令生成文件“Dockerfile”,用以制作Postgres(数据库)和Redis(缓存)镜像。

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

依据“生成Postgres and Redis Dockerfile”步骤中所生成的Dockerfile文件制作Postgres镜像,并将镜像推送到SWR服务中保存。

制作Redis镜像并推送到SWR仓库

依据“生成Postgres and Redis Dockerfile”步骤中所生成的Dockerfile文件制作Redis镜像,并将镜像推送到SWR服务中保存。

替换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部署文件到软件发布库

将“替换Kubernetes部署文件镜像版本”步骤中修改后的所有“.yaml”文件上传到软件发布库中归档。

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

将“替换Docker-Compose部署文件镜像版本”步骤中压缩好的“docker-stack.tar.gz”上传到软件发布库中归档。

配置并执行任务

  1. 进入项目“凤凰商城”,单击导航“持续交付 > 编译构建”,进入编译构建服务。
  2. 在任务“phoenix-sample-ci”的“操作”列中单击,选择“编辑”,进入编辑页面。
  3. 选择“参数设置”页签,为以下参数配置默认值。

    表3 参数设置

    名称

    默认值

    codeBranch

    master。

    dockerOrg

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

    version

    1.0.0

    dockerServer

    输入在配置SWR服务中获取的SWR服务器地址。

  4. 单击“保存并执行”,在弹框中单击“确定”,启动构建任务。

    当页面中显示时,表示任务执行成功。请记录以“#”开头的字符串(例如)。

    如果构建失败,请根据失败步骤信息与日志中的报错信息,参考编译构建常见问题排查处理。

    其中,如果报错信息为“制作Docker镜像失败”,请优先参考拉取镜像失败导致构建失败处理。

  5. 检查发布件。

    1. 单击导航“制品仓库 > 软件发布库”,进入软件发布库。
    2. 在与项目同名的仓库中,可以找到“docker-stack”、“phoenix-sample-ci”两个文件夹。
      • 在“docker-stack”文件夹中,可找到与4中记录的字符串同名的文件夹,在此文件夹中可以找到发布件“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的镜像版本均与在4中记录的字符串相同。

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

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

  1. 进入项目“凤凰商城”,单击导航“持续交付 > 编译构建”,进入编译构建服务。
  2. 在任务“phoenix-sample-ci”的“操作”列中单击,选择“编辑”,进入编辑页面。
  3. 选择“执行计划”页签,打开“提交代码触发执行”开关,保存任务。

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

    图1 配置执行计划

  4. 验证配置结果:修改项目代码并提交至master,然后查看构建任务是否自动启动执行。

设置定时执行任务

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

  1. 在任务“phoenix-sample-ci”的详情页,单击“编辑”。
  2. 选择“执行计划”页签。
  3. 打开“启用定时执行”开关,根据需要选择执行日与执行时间,关闭“代码变化才执行”,保存任务。

    本文档中勾选“全选”,执行时间为“12:00”(本文中使用默认时区,可以根据实际需要修改时区)。

    图2 配置定时执行

  4. 验证配置结果:根据配置时间查看构建任务是否自动执行,本节不再赘述。

相关文档