ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

AngusGit 流水线运行器怎么接到构建机:在那台机器上执行接入命令

AngusGit 流水线运行器怎么接到构建机:在那台机器上执行接入命令

这篇讲流水线 YAML 写好了、任务却没人执行时,怎么把运行器接到构建机上。看完你可以在控制台新增 Runner(装在构建机上、替 AngusGit 执行任务的程序),生成 1 小时有效的注册令牌,按 Docker 或 Zip 把接入命令复制到构建机上执行,并确认它心跳上线。

流水线和运行器在团队版和企业版中提供;社区版没有CI/CD菜单,本文的操作不适用。

1. 准备一台构建机

接入之前,先确认网络、容器环境和宿主机环境这三件事。Docker 方式会在这台机器上为每个任务拉起容器(按镜像临时启动的隔离环境);Zip 方式则让任务直接在宿主机(运行器进程所在的那台机器)上执行。

检查项适用方式要求
网络连通全部方式构建机主动连 AngusGit(HTTPS / WebSocket 长连接),AngusGit 不需要反连构建机
容器环境Docker 方式机器装好 Docker,当前用户有权限执行docker并挂载/var/run/docker.sock
宿主机环境Zip 方式机器装好 JDK 21、curl和unzip,当前用户有sudo权限(安装到/opt/AngusRunnerAgent)

在构建机上用curl -I https://<你的 AngusGit 地址>试一下,能返回 HTTP 状态码,说明网络是通的。

2. 在控制台新增运行器

  1. 打开接入页

    侧栏进入CI/CD → 运行器,点右上角新增 Runner,页面切到接入新 Runner。

  2. 确认控制面地址

    控制面地址默认取当前浏览器打开的站点地址。页面提示「若 Runner 所在网络访问不到,请改为控制面对外可达的 URL」。例如你在办公网用域名访问 AngusGit,而构建机在机房只能用内网 IP 访问,这里就要改成构建机能访问的那个地址。

  3. 填名称和标签

    Runner 名称(可选)写清是哪台机器,例如build-linux-01。标签(可选)用逗号分隔,例如linux,docker。流水线里的任务会按标签挑运行器,这里的标签要和任务里写的对得上。不确定时先留空,用每种接入方式的默认标签。最大并发 Job 数是这台机器同时最多跑几个任务(Job 就是流水线里的一组步骤),默认 4,可填 1 到 64,按机器的 CPU 和内存决定。

  4. 生成注册令牌

    点注册令牌旁的生成令牌。页面提示「已签发短期注册令牌(明文仅显示一次)」,下方显示「令牌有效期至 …」,有效期 1 小时。令牌会自动填进下面的命令里。没有令牌时点复制命令,会提示「请先生成或粘贴注册令牌后再复制命令」。

下面这张是还没点生成令牌时的页面。控制面地址是https://git.anguskit.com,名称build-linux-01,标签linux,docker,最大并发 Job 数 4。黄色提示是「尚未填写令牌」,复制命令是灰的。三个页签是Zip 安装、Docker 一键拉起、一键安装脚本,默认停在Docker 一键拉起。页签上没有「推荐」两个字,推荐用 Docker 是本文的建议。

3. 选一种接入方式,复制命令

三个页签生成的命令,都已经带上了你填的地址、名称、标签、并发数和令牌。

Docker 一键拉起(推荐)

页签提示「从 AngusRepo 公开仓库拉取 repo.anguskit.com/docker-public/angus-runner-agent」。命令形如:

dockerrun-d--restart=always--namebuild-linux-01\-v/opt/AngusRunnerAgent/logs:/opt/AngusRunnerAgent/logs\-v/opt/AngusRunnerAgent/data:/opt/AngusRunnerAgent/data\-v/var/run/docker.sock:/var/run/docker.sock\-eRUNNER_SERVER_URL=wss://git.anguskit.com/ws/runner\-eRUNNER_REGISTER_TOKEN=<注册令牌>\-eRUNNER_NAME=build-linux-01\-eRUNNER_LABELS=linux,docker\-eRUNNER_MAX_CONCURRENCY=4\repo.anguskit.com/docker-public/angus-runner-agent:1.0.0

几个要点:--restart=always让运行器在机器重启后自动恢复;挂载/var/run/docker.sock是为了让运行器能在这台机器上为每个任务启动容器;标签留空时默认是linux,docker。

Zip 安装

页签提示「从 AngusRepo 下载 Zip,安装到 /opt/AngusRunnerAgent」。命令会依次下载并解压AngusRunnerAgent-1.0.0.zip,复制到/opt/AngusRunnerAgent,设置RUNNER_SERVER_URL、RUNNER_REGISTER_TOKEN等环境变量,然后执行./doctor-native.sh检查本机环境,最后执行./startup-agent.sh启动。

这种方式下,任务直接在宿主机上执行,用的是机器上装好的 JDK、Node.js 等工具。页签提示「NATIVE 流水线不要加 docker 标签」:带了docker标签的运行器会被当作 Docker 运行器,领不到宿主机任务。

一键安装脚本

命令形如:

curl-fsSLhttps://git.anguskit.com/runner/install.sh|bash-s--\--urlhttps://git.anguskit.com--token<注册令牌>\--namebuild-linux-01--labelslinux,docker --max-concurrency4

页签提示「从控制面下载 /runner/install.sh,在目标机用 Docker 拉起公开镜像」。效果和 Docker 方式相同,适合不想手动拼docker run参数的情况。

两种 Docker 方式和 Zip 方式分别适合什么任务,见文末参考里的「Docker 还是宿主机」一文。

4. 在构建机上执行,等它上线

把复制的命令粘贴到构建机的终端里执行。然后回到控制台,点完成并等待上线。

页面显示「正在等待 “build-linux-01” 心跳上线…」,每隔几秒检查一次。运行器连上之后,提示「Runner “build-linux-01” 已上线」,列表里出现这台机器,状态是在线或空闲。

接入成功后,可以到 CI/CD → 运行器 对照列表。当前实例已经有两台空闲的运行器:dev-1运行模式 NATIVE,执行器 SHELL,标签linux、native、dev,并发 0/2;priv-1运行模式 DOCKER,执行器 SHELL,标签linux、docker,并发 0/2。按上面命令接入的build-linux-01也会出现在这张表里,状态是空闲,最近心跳是「刚刚」。

等了 90 秒还没上线,页面会提示「等待心跳超时,请稍后刷新列表确认」。这不一定是失败,运行器可能还在拉镜像。过一两分钟刷新列表;仍然没有,按第 6 节排查。

5. 接好之后

上线之后,日常只要盯状态、改标签或暂时停用,一般不用重装。

  • 运行器的状态。列表里有在线、空闲、忙碌、离线、已禁用几种。运行器每 15 秒发一次心跳;超过 90 秒没有心跳、连接也断了,就会变成离线。
  • 改名称、标签和并发。在列表里打开编辑运行器修改,不用重新安装。
  • 重装或换机器。打开运行器详情的安装运行器页签,在安装 / 重装命令里重新生成命令。页面提示「重装到新主机时请重新生成或粘贴注册令牌」,因为原来那把注册令牌已经在第一次接入时用掉了。
  • 暂时不用这台机器。点禁用,它就不再领取新任务;要恢复时点启用。

私有化部署时,运维也可以在服务端配置一把共享注册令牌(CICD_RUNNER_REGISTER_TOKEN),接入时直接粘贴。这把令牌的默认值是change-me-runner-register-token,上线前一定要改掉;否则任何知道默认值、又能访问 AngusGit 的机器,都能把自己注册成运行器来领取任务。

6. 接入失败时

你看到的原因怎么处理
「等待心跳超时,请稍后刷新列表确认」,刷新后仍没有构建机访问不到控制面地址;或者注册令牌已过期在构建机上curl -I <控制面地址>检查网络;超过 1 小时的令牌重新生成,再复制一次命令
Docker 方式执行后,容器很快退出令牌不对,或者连不上控制面执行docker logs build-linux-01看最后几行报错
Docker 方式拉镜像失败构建机访问不到repo.anguskit.com让构建机能访问外网,或者把镜像提前导入到内网镜像仓库,再把命令里的镜像地址改成内网地址
Zip 方式doctor-native.sh报错缺 JDK 21 或其他依赖按它打印的提示补装,再执行./startup-agent.sh
运行器上线了,但任务一直等待中任务要求的执行方式或标签和这台运行器对不上看运行详情里任务的等待原因,排查方法见文末参考里的「运行器不接任务」一文

运行器进程自己的日志,在运行器详情的运行日志页签里能看到,页面说明是「Runner 进程日志,包含注册、心跳、接单、拉镜像和步骤执行记录」。旧版本运行器不上报这部分日志时,显示「暂无进程日志(需 Runner 升级到支持上报的版本)」,这时到构建机上看/opt/AngusRunnerAgent/logs目录。

常见问题

一台机器能装几个运行器?

通常一个就够了,用最大并发 Job 数控制同时跑几个任务。需要在同一台机器上同时提供 Docker 和宿主机两种执行方式时,可以装两个:一个用 Docker 方式、带docker标签,一个用 Zip 方式、不带docker标签,名称要区分开。

注册令牌过期了,已经接入的运行器会掉线吗?

不会。控制台生成的注册令牌是一次性的,只在第一次接入时使用。接入成功后,AngusGit 会给这台运行器下发一把长期身份令牌,运行器把它保存在本机,以后重启、断线重连都用这把。要再接入一台新机器时,重新生成一把注册令牌即可。

运行器要开放端口吗?

不需要。是运行器主动连 AngusGit,构建机上不需要对外开放任何端口。

小结

运行器是装在构建机上、替 AngusGit 执行流水线任务的程序。在CI/CD → 运行器 → 新增 Runner里确认构建机能访问的控制面地址,填名称、标签和并发数,点生成令牌,选一种接入方式复制命令,到构建机上执行,再点完成并等待上线。有 Docker 的机器优先用 Docker 方式,要在宿主机上直接构建就用 Zip 方式并装好 JDK 21。私有化部署时,共享注册令牌的默认值必须改掉。

结论:在CI/CD → 运行器 → 新增 Runner填好构建机可达的控制面地址、标签并点生成令牌,复制命令到构建机执行后,列表出现在线 / 空闲状态即接入完成。

参考文章

  • AngusGit 手册:运行器管理
  • AngusGit 手册:流水线基础
  • 流水线任务在哪跑:Docker 容器还是宿主机
  • 运行器不接任务:标签、在线和并发对不上
返回列表