主机部署

更新时间:
复制 MD 格式

流水线 Flow 支持将制品部署到阿里云ECS服务器、公网主机或免费体验主机中,本文介绍如何接入主机并创建和配置部署任务。

方案概览

  1. 接入新主机:创建主机组并接入新主机。

  2. 添加主机部署任务:创建或添加主机部署任务到流水线中。

  3. 配置主机部署任务:设置主机部署任务的相关参数。

  4. 管理主机部署任务查看部署详情部署历史回滚

接入新主机

  1. 流水线 Flow首页,单击全局设置然后单击主机组管理

  2. 主机组管理页面,选择目标主机组,然后在目标主机组页面,单击添加新主机流水线 Flow支持通过以下方式接入主机。

    如果还未创建主机组,请参见新建主机组

    手动安装Runner

    说明

    此方式适用于接入所有类型的主机,包括阿里云 ECS 和其他非阿里云主机。

    1. 接入新主机页面,添加方式选择手动安装Runner

    2. 复制 Runner 安装命令并在需要添加的主机(该主机必须要能访问公网)上执行。选择操作系统类型Linux,在接入主机区域,复制安装命令并在待接入主机上执行。该命令包含Runner版本、Token、AccessKey等参数,且有过期时间限制,请在有效期内完成执行。执行完成后单击我知道了

      主机终端打印以下信息即表示接入成功。

      INFO[2025-04-29T13:34:12+08:00] service type linux-systemd, user , realUser root 
      INFO[2025-04-29T13:34:12+08:00] Aliyun yunxiao runner-v0.3.1-be-d5zh**** service started 
      INFO[2025-04-29T13:34:12+08:00] Aliyun yunxiao runner-v0.3.1-be-d5zh**** service status running 
    3. Runner 安装成功后,新机器就会自动添加至当前主机组,请刷新主机列表后查看。

    说明
    • 将应用部署到自有主机(非阿里云 ECS)不需要企业版,标准版即可使用。自有主机通过手动安装Runner方式接入,创建流水线时选择包含主机部署的模板(如 Java · 测试、构建、部署到阿里云ECS/自有主机)。

    • 如果需要在远程主机上免密执行命令,请使用主机部署步骤(需预先安装 Runner),而非执行Shell步骤——执行Shell不支持直接免密连接 ECS。

    阿里云ECS

    1. 接入新主机页面,添加方式阿里云ECS

    2. 选择服务连接,如果还未创建,请单击添加服务连接完成创建

    3. 选择地域和主机。

    4. 单击保存

    说明

    对部署权限的相关说明,请参见权限管理

    混合云托管

    使用混合云托管方式添加主机,首先需要将您的非阿里云主机注册为阿里云托管实例。托管成功过后,该服务器便可使用阿里云提供的多种在线服务。

    1. 选择服务连接,如果还未创建,请单击添加服务连接完成创建

    2. 选择托管主机所在地域和需要添加的托管主机。

    3. 单击保存

    免费体验主机

    1. 接入新主机页面,添加方式选择免费体验主机

    2. 点击阿里云体验实验室,前往申请免费体验资源。

    3. 点击立即开始,进入资源申请页面。

    4. Flow实验资源体验(5小时)领取免费试用额度个人账号资源三种实验资源可供选择。详情请参见界面所展示的实验资源说明,以实验资源体验(5小时)为例。

      选择实验资源体验(5小时),单击确认开启实验

    5. 完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,其中 AK IDAK SecretECS 实例 ID地域为主机导入的关键信息。

      资源列表中还包含子用户名称子用户密码ECS公网地址ECS登录名登录密码IP白名单等字段,可单击各字段右侧的复制图标快速获取对应值。

    6. 返回 Flow,将体验资源的 AK IDAK SecretECS 实例 ID地域分别填写至对应位置,保存完成主机组添加。

    7. 点击保存,Flow 会在体验主机上执行安装 agent,预计会等待15s左右,在主机组界面刷新便可看到当前绑定主机信息。

      刷新后,主机组详情页中已添加的主机 Runner状态 显示为 正常安装进度 显示为 成功,表示 agent 安装完成。

添加主机部署任务

可以通过两种方式添加主机部署任务。

方式一:通过流水线模板创建

新建流水线时,选择开发语言,并选择带有主机部署任务的流水线模板,即可快速创建一条主机部署流水线 。

例如,选择 Java 语言,选择 Java · 测试、构建、部署到阿里云ECS/自有主机 模板。

方式二:编排流水线时,添加主机部署任务

在已有的流水线中,单击新的任务,并选择主机部署

配置主机部署任务

本文以部署Java 示例代码为例,为您讲述如何配置部署任务。其中Java 测试构建阶段的配置请参见测试构建,注意在配置构建物上传时,将仓库中deploy.sh文件一起上传到制品仓库,后续部署 Java 项目时需要用到。

  1. 选择部署时下载制品。默认已勾选,注意不要取消。

  2. 选择制品名称

  3. 选择需要部署的主机组。如果还未创建,您可单击新建主机组创建,详情请参见主机组管理

    重要

    主机组用于管理部署的资源和配置。主机组中的主机必须安装 Java 运行环境。

  4. 部署配置

    配置项

    说明

    下载路径

    将制品下载到你的主机上的路径,

    执行用户

    配置执行命令的用户,如root。

    部署脚本

    在目标主机上执行的 Shell 部署脚本。该字段为非必填项:若不填写,部署时仅将制品下载到指定的下载路径,不会执行任何额外操作(不报错)。您需要自行编写解压、配置及启动逻辑,才能完成实际部署。

    内联脚本存在字符数量限制,若脚本较长,建议将完整的 Shell 脚本文件上传至 Git 代码库或提前放置在目标服务器上,在部署脚本输入框中通过命令调用执行,例如 sh /home/admin/deploy.sh。以下为基础示例:

    mkdir -p /home/admin/application
    tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
    sh /home/admin/application/deploy.sh restart
    其中 deploy.sh 是一个启动 Jar 包的 Shell 脚本,实际使用时请替换为您的部署脚本。
    重要

    Flow 在部署过程中,会下发部分以rdc_deploy_command_开头的部署进程,请勿在部署脚本中对此类部署进程进行操作,否则可能会导致部署失败。

    多服务独立部署

    当一台服务器上需要部署多个服务且各服务需独立发布时,建议为每个服务创建独立的主机组(可包含同一台服务器),并在流水线中为每个服务配置独立的主机部署任务。通过指定不同的下载路径部署脚本,实现各服务之间的隔离部署。

    并行执行脚本

    若需在同一台主机上并行执行多个脚本任务,可在流水线中添加一个额外的主机部署组件,取消勾选部署时下载制品,直接在部署脚本中编写脚本命令。由于不下载制品,该组件可与其他部署任务并行运行,适用于需要同时执行辅助操作(如日志清理、配置刷新)的场景。

  5. 配置部署策略

    如果您需要一次发布多台主机,Flow 支持分批发布,您可在主机部署任务中指定对应的部署策略。假如您有 4 台主机,选择分 2 批发布,则每一批自动发布 2 台主机。

    暂停方式

    说明

    第一批暂停

    第一批发布完成后,您可先进行验证,点击继续后可执行后续发布。

    不暂停

    每一批发布完成后,自动执行后续批次的发布。

    每批暂停

    每一批发布完后,都需要手动确认是否继续发布。

    分批数量:指定主机分批的数量,指定分批发布的数量,会按照相应的数量进行分批部署。

说明

如需在部署时使用环境变量,请参见环境变量配置。

整体配置参考以上各项参数说明。

部署机制与制品传输

全量下载

主机部署每次均为全量下载整个制品包到目标主机,不支持增量更新。即使仅修改了一个文件,部署时也会重新下载完整的制品包。

构建与部署的关系

流水线中的"构建"和"部署"分别在不同环境执行:

  • 构建阶段:在云效的构建集群中执行。构建配置中的"安装依赖"(如 JDK、Maven、Node.js)是在构建集群上安装,而非在您的 ECS 上安装。构建完成后,产物被打包上传至制品仓库。

  • 部署阶段:在您的目标主机上执行。部署时从制品仓库下载制品包到主机的下载路径,然后执行部署脚本中的命令。

HTML/静态资源部署

将 HTML 等静态项目部署到 ECS,需在构建步骤中将原始文件打包为制品(例如使用 tar 命令),在部署步骤的部署脚本中将制品解压释放到 Web 服务器的指定目录。示例:

mkdir -p /usr/share/nginx/html
tar zxvf /home/admin/app/package.tgz -C /usr/share/nginx/html/

指定目录部署

如需将 Jar 包等制品传输到自定义目录(如 /app/jar/zh),可在部署脚本中编写解压及目录操作命令:

mkdir -p /app/jar/zh
tar zxvf /home/admin/app/package.tgz -C /app/jar/zh/
cd /app/jar/zh && sh start.sh

也可提前将启动脚本(如 start.sh)放置在目标目录中,部署时仅需解压制品并调用该脚本即可。

使用 Docker Compose 部署

云效支持通过 Docker Compose 将应用部署到主机,您需要在部署脚本中执行 docker-compose 相关命令。

前提条件

目标主机已安装 Docker 和 docker-compose。

准备 docker-compose.yml

流水线不会自动将代码库中的 docker-compose.yml 文件同步到目标服务器。通过以下方式确保部署时该文件在目标主机上可用:

  • 方式一:在构建阶段将 docker-compose.yml 与项目代码一起打包进制品,部署时自动下载到主机,在部署脚本中解压即可。

  • 方式二:在部署脚本中通过 wgetscpgit clone 等命令将文件传输到目标目录。

部署脚本示例

# 解压制品到部署目录
mkdir -p /home/admin/app
tar zxvf /home/admin/app/package.tgz -C /home/admin/app/

# 进入项目目录并启动服务
cd /home/admin/app
docker-compose up -d
说明

对于 Python 等项目,同样需在构建时将代码上传至制品仓库并在部署时下载解压,或在部署脚本中通过 git clone 拉取代码到目标主机。

多环境与多地域部署

跨地域部署

支持通过一条流水线将应用部署到不同地域(如华东、华北或海外地域)的 ECS。操作方法:为各目标地域分别创建独立的主机组,然后在流水线中依次添加对应主机组的主机部署任务。

多微服务编排

多个微服务需要发布到多台服务器时,有两种编排方式:

  • 单流水线:在一条流水线中配置多个构建步骤和主机部署步骤,适合关联性强、需要统一发布的微服务。可通过并行部署提高效率。

  • 多流水线:为每个微服务创建独立的流水线,适合需要独立维护和独立发布节奏的场景。

无需为每台服务器单独创建流水线。

部署环境选择

流水线不支持在运行时动态选择部署环境。建议为不同环境(如测试、预发、生产)创建独立的主机组,在流水线中配置多个主机部署步骤,并在各步骤之间添加手动确认节点来控制执行流程,实现按需发布。

组件选择

部署到阿里云 ECS 时,应选择主机部署组件而非ECS应用组件。主机部署通过 Runner 连接主机执行部署,能正确关联 ECS 实例;ECS应用组件通过 API 方式部署,适用场景不同。

管理主机部署任务

查看部署详情

配置完部署任务后,运行流水线将制品部署到指定的主机组。在部署过程中,单击部署详情查看最新部署状态。在流水线运行详情页面,找到部署阶段的主机部署任务,单击右侧的部署详情按钮进入部署详情页面。

部署状态

说明

部署中

可以执行终止操作,并查看日志。

待部署

当前无操作。

已成功

可以查看部署成功的日志。

已失败

失败时,您可在卡片视图上进行重试发起部署,也可查看部署日志或参见部署常见问题处理。

已跳过

当前部署任务已被跳过。

部署历史回滚

在流水线部署历史中,查看部署的历史记录,并选择需要回滚的历史部署,单击回滚按钮发起回滚操作。

回滚操作的本质是使用历史版本的制品和部署脚本重新执行一次部署任务,并非简单的状态回切。因此:

  • 若历史部署包已过期(流水线部署包仅保留 30 天),则无法执行回滚。

  • 回滚会重新下载历史制品并执行历史版本的部署脚本,请确保脚本逻辑支持重复执行。

部署故障排查

部署成功但应用未启动

如果部署任务显示成功,但在服务器上看不到应用进程,通常是因为部署脚本中未包含应用启动命令。主机部署仅负责将制品传输到目标主机并执行部署脚本中的命令,不会自动启动应用。请确保部署脚本中包含以下操作:

  1. 解压制品包到目标目录。

  2. 执行应用启动命令(如 sh start.shjava -jar app.jar &)。

SLB 流量控制

如需在部署过程中实现 SLB(负载均衡)流量摘除和恢复,建议通过以下方式操作:

  1. 为需要单独控制流量的主机创建单机主机组(每个主机组仅包含一台主机)。

  2. 在流水线中按顺序编排多个主机部署任务,确保同一台主机的摘流、部署、验证、恢复流量等步骤按序执行。

  3. 部署脚本中通过调用 SLB API 或自定义脚本实现流量摘除和恢复。

重要

请确保摘流和恢复流量操作在同一主机组内执行,避免因操作对象不一致导致流量异常。