Java 应用构建并部署到 ECS 主机

更新时间:
复制 MD 格式

本文以一个 Java + Maven + 一台 ECS 主机构建部署示例,教您如何快速使用云效流水线 Flow 发布一个项目。

前提条件

准备一台阿里云 ECS 主机实例或者其它主机实例,并且已安装Java环境,接入云效自定义的主机组,具体详情请参阅主机组管理。

步骤一:新建流水线

  1. 进入流水线 Flow,在我的流水线页面右上角单击新建流水线,打开选择流水线模板弹窗,选择开发语言查看默认模板,快速创建流水线。

  2. 单击 Java,选择 Java · 测试、构建、部署到阿里云ECS/自有主机模板,单击创建,进入流水线编辑页面。

步骤二:编排流水线

添加流水线源

  1. 进入流水线编辑页面,单击流程配置页签,打开添加流水线源,选择示例代码源,默认选中 Java 代码类型,自动填充代码仓库地址、默认分支、工作目录等。本例使用云效示例代码库 ,无需修改。

  2. 单击添加,流水线源区域便会出现已添加的流水线源。

配置Mavan单元测试

  1. 单击Maven单元测试,打开任务配置面板。

  2. 为了保证本教程中应用能够顺利完成部署流程,此处请暂时取消勾选测试用例失败时,停止流水线,以便即使单元测试失败,流水线仍可继续执行后续部署步骤。

    重要

    本教程中“取消测试用例失败时,停止流水线”的配置仅用于演示和学习目的,旨在帮助您快速完成从构建到部署的全流程验证。实际生产环境中,建议保持勾选测试用例失败时,停止流水线。

选择构建集群

  1. 在流水线编辑页面,构建任务的构建集群为必填配置项。在构建任务配置面板的构建集群下拉框中选择构建集群:

    • 云效默认构建集群:公共构建集群(北京、杭州、香港),无需额外配置。

    • 云效托管 VPC 构建集群:在您的 VPC 中创建构建环境,网络更安全。

    • 云效私有构建集群:专属构建集群。

  2. 如无可用构建集群,请前往构建集群管理创建。

配置Java构建任务

  1. 单击 Java 构建上传任务,打开任务配置面板。

  2. 查看 Java 构建步骤配置,可按需修改:确认 JDK 版本选择 JDK 1.8,Maven 版本选择 Maven 3.5.2,构建命令保持默认的 Maven 构建命令。

  3. 查看 构建物上传步骤配置,可按需修改。本例中,需要将target/application.jar和deploy.sh两个文件打包到制品中:上传方式选择 归档至云效公共存储空间(供后续任务拉取并部署),制品名称为 Artifacts_${PIPELINE_ID},打包路径填写上述两个文件路径,并勾选 制品中包含打包路径的目录。

配置主机部署任务

  1. 单击主机部署任务,打开任务配置面板。

  2. 配置如下表单:

    1. 制品:下拉选择上游构建阶段的产物。

    2. 主机组:选择待部署的主机组。如无主机组,具体请参见主机组。如需要多主机组部署可增加并行部署任务。

    3. 下载路径:该路径为构建上传步骤中打包的制品要被下载到您的主机上的路径。本例中为:/home/admin/app/package.tgz。

    4. 执行用户:填写执行部署脚本的用户,如 root或者 admin等。本例中为:root。

    5. 部署脚本:实际的部署脚本已经打包到了构建产出的压缩包中,因此部署脚本可以简单的进行解压和执行。填写如下部署脚本:

      mkdir -p /home/admin/application
      tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
      sh /home/admin/application/deploy.sh restart

运行流水线并查看Java构建部署结果

  1. 上述配置完成,单击保存并运行,打开运行配置弹窗。默认 master 分支,单击运行即可触发流水线运行,进入流水线运行页。

  2. 流水线运行完成后,运行页面显示所有阶段(测试、构建、部署)均为 运行成功状态,可单击各任务卡片中的 日志查看执行详情。

    流水线触发运行后,在 Java 构建步骤中可查看 Maven 构建日志,示例输出:

    [executionStep begins at 2024-10-11 14:22:20]
    [INFO] PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    [14:22:20] [SUCCESS] 获取 Credential 成功
    [14:22:20] [INFO] 使用工作路径/root/workspace/spring_boot_PP0D
    加载用户自定义环境变量
    USER_KEY=0.0.1
    USER_KEY2=value2
    [14:22:20] [INFO] 上下文初始化
    [INFO] PIPELINE_ID=3597198
    [INFO] PIPELINE_NAME=流水线 2024-10-11
    [INFO] BUILD_NUMBER=3
    [INFO] EMPLOYEE_ID=66a6f60e368d88cff5a513fc
    [INFO] WORK_SPACE=/root/workspace
    [INFO] PROJECT_DIR=/root/workspace/spring-boot_PP0D
    [INFO] BUILD_JOB_ID=253376730
    [INFO] CI_RUNTIME_VERSION=jdk1.8
    [INFO] 本企业启用了云效的maven私有仓库服务,默认的settings.xml会包含云效的私有仓库配置。如果你想在构建时使用自定义的settings.xml,可以联系企业管理员设置全局自定义settings.xml 或者 将settings.xml放置到代码库根目录,然后在maven构建命令中加入 -s settings.xml 即可。
    [14:22:20] [INFO] 执行步骤
    [14:22:20] [INFO]加载基础缓存
    [14:22:20] [INFO]执行用户命令
    [14:22:20] [User Command] + mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip
    [14:22:21] [INFO] Scanning for projects...
    [14:22:21] [INFO]
    [14:22:21] [INFO] ------------------------------------------------------------------------
    [14:22:21] [INFO] Building spring-boot-hello-world 0.0.1-SNAPSHOT
    [14:22:21] [INFO] ------------------------------------------------------------------------
    [14:22:22] [INFO]
    [14:22:22] [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ spring-boot-hello-world ---
    [14:22:22] [INFO]
    [14:22:22] [INFO] --- jacoco-maven-plugin:0.8.5:prepare-agent (default-prepare-agent) @ spring-boot-hello-world ---
    [14:22:22] [INFO] argLine set to -javaagent:/root/.m2/repository/org/jacoco/org.jacoco.agent/0.8.5/org.jacoco.agent-0.8.5-runtime.jar=destfile=/root/workspace/spring-boot_PP0D/target/jacoco.exec
    [14:22:22] [INFO]
    [14:22:22] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ spring-boot-hello-world ---
    [14:22:23] [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [14:22:23] [INFO] Copying 1 resource
    [14:22:23] [INFO] Copying 0 resource
    [14:22:23] [INFO]
    [14:22:23] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ spring-boot-hello-world ---
    [14:22:23] [INFO] Changes detected - recompiling the module!
    [14:22:23] [INFO] Compiling 3 source files to /root/workspace/spring-boot_PP0D/target/classes
  3. 单击主机部署任务卡片上的部署详情可以查看部署单详情。部署信息包括:部署单 ID 为 50957834,主机失败率 0.00%,完成机器 1/1,部署耗时 8 秒,部署批次 1/1。下方主机列表中目标主机状态为 已完成即项目发布完成,可单击 日志查看该主机的部署日志。

配置运行时通知

如有需要,流水线中可配置消息通知,可以将流水线运行过程中的信息反馈给相应同学,便于快速定位和排查问题。