You need to enable JavaScript to run this app.
导航

使用持续交付打包 Java 应用制作容器镜像

最近更新时间2023.10.24 10:59:57

首次发布时间2022.12.23 14:38:18

持续交付搭配火山引擎容器服务、火山引擎镜像仓库,可完成容器化持续交付一站式体验。本文为您介绍如何使用持续交付打包 Java 应用制作容器镜像并推送至火山引擎镜像仓库。

场景介绍

一些使用 Java 作为开发语言的用户,使用容器镜像的方式交付 Java 应用,并将其部署在 Kubernetes 集群中运行。一般来说分为以下两种场景,本文将为您详细介绍这两种场景的使用流程。

  • 对接 Java 源码进行编译构建和打包镜像,并推送至火山引擎镜像仓库。后续可以使用该镜像对 Kubernetes 应用进行镜像升级,实现完整的 Kubernetes 部署。
  • 不对接 Java 源码,直接使用编译构建好的 jar 包打包镜像,并推送至火山引擎镜像仓库。后续可以使用该镜像对 Kubernetes 应用进行镜像升级,实现完整的 Kubernetes 部署。

对接 Java 源码进行编译构建和打包镜像

介绍如何对接 Java 源码进行编译构建和打包镜像,并推送至火山引擎镜像仓库。

背景信息

  • 本文以 Spring Boot HelloWorld 代码 为例,使用 Maven 进行编译构建,输出的 jar 包路径为 target/application.jar 。 您可以通过修改 pom.xml 文件中的如下配置来自定义 jar 包名称。
    alt

  • 本文使用的 Dockerfile 文件如下,存储于示例代码仓库根目录下。您可根据实际需要对 Dockerfile 进行修改。

    #基础镜像
    FROM cr-demo-cn-beijing.cr.volces.com/tools/openjdk:8-jdk-alpine
    #将编译构建好的 jar 包,拷贝到镜像中,默认构建好的 jar 包在 target 目录下
    COPY target/application.jar app.jar  
    #对应用实际监听的端口进行暴露,本文为 8080 端口
    EXPOSE 8080 
    #配置镜像的启动命令
    ENTRYPOINT ["java","-jar","/app.jar"] 
    

前提条件

  • 镜像仓库
  • 持续交付
    • 已创建工作区,详细操作请参见 创建工作区
    • 已创建代码源,详细操作请参见 创建代码源
    • 已准备打包镜像所需的 Dockerfile 文件。

操作步骤

  1. 登录 持续交付控制台

  2. 在左侧导航栏选择 工作区,进入 工作区 页面。

  3. 选择目标工作区名称,进入该工作区。

  4. 单击 创建流水线,弹出 选择流水线模板 对话框。

  5. 选择 Java 语言类型 下的 Java-镜像构建推送至镜像仓库 模板,单击 确定,进入 编辑流水线 页面。

  6. 配置代码源。
    a. 单击输入源位置,弹出 配置代码源 对话框。
    b. 按要求填写以下参数。alt

    配置项说明
    类型选择代码仓库类型。根据前提条件中创建的代码源类型选择,本示例为 Gitee。
    代码源配置该流水线的代码源。选择前提条件中创建的代码源。
    默认分支默认分支为流水线运行时默认选用的代码仓库分支。本示例使用 master。
    Webhook 设置Webhook 设置用于启用代码源触发规则,具体操作请参见 代码源触发 。本示例不启用。

    c. 单击 确定,完成代码源配置。

  7. 配置镜像构建推送至镜像仓库服务。
    a. 配置编译构建步骤。
    alt

    配置项说明
    步骤名称默认为编译构建,本示例不做修改。
    语言选择构建语言 Java。
    版本本示例选择 Java 8 版本。
    编译命令本示例使用默认编译命令 mvn package。如果您有其他诉求,请自行调整编译命令。
    失败时跳过该配置主要适用于单元测试未通过质量门禁,仍需要继续向下运行流水线等特殊场景。开启后,本步骤执行失败时会自动跳过,不影响流水线继续向下运行。本示例不开启。

    b. 配置镜像打包推送至镜像仓库服务的步骤。
    alt

    配置项说明
    步骤名称默认为镜像打包推送至镜像仓库服务,本示例不做修改。
    地域选择要推送的镜像仓库所在的地域。
    仓库实例选择前提条件中已创建的目标仓库实例。
    命名空间选择前提条件中已创建的目标命名空间。
    OCI制品仓库配置要推送的 OCI 制品仓库。如果 OCI 制品仓库不存在,系统将自动创建。
    镜像版本自定义镜像版本号。本示例使用 latest。
    contextpathdocker build 命令执行上下文路径。填写相对于代码根目录的路径,默认为.。本示例保持默认。
    多框架构建如果您希望构建 linux/arm64 架构的镜像,或者希望同时构建 linux/arm64 和 linux/amd64 两种架构的镜像,请勾选多框架构建功能的启用框。本示例不启用多框架构建功能,默认构建 linux/amd64 架构的镜像。
    Dockerfile选择文件路径,填写 Dockerfile 文件相对于代码库根目录所在路径,默认为./Dockerfile。本示例使用的 Dockerfile 文件在代码仓库根目录下,故保持默认。

    产出物

    该步骤的产出物为镜像,默认名称为 DockerOutput,支持自定义命名。本示例保持默认。
    产出物可用于后续部署任务。

    忽略证书有效性该配置主要适用于仓库使用自签证书不受信的情形。勾选后,当前步骤中的所有内容不再校验 HTTPS 证书有效性。一般不建议勾选。本示例不勾选。
    失败时跳过该配置主要适用于单元测试未通过质量门禁,仍需要继续向下运行流水线等特殊场景。开启后,本步骤执行失败时会自动跳过,不影响流水线继续向下运行。本示例不开启。
  8. 其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。

  9. 运行流水线。

    1. 在流水线列表页面,选择目标流水线,单击 操作 列的 运行 按钮,弹出 运行流水线 对话框。
    2. 按要求填写以下参数。
    配置项说明
    代码源显示该条流水线使用的代码源。
    目标选择流水线拉取代码的方式,支持按照分支、Tag、Commit ID 三种方式拉取代码。此处使用创建流水线时设置的默认分支。
    运行说明添加本次运行的备注信息,可以为空。
    1. 单击 确定,流水线开始运行,系统跳转至该流水线 最近运行详情 页面。

结果验证

本文将为您从流程和业务两方面来进行结果验证。

  • 流程验证

    • 流水线运行成功,镜像构建完成并推送至指定镜像仓库地址。如下图所示,镜像构建推送至镜像仓库服务输出本示例推送的镜像地址。
      alt

    • 您也可以登录对应的镜像仓库地址进行查看。如下图所示,本示例中构建的镜像已经推送到了指定 OCI 制品仓库。
      alt

  • 业务验证
    使用该镜像在容器服务控制台创建一个 Deployment,并通过 kubectl 工具进入到 pod 内,请求测试应用的运行情况。
    alt

    • pod 内可以看到有一个 Java 进程监听 8080 端口。
      alt

    • 从其他 pod 内请求 springboot pod 的“pod ip + 8080 端口”时,有如下返回表示应用运行正常。
      alt

通过 jar 包制作容器镜像

介绍如何使用编译构建好的 jar 包打包镜像,并推送至火山引擎镜像仓库。

背景信息

  • 本文使用的 jar 包为 application.jar。
    application.jar
    13.83MB
  • 由于不对接源码,本场景需在 Dockerfile 命令框中输入 Dockerfile 文件内容,内容如下。您可根据实际需要对 Dockerfile 进行修改。
    #基础镜像
    FROM cr-demo-cn-beijing.cr.volces.com/tools/openjdk:8-jdk-alpine  
    #将编译构建好的 jar 包,拷贝到镜像中,下载好的 jar 包位于./application.jar
    COPY application.jar app.jar  
    #对应用实际监听的端口进行暴露,本文为 8080 端口
    EXPOSE 8080 
    #配置镜像的启动命令
    ENTRYPOINT ["java","-jar","/app.jar"]
    

前提条件

  • 对象存储
    • 已开通对象存储 TOS。
    • 已创建存储桶,已将编译构建好的 jar 包上传至存储桶,并获取对应的 URL,用于下载该 jar 包。具体操作可参见 对象存储快速入门
  • 镜像仓库
  • 持续交付
    • 已创建工作区,详细操作请参见 创建工作区
    • 已准备打包镜像所需的 Dockerfile 文件。

操作步骤

  1. 登录 持续交付控制台

  2. 在左侧导航栏选择 工作区,进入 工作区 页面。

  3. 选择目标工作区名称,进入该工作区。

  4. 单击 创建流水线,弹出 选择流水线模板 对话框。

  5. 选择 空白模板,单击 确定,进入 编辑流水线 页面。

  6. 单击 +,新增阶段。

  7. 单击 添加任务,进入添加任务面板。任务模板 选择空白任务,任务名称 输入 通过 jar 包制作容器镜像

  8. 为当前任务配置步骤一: 命令执行,将存储于 TOS 的 application.jar 下载至流水线的工作目录。

    1. 单击 + 添加步骤,选择 命令执行

    2. 配置命令执行步骤。
      alt

      配置项说明
      步骤名称默认为命令执行,本示例不做修改。

      命令执行

      输入待执行的命令脚本,完成从 TOS 下载 jar 包。本示例命令如下,您需要将其中的 URL 替换成前提条件中获得的 URL。

      curl "https://xxx-beijing.tos-cn-beijing.volces.com/cp/application.jar?X-Tos-Algorithm=TOS4-HMAC-SHA256&X-Tos-Content-Sha256=UNSIGNED-PAYLOAD&X-Tos-Credential=xxxx" -o application.jar
      
      失败时跳过该配置主要适用于单元测试未通过质量门禁,仍需要继续向下运行流水线等特殊场景。开启后,本步骤执行失败时会自动跳过,不影响流水线继续向下运行。本示例不开启。
  9. 为当前任务配置步骤二: 镜像打包推送至镜像仓库服务,完成镜像打包,并推送至火山引擎镜像仓库。
    1. 单击 + 添加步骤,选择 镜像打包推送至镜像仓库服务
    2. 配置镜像打包推送至镜像仓库服务步骤。
    alt

    配置项说明
    步骤名称默认为镜像打包推送至镜像仓库服务,本示例不做修改。
    地域选择要推送的镜像仓库所在的地域。
    仓库实例选择前提条件中已创建的目标仓库实例。
    命名空间选择前提条件中已创建的目标命名空间。
    OCI制品仓库配置要推送的 OCI 制品仓库。如果 OCI 制品仓库不存在,系统将自动创建。
    镜像版本自定义镜像版本号。本示例使用 jar-latest。
    contextpathdocker build 命令执行上下文路径。填写相对于代码根目录的路径,默认为.。本示例保持默认。
    多框架构建如果您希望构建 linux/arm64 架构的镜像,或者希望同时构建 linux/arm64 和 linux/amd64 两种架构的镜像,请勾选多框架构建功能的启用框。本示例不启用多框架构建功能,默认构建 linux/amd64 架构的镜像。
    Dockerfile选择自定义 Dockerfile 文件,本示例使用背景信息中展示的 Dockerfile 内容。

    产出物

    该步骤的产出物为镜像,默认名称为 DockerOutput,支持自定义命名。本示例保持默认。
    产出物可用于后续部署任务。

    忽略证书有效性该配置主要适用于仓库使用自签证书不受信的情形。勾选后,当前步骤中的所有内容不再校验 HTTPS 证书有效性。一般不建议勾选。本示例不勾选。
    失败时跳过该配置主要适用于单元测试未通过质量门禁,仍需要继续向下运行流水线等特殊场景。开启后,本步骤执行失败时会自动跳过,不影响流水线继续向下运行。本示例不开启。
  10. 其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。

  11. 运行流水线。

    1. 在流水线列表页面,选择目标流水线,单击 操作 列的 运行 按钮,弹出 运行流水线 对话框。
    2. 添加本次运行的备注信息,可以为空。
    3. 单击 确定,流水线开始运行,系统跳转至该流水线 最近运行详情 页面。

结果验证

本文将为您从流程和业务两方面来进行结果验证。

  • 流程验证

    • 流水线运行成功,镜像构建完成并推送至指定镜像仓库地址。如下图所示,镜像构建推送至镜像仓库服务输出本示例推送的镜像地址。
      alt

    • 您也可以登录对应的镜像仓库地址进行查看。如下图所示,本示例中构建的镜像已经推送到了指定 OCI 制品仓库。
      alt

  • 业务验证
    业务验证方法同 对接 Java 源码进行编译构建和打包镜像,不再赘述。