持续交付搭配火山引擎容器服务、火山引擎镜像仓库,可完成容器化持续交付一站式体验。本文为您介绍如何使用持续交付打包 Java 应用制作容器镜像并推送至火山引擎镜像仓库。
一些使用 Java 作为开发语言的用户,使用容器镜像的方式交付 Java 应用,并将其部署在 Kubernetes 集群中运行。一般来说分为以下两种场景,本文将为您详细介绍这两种场景的使用流程。
介绍如何对接 Java 源码进行编译构建和打包镜像,并推送至火山引擎镜像仓库。
本文以 Spring Boot HelloWorld 代码 为例,使用 Maven 进行编译构建,输出的 jar 包路径为 target/application.jar
。 您可以通过修改 pom.xml 文件中的如下配置来自定义 jar 包名称。
本文使用的 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"]
登录 持续交付控制台。
在左侧导航栏选择 工作区,进入 工作区 页面。
选择目标工作区名称,进入该工作区。
单击 创建流水线,弹出 选择流水线模板 对话框。
选择 Java 语言类型 下的 Java-镜像构建推送至镜像仓库 模板,单击 确定,进入 编辑流水线 页面。
配置代码源。
a. 单击输入源位置,弹出 配置代码源 对话框。
b. 按要求填写以下参数。
配置项 | 说明 |
---|---|
类型 | 选择代码仓库类型。根据前提条件中创建的代码源类型选择,本示例为 Gitee。 |
代码源 | 配置该流水线的代码源。选择前提条件中创建的代码源。 |
默认分支 | 默认分支为流水线运行时默认选用的代码仓库分支。本示例使用 master。 |
Webhook 设置 | Webhook 设置用于启用代码源触发规则,具体操作请参见 代码源触发 。本示例不启用。 |
c. 单击 确定,完成代码源配置。
配置镜像构建推送至镜像仓库服务。
a. 配置编译构建步骤。
配置项 | 说明 |
---|---|
步骤名称 | 默认为编译构建,本示例不做修改。 |
语言 | 选择构建语言 Java。 |
版本 | 本示例选择 Java 8 版本。 |
编译命令 | 本示例使用默认编译命令 mvn package 。如果您有其他诉求,请自行调整编译命令。 |
失败时跳过 | 该配置主要适用于单元测试未通过质量门禁,仍需要继续向下运行流水线等特殊场景。开启后,本步骤执行失败时会自动跳过,不影响流水线继续向下运行。本示例不开启。 |
b. 配置镜像打包推送至镜像仓库服务的步骤。
配置项 | 说明 |
---|---|
步骤名称 | 默认为镜像打包推送至镜像仓库服务,本示例不做修改。 |
地域 | 选择要推送的镜像仓库所在的地域。 |
仓库实例 | 选择前提条件中已创建的目标仓库实例。 |
命名空间 | 选择前提条件中已创建的目标命名空间。 |
OCI制品仓库 | 配置要推送的 OCI 制品仓库。如果 OCI 制品仓库不存在,系统将自动创建。 |
镜像版本 | 自定义镜像版本号。本示例使用 latest。 |
contextpath | docker build 命令执行上下文路径。填写相对于代码根目录的路径,默认为. 。本示例保持默认。 |
多框架构建 | 如果您希望构建 linux/arm64 架构的镜像,或者希望同时构建 linux/arm64 和 linux/amd64 两种架构的镜像,请勾选多框架构建功能的启用框。本示例不启用多框架构建功能,默认构建 linux/amd64 架构的镜像。 |
Dockerfile | 选择文件路径,填写 Dockerfile 文件相对于代码库根目录所在路径,默认为./Dockerfile 。本示例使用的 Dockerfile 文件在代码仓库根目录下,故保持默认。 |
产出物 | 该步骤的产出物为镜像,默认名称为 DockerOutput,支持自定义命名。本示例保持默认。 |
忽略证书有效性 | 该配置主要适用于仓库使用自签证书不受信的情形。勾选后,当前步骤中的所有内容不再校验 HTTPS 证书有效性。一般不建议勾选。本示例不勾选。 |
失败时跳过 | 该配置主要适用于单元测试未通过质量门禁,仍需要继续向下运行流水线等特殊场景。开启后,本步骤执行失败时会自动跳过,不影响流水线继续向下运行。本示例不开启。 |
其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。
运行流水线。
配置项 | 说明 |
---|---|
代码源 | 显示该条流水线使用的代码源。 |
目标 | 选择流水线拉取代码的方式,支持按照分支、Tag、Commit ID 三种方式拉取代码。此处使用创建流水线时设置的默认分支。 |
运行说明 | 添加本次运行的备注信息,可以为空。 |
本文将为您从流程和业务两方面来进行结果验证。
流程验证
流水线运行成功,镜像构建完成并推送至指定镜像仓库地址。如下图所示,镜像构建推送至镜像仓库服务输出本示例推送的镜像地址。
您也可以登录对应的镜像仓库地址进行查看。如下图所示,本示例中构建的镜像已经推送到了指定 OCI 制品仓库。
业务验证
使用该镜像在容器服务控制台创建一个 Deployment,并通过 kubectl 工具进入到 pod 内,请求测试应用的运行情况。
pod 内可以看到有一个 Java 进程监听 8080 端口。
从其他 pod 内请求 springboot pod 的“pod ip + 8080 端口”时,有如下返回表示应用运行正常。
介绍如何使用编译构建好的 jar 包打包镜像,并推送至火山引擎镜像仓库。
#基础镜像 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"]
登录 持续交付控制台。
在左侧导航栏选择 工作区,进入 工作区 页面。
选择目标工作区名称,进入该工作区。
单击 创建流水线,弹出 选择流水线模板 对话框。
选择 空白模板,单击 确定,进入 编辑流水线 页面。
单击 +,新增阶段。
单击 添加任务,进入添加任务面板。任务模板 选择空白任务,任务名称 输入 通过 jar 包制作容器镜像。
为当前任务配置步骤一: 命令执行,将存储于 TOS 的 application.jar 下载至流水线的工作目录。
单击 + 添加步骤,选择 命令执行。
配置命令执行步骤。
配置项 | 说明 |
---|---|
步骤名称 | 默认为命令执行,本示例不做修改。 |
命令执行 | 输入待执行的命令脚本,完成从 TOS 下载 jar 包。本示例命令如下,您需要将其中的 URL 替换成前提条件中获得的 URL。
|
失败时跳过 | 该配置主要适用于单元测试未通过质量门禁,仍需要继续向下运行流水线等特殊场景。开启后,本步骤执行失败时会自动跳过,不影响流水线继续向下运行。本示例不开启。 |
为当前任务配置步骤二: 镜像打包推送至镜像仓库服务,完成镜像打包,并推送至火山引擎镜像仓库。
1. 单击 + 添加步骤,选择 镜像打包推送至镜像仓库服务。
2. 配置镜像打包推送至镜像仓库服务步骤。
配置项 | 说明 |
---|---|
步骤名称 | 默认为镜像打包推送至镜像仓库服务,本示例不做修改。 |
地域 | 选择要推送的镜像仓库所在的地域。 |
仓库实例 | 选择前提条件中已创建的目标仓库实例。 |
命名空间 | 选择前提条件中已创建的目标命名空间。 |
OCI制品仓库 | 配置要推送的 OCI 制品仓库。如果 OCI 制品仓库不存在,系统将自动创建。 |
镜像版本 | 自定义镜像版本号。本示例使用 jar-latest。 |
contextpath | docker build 命令执行上下文路径。填写相对于代码根目录的路径,默认为. 。本示例保持默认。 |
多框架构建 | 如果您希望构建 linux/arm64 架构的镜像,或者希望同时构建 linux/arm64 和 linux/amd64 两种架构的镜像,请勾选多框架构建功能的启用框。本示例不启用多框架构建功能,默认构建 linux/amd64 架构的镜像。 |
Dockerfile | 选择自定义 Dockerfile 文件,本示例使用背景信息中展示的 Dockerfile 内容。 |
产出物 | 该步骤的产出物为镜像,默认名称为 DockerOutput,支持自定义命名。本示例保持默认。 |
忽略证书有效性 | 该配置主要适用于仓库使用自签证书不受信的情形。勾选后,当前步骤中的所有内容不再校验 HTTPS 证书有效性。一般不建议勾选。本示例不勾选。 |
失败时跳过 | 该配置主要适用于单元测试未通过质量门禁,仍需要继续向下运行流水线等特殊场景。开启后,本步骤执行失败时会自动跳过,不影响流水线继续向下运行。本示例不开启。 |
其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。
运行流水线。
本文将为您从流程和业务两方面来进行结果验证。
流程验证
流水线运行成功,镜像构建完成并推送至指定镜像仓库地址。如下图所示,镜像构建推送至镜像仓库服务输出本示例推送的镜像地址。
您也可以登录对应的镜像仓库地址进行查看。如下图所示,本示例中构建的镜像已经推送到了指定 OCI 制品仓库。
业务验证
业务验证方法同 对接 Java 源码进行编译构建和打包镜像,不再赘述。