主机部署问题

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

主机部署

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

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

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

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

服务器上确认下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,然后重新添加自有主机后重试。

高的 (74).png

怎么进行多任务回滚?

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

高的 (75).png

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

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

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

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

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

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

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

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

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

非阿里云ECS的自有主机建议使用混合云托管模式,具体参考:https://help.aliyun.com/document_detail/201140.html高的 (76).png

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

环境变量包含特殊字符1

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

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

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

    环境变量包含特殊字符2

    image

主机磁盘满导致部署失败

说明

如果您流水线构建阶段执行成功,但在主机部署时遇到失败,并且通过排查输出的日志未能明确识别到错误,可参考以下流程进行定位与排查。

  • 登录您的主机执行df -hl查看磁盘剩余空间,若磁盘空间已满,请清理磁盘空间。

  • 查看主机Runner状态以及服务的日志信息ls -al /etc/systemd/system | grep runner systemctl status runner-{版本}-{租户名称}.service

    • 如果主机显示离线可以卸载残留服务重新安装。

      #  停止指定的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",不要使用"./deploy.sh"。

  • kill 命令中类似:"ps -ef | grep athens | grep -v grep" 需要改为: "ps -ef | grep athens | grep -v grep | grep -v rdc_deploy_command"。

主机部署报错 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

云效统一Runner常见问题

排查步骤

重要

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

使用排查工具

只支持Linux系统

下载工具:

wget "https://rdc-public-software.oss-cn-hangzhou.aliyuncs.com/runner/runnerStatusCheck" -O runnerStatusCheck

设置执行权限:

chmod u+x runnerStatusCheck

执行工具:

./runnerStatusCheck

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

image.png

  • 手动排查

    • 第一步:检查系统 Linux 版本是否匹配。

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

      • centos 6+ 及以上

      • ubuntu 16.04+ 及以上

      • Alibaba Cloud Linux 2/3

      image

    • 第二步:检查 Runner service 状态和日志。

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

      image

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

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

主机组离线常见问题

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

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

  • 检查 Runner service 状态,如果状态非 active(running),通过命令systemctl restart runner-{版本}-{租户名称}.service重启 Runner service。

  • 检查网络连通性是否正常。

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

    • 查看 configPath 中URL cat {***}/config.yml | grep url

      image

    • 通过以下命令判断是否可以正常访问。

      # 注意替换下面命令中的url
      curl '{url}/api/v2/runner/storage/latest?os=linux&arch=amd64'
  • 创建主机组/构建集群报错或手动安装 Runner 报错,典型报错如下:

    image

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

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

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

      systemctl stop runner-{版本}-{租户名称}.service
      rm -rf /etc/systemd/system/runner-{版本}-{租户名称}.service
      rm -rf /root/yunxiao/{租户名称}/runner/config
    • 部署命令可以在机器上手动执行成功,但在 Flow 流水线上执行失败。

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

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

联系我们

如果您在使用云效过程中有任何疑问,欢迎您通过提工单联系支持同学,或者搜索钉钉群号31241612加入钉钉群进行反馈 。