主机部署问题

更新时间:
复制 MD 格式

本文主要介绍使用云效在安装、主机部署接入中,常见的问题及解决方案。

主机代理问题 — 旧版 agent

如何解决自有主机显示离线?

服务器上确认下agent是否在线,如果是离线,则需要重启agent。附agent基础操作:

  • 查看状态:

    /home/staragent/bin/staragentctl status
  • 重启:

    /home/staragent/bin/staragentctl restart
  • 卸载:

    /home/staragent/bin/staragentctl stop
    rm -rf /home/staragent
    rm /usr/sbin/staragent_sn

主机部署失败且没有失败的详情日志怎么办?

如果使用的是非阿里云ECS,确认下是否自有主机是通过镜像生成的,如果是建议先卸载agent,然后重新添加自有主机后重试。

主机组添加不了非阿里云ECS的自有主机怎么办?

非阿里云ECS的自有主机建议使用混合云托管模式,具体参考:https://help.aliyun.com/document_detail/201140.html。单击新建主机组,在弹出的自有主机·添加主机对话框中,将添加方式选择为混合云托管(将非阿里云机器注册为阿里云托管实例),然后选择服务授权地域,即可在可添加的主机列表中查看并添加非阿里云ECS的自有主机。

主机代理问题 — 流水线 Runner

创建主机组/构建集群报错或手动安装 Runner 报错

报错信息为实例 i-2ze99uh20nyrykgdobvb runner 安装失败!(3000005)

目前 Flow 上创建主机组/私有构建集群支持通过 ECS 主机选择、自有主机安装两种方式,但对于同一台机器不可以在同一个云效组织中使用两种方式分别添加。

例如,你已经通过 ECS 主机选择的方式添加了主机 A,该主机无法再次通过自有主机方式添加进主机组。

  • 只有将主机上的 Runner 卸载后,才可以更换添加方式,通过以下命令卸载 Runner 。

    #  停止指定的systemd服务。
    systemctl stop runner-{版本}-{租户名称}.service
    #  删除该服务的systemd配置文件。
    rm -rf /etc/systemd/system/runner-{版本}-{租户名称}.service
    #  删除与该租户相关的runner配置目录。
    rm -rf /root/yunxiao/{租户名称}/runner/config
  • 部署命令可以在机器上手动执行成功,但在 Flow 流水线上执行失败。

    • 添加与命令相关的环境变量,例如:/source /root/.bash_profile; source /etc/profile

    • 部署相关脚本使用绝对路径(例如/home/admin/app/deploy.sh),不要使用相对路径。

ECS镜像复制导致Runner 配置冲突,导致主机部署失败

在主机部署过程中,通过A机器的镜像复制了一台B机器,由于B机器复用了A机器的Runner的配置,从而导致了通道占用冲突:

  • 部署目标错乱:本应部署到B机器的任务被错误下发至A机器。

  • 根因分析:镜像复制后未重置Runner唯一标识(如注册信息),导致调度系统无法区分A/B机器。

  • 关键影响:自动化流程中断,可能引发环境污染或服务重叠。

  • 解决方案

    说明

    如果采用镜像复制机器与Runner配置方式,建议在B机器上重新安装Runner时,务必确保AB机器各自的Runner通道ID具有唯一性。

    # 在B机器上卸载Runner
    #查看 Runner 服务名称,通常 Runner 服务的名称为 runner-{版本}-{租户名称}.service
    ls -al /etc/systemd/system | grep runner
    systemctl stop runner-{版本}-{租户名称}.service
    rm -rf /etc/systemd/system/runner-{版本}-{租户名称}.service
    rm -rf /root/yunxiao/{租户名称}/runner/config
    # 删除B机器上与runner相关的目录及其下文件
    rm -rf /root/yunxiao/ 
    # 验证 Runner 是否已彻底清理
    ps -ef | grep runner

流水线 Runner 问题排查方法

重要

在开始处理主机部署、私有构建机申请环境失败问题之前请先按以下步骤确认机器上云效runner状态。

使用工具排查

只支持Linux系统

  1. 下载工具:

    wget "https://rdc-public-software.oss-cn-hangzhou.aliyuncs.com/runner/runnerStatusCheck" -O runnerStatusCheck
  2. 设置执行权限:

    chmod u+x runnerStatusCheck
  3. 执行工具:

    ./runnerStatusCheck
  4. 按照工具提示信息进行处理,示例如下。

    [INFO] prepare to check disk
    check disk output
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/root        99G   59G   36G  62% /
    devtmpfs        3.7G     0  3.7G   0% /dev
    tmpfs           3.7G     0  3.7G   0% /dev/shm
    tmpfs           3.7G  600K  3.7G   1% /run
    tmpfs           3.7G     0  3.7G   0% /sys/fs/cgroup
    tmpfs           748M     0  748M   0% /run/user/0
    [INFO] prepare to check runner status
    RunnerService: runner-v0.0.7-be-1fy1ifhg1ylcvqv7rwinqpgh.service  status is active running
    RunnerService: runner-v0.0.7-be-3n5goas4jkp3clmcaopzeebj.service  status is active running
    RunnerService: runner-v0.0.7-be-6fcm3z72s2fsnrkcjl7pbpsa.service  status is not running , please exeute 'systemctl restart runner-v0.0.7-be-6fcm3z72s2fsnrkcjl7pbpsa.service ' to restart runner service
    RunnerService: runner-v0.0.7-be-7srpetjhkcy40btoontpsy8a.service  status is not running , please exeute 'systemctl restart runner-v0.0.7-be-7srpetjhkcy40btoontpsy8a.service ' to restart runner service
    RunnerService: runner-v0.0.7-be-7ypo76lza21lljapgp5xtopi.service  status is active running
    RunnerService: runner-v0.0.7-be-9zouh99ta6ycx2dq3iggekk9.service  status is not running , please exeute 'systemctl restart runner-v0.0.7-be-9zouh99ta6ycx2dq3iggekk9.service ' to restart runner service
    RunnerService: runner-v0.0.7-be-ao81clhgw56bo0jopj5jgwn3.service  status is active running
    RunnerService: runner-v0.0.7-be-bn9wuh8n4kiba0aa0a8dcirb.service  status is active running
    RunnerService: runner-v0.0.7-be-fsr2gvdefe5yxl3nyijp36d3.service  status is active running
    RunnerService: runner-v0.0.7-be-haphfbrhuudbxkzwpcuhn0hk.service  status is not running , please exeute 'systemctl restart runner-v0.0.7-be-haphfbrhuudbxkzwpcuhn0hk.service ' to restart runner service
    RunnerService: runner-v0.0.7-be-mwkcqcv2hbwozrwmmczopzgm.service  status is active running
    RunnerService: runner-v0.0.7-be-qdiyjifmn0bbkafobtfpkrst.service  status is not running , please exeute 'systemctl restart runner-v0.0.7-be-qdiyjifmn0bbkafobtfpkrst.service ' to restart runner service
    RunnerService: runner-v0.0.7-be-qx6gaxojjjpzeblor692hrwk.service  status is active running
    RunnerService: runner-v0.0.7-be-s5f7tixziynazefazqhls9ob.service  status is active running
    RunnerService: runner-v0.0.7-be-uwdlmn516wd8emqebhgqwq6x.service  status is active running
    RunnerService: runner-v0.0.7-be-xjmxrlbzrtksuafv4oyg8qtf.service  status is active running
    Check runner service status finished.

手动排查

  1. 检查系统 Linux 版本是否匹配。

    通过命令lsb_release -a查看 Linux 发行版本信息是否满足条件。目前云效统一 Runner 支持以下 Linux 发行版本:

    • centos 6+ 及以上

    • ubuntu 16.04+ 及以上

    • Alibaba Cloud Linux 2/3

  2. 检查 Runner service 状态和日志。

    通过命令ls -al /etc/systemd/system | grep runner查看 Runner 服务名称,通常 Runner 服务的名称为 runner-{版本}-{租户名称}.service,如下所示。

    [root@ecs-for-batch-deploy-1 ~]# lsb_release -a
    LSB Version:    :core-4.1-amd64:core-4.1-noarch
    Distributor ID: CentOS
    Description:    CentOS Linux release 8.2.2004 (Core)
    Release:        8.2.2004
    Codename:       Core
    [root@ecs-for-batch-deploy-1 ~]# ls -al /etc/systemd/system | grep runner
    -rw-r--r--    1 root root  550 10月 11 10:50 runner-v0.xxx                    t.service
    [root@ecs-for-batch-deploy-1 ~]#

    通过命令systemctl status runner-{版本}-{租户名称}.service查看 Runner 服务状态,如果服务状态为 active(running),则服务正常,如下所示。

    Release:        8.2.2004
    Codename:       Core
    [root@ecs-for-batch-deploy-1 ~]# ls -al /etc/systemd/system | gr
    -rw-r--r--   1 root root  550 10月 11 10:50 runner-v0.0.5-be-bnyxxx  xxx yt.service
    [root@ecs-for-batch-deploy-1 ~]# systemctl status runner-v0.0.5-be-bnyxxxpci0q6|06yt.service
    ● runner-v0.0.5-be-bnxxx yt.service - Aliyun yunxiao runner polling jo
         Loaded: loaded (/etc/systemd/system/runner-v0.xxx yt.service)
         Active: active (running) since Tue 2022-10-11 10.xxx ago
       Main PID: 1405243 (runner)
          Tasks: 10 (limit: 48875)
         Memory: 13.6M
         CGroup: /system.slice/runner-v0.0.5-be-brxxx06yt.service
                 └─1405243 /usr/local/share/yunxiao-runner/v0.0.5/runner run --configPath=/r
    10月 11 11:01:03 ecs-for-batch-deploy-1 runner[1405243]: INFO[2022-10-11T11:01:03+08:00]
    10月 11 11:01:03 ecs-for-batch-deploy-1 runner[1405243]: INFO[2022-10-11T11:01:03+08:00]
    10月 11 11:01:18 ecs-for-batch-deploy-1 runner[1405243]: WARN[2022-10-11T11:01:18+08:00]

    另外,你也可以通过命令journalctl -u runner-{版本}-{租户名称}.service -a --no-pager --since '5 minutes ago' -f查看 Runner 执行日志。

如何解决阿里云ECS提示deploy channel error或是离线?

  • ECS上确认下云助手是否正常,重启下云助手,具体可以参考查看执行结果及修复常见问题

  • 如果云助手正常,确认下ECS的磁盘是否满了,如果是可以清理下磁盘。

主机部署之前运行正常,本次运行机器上的包不是最新或下载不到最新构建包怎么办?

根据提示日志检查服务器磁盘是否满了,如是请自行清理。

怎么进行多任务回滚?

回滚是按照任务回滚的,如果配置了3个任务,那3个任务都需要分别回滚,建议您可以通过在部署历史的下拉菜单中选择切换回滚任务。

部署失败,服务没有启动起来怎么办?

直接在服务器上执行对应的命令调试下,确保自己的部署脚本没有问题。

  1. 云效执行的部署逻辑是根据您部署配置中配置的命令去服务器上执行的,复制部署配置页面中配置的命令直接手动在服务器上执行,如果结果和云效执行的结果一样,需要你自行调试部署脚本,确认问题。比如:在服务器上新建一个sh文件,然后把云效上部署配置页面上的部署脚本框中的命令复制粘贴到新建的sh文件中,然后执行sh文件调试下,确保用户提供的脚本没有问题。

  2. 如果在服务器上直接执行可以,在云效执行没启动,确认下脚本中是否使用了相对路径,将相对路径改成绝对路径后重试。

Windows主机部署失败提示deploy channel error怎么办?

目前云效不支持添加Windows主机到云效。可以尝试以下两个替代方案:

  1. 可以通过一台Linux服务器中转,在部署脚本中编写命令,通过在Linux上执行命令跟Windows交互。

  2. 可以将构建产物通过云效的OSS上传组件传到你自己的OSS上,后续Windows主机从OSS下载包部署。

主机部署报错环境变量not a valid identifier怎么办?

+ export pause_strategy=FirstBatchPause
+ pause_strategy=FirstBatchPause
+ export rootMixActionCode=ENTER
+ rootMixActionCode=ENTER
+ export TIMESTAMP=1607427603743
+ TIMESTAMP=1607427603743
+ export appId=0
+ appId=0
+ export execute_user=root
+ execute_user=root
+ export ENGINE_PIPELINE_CREATOR_ALIYUN_PK=1218858987274713
+ ENGINE_PIPELINE_CREATOR_ALIYUN_PK=1218858987274713
+ export triggerMode=1
+ triggerMode=1
+ export abc=哈 哈哈哈
+ abc=哈
/tmp/rdc_deploy_command_1607427664248_globalParams.sh: line 16: export: '哈哈哈': not a valid identifier
[ERROR] 环境变量中含有特殊字符,请按照文档排查
https://thoughts.aliyun.com/sharespace/5e86a419546fd9001aee81f2/docs/5fbca20e550406001d388abc
------打印环境变量------
]
[2020-12-08 19:41:09]执行结果编码:[
exit 0
]
DeployCommand execution completed

因为环境变量中包含了特殊字符,需要通过以下操作对流水线进行配置才可正常使用环境变量:

  1. 主机部署任务中,勾选 变量进行编码

  2. 在部署脚本中,把您需要使用的所有环境变量进行 Base 64 解码。比如要使用PIPELINE_ID的环境变量,在部署脚本最前面添加一行export PIPELINE_ID=$(echo $PIPELINE_ID | base64 -d)

    + export PIPELINE_NAME=6aKE5Y+RYmFzZTY05rWL6K+V5rWB5rC057q/
    + PIPELINE_NAME=6aKE5Y+RYmFzZTY05rWL6K+V5rWB5rC057q/
    + export BUILD_NUMBER=Ng==
    + BUILD_NUMBER=Ng==
    + export FLOW_ENGINE_ENCODE_GLOBAL_PARAM=dHJ1ZQ==
    + FLOW_ENGINE_ENCODE_GLOBAL_PARAM=dHJ1ZQ==
    + export DATETIME=MjAyMC0xMi0wOC0yMC0yMi01MA==
    + DATETIME=MjAyMC0xMi0wOC0yMC0yMi01MA==
    + export parentMixFlowInstId=MA==
    + parentMixFlowInstId=MA==
    + export GIT_BRANCH=null
    + GIT_BRANCH=null
    + export CI_COMMIT_SHA=MmZhNThkMTk1OWFjYjcwZDQzNDZjZDBlM2E2YzhhYzQyNmE2MTE4NQ==
    + CI_COMMIT_SHA=MmZhNThkMTk1OWFjYjcwZDQzNDZjZDBlM2E2YzhhYzQyNmE2MTE4NQ==
    + export machine_group_id=MTE5MDA=
    + machine_group_id=MTE5MDA=
    + export ENGINE_PIPELINE_INST_ID=MjExNzYxMw==
    + ENGINE_PIPELINE_INST_ID=MjExNzYxMw==
    ------打印环境变量------
    哈 哈哈哈
    ]
    [2020-12-08 20:23:46]执行结果编码:[
    exit 0
    ]
    DeployCommand execution completed

主机部署报错 User.NoPermission怎么办?

在部署详情中,显示具体的部署错误码,不同的错误码对应的错误说明和错误排查如下:

User.NoPermission,用户没有调用某个API的权限。请检查部署组的服务连接是否正常。

主机部署服务已成功启动,但流水线仍持续显示“部署中”

主机部署脚本持续显示“部署中”通常由两个原因导致:返回码未正确传递或子进程未正常退出。

脚本示例demo:https://atomgit.com/flow-example/spring-boot/blob/master/deploy.sh

以下是具体排查步骤与解决方案:

  1. 返回码验证

    • 在脚本关键步骤(如服务启动命令)后添加 echo $?,确保返回码为0。若返回非0值,需检查对应命令的异常处理逻辑。

    • 脚本末尾需显式声明 exit 0,避免隐式依赖最后一条命令的返回码。

  2. 子进程管理

    • 若使用 nohup 启动后台进程(如Java服务),需确认采用规范写法:nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 &。末尾的 & 表示后台运行,避免阻塞主进程。

    • 检查其他可能创建子进程的命令(如 systemd 或 docker run -d),确保其正确分离进程上下文。

  3. 超时机制强化

    • 若服务启动耗时较长,可在脚本中增加轮询检测(如HTTP健康检查),待服务就绪后再退出脚本,避免依赖固定超时阈值。

示例修正逻辑:

# 启动服务并捕获返回码
nohup java -jar app.jar > log.txt 2>&1 &
echo "Service started with exit code: $?"
# 显式声明脚本成功退出
exit 0

若上述优化后问题仍然存在,则需检查当前阶段的流水线配置相关参数是否存在问题,或检查云效主机Runner Service状态是否异常。

主机部署阶段,清理工作区任务卡住怎么办?

如果您是手动安装的Docker服务,建议您按照以下流程检查服务状态并进行相关操作。

# 查看docker状态
systemctl status docker
###输出关键信息:
# Active: active (running):服务正在运行
# Active: inactive (dead):服务未启动
# Loaded: loaded (...):服务已正确加载配置
#  查看Docker客户端和服务器的各种信息,包括镜像、容器、数据卷等详情。
docker ps
#  重启docker服务
sudo systemctl restart docker

构建/部署运行中,无日志或者主机状态显示为离线

  • 检查主机磁盘是否满了df -hl ,如果磁盘已满请尝试清理后重试。

  • 检查 Runner service 状态,如果状态非 active(running),通过以下步骤重启 Runner service:

    1. 获取服务名称,Runner 的服务名称格式为:runner-{版本}-{租户名称}.service

      systemctl | grep "runner-v" | awk '{print $1}'
    2. 使用获取到的服务名称替换以下命令中$SERVICE_NAME并执行,重启 Runner service。

      systemctl restart $SERVICE_NAME
  • 检查网络连通性是否正常。

    • 通过systemctl status runner-{版本}-{租户名称}.service查询 Runner service 状态,并截取 service 进程参数 --configPath=***,如下所示:

      [root@ecs-for-batch-deploy-1 ~]# systemctl status runner-v0.0.5-be-bnyxxx1llzpci0q606yt.service
      ● runner-v0.0.5-be-xxx_llzpci0q606yt.service - Aliyun yunxiao runner polling jobs to execute
         Loaded: loaded (/etc/systemd/system/runner-v0.0.5-be-bxxx pci0q606yt.service; enabled; vendor preset: disabled)
         Active: active (running) since Tue 2022-10-11 10:50:56 CST; 41min ago
       Main PID: 1405243 (runner)
          Tasks: 10 (limit: 48875)
         Memory: 13.7M
         CGroup: /system.slice/runner-v0.0.5-be-bnyxxx q606yt.service
                 └─1405243 /usr/local/share/yunxiao-runner/v0.0.5/runner run --configPath=/root/yunxiao/be-bnykv60t831llzpci0q606yt/runner/config
      10月 11 11:31:46 ecs-for-batch-deploy-1 runner[1405243]: INFO[2022-10-11T11:31:46+08:00] [runner] no new job, skip.                    runner=9e7073c92b2fa8b35bc0efd3eec051f8
      10月 11 11:31:46 ecs-for-batch-deploy-1 runner[1405243]: INFO[2022-10-11T11:31:46+08:00] counter current: 0, limit: 50
      10月 11 11:32:01 ecs-for-batch-deploy-1 runner[1405243]: WARN[2022-10-11T11:32:01+08:00] Response status code: 204 body data:
      10月 11 11:32:01 ecs-for-batch-deploy-1 runner[1405243]: INFO[2022-10-11T11:32:01+08:00] POST /api/v2/builds/request, time spent 15.07 s
      10月 11 11:32:01 ecs-for-batch-deploy-1 runner[1405243]: INFO[2022-10-11T11:32:01+08:00] [runner] no new job, skip.                    runner=9e7073c92b2fa8b35bc0efd3eec051f8
      10月 11 11:32:01 ecs-for-batch-deploy-1 runner[1405243]: INFO[2022-10-11T11:32:01+08:00] counter current: 0, limit: 50
      10月 11 11:32:16 ecs-for-batch-deploy-1 runner[1405243]: WARN[2022-10-11T11:32:16+08:00] ...
    • 查看 configPath 中URL cat {***}/config.yml | grep url

      [root@ecs-for-batch-deploy-1 config]# cat /root/yunxiao/be-bnykv60t83lllzpci0q606yt/runner/config/config.yml | grep url
      url: https://xxx.com
      [root@ecs-for-batch-deploy-1 config]#
    • 通过以下命令判断是否可以正常访问。

      # 注意替换下面命令中的url
      curl '{url}/api/v2/runner/storage/latest?os=linux&arch=amd64'