You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions如何同时更新多台服务器?

解决两台自托管Runner同时执行更新任务的问题

问题原因

你当前的工作流仅定义了一个build任务,GitHub Actions会自动从所有标记为self-hosted的空闲Runner中挑选一台来执行该任务,因此只会触发其中一台VPS的更新,另一台会处于等待状态,直到第一台离线才会被选中。

解决方案

方案一:使用矩阵策略(推荐)

给两台自托管Runner分别添加唯一标签(比如vps-1和vps-2),然后通过矩阵策略让工作流为每个标签创建独立的任务实例,实现并行执行。

修改后的工作流代码:

jobs:
  build:
    runs-on: ${{ matrix.runner-tag }}
    strategy:
      matrix:
        runner-tag: [vps-1, vps-2]
        node-version: [16.x]

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'npm'
      # 在此添加你的VPS更新步骤(比如部署脚本、服务重启等)

操作说明:

  1. 进入GitHub仓库的Settings -> Actions -> Runners页面
  2. 分别为两台VPS的Runner添加唯一标签(比如vps-1和vps-2)
  3. 替换工作流中的runner-tag矩阵值为你设置的标签
  4. 保存并触发工作流,两台Runner会同时执行任务

方案二:创建独立任务

直接定义两个独立的job,每个job指定对应VPS的Runner标签,实现并行执行。

修改后的工作流代码:

jobs:
  build-vps1:
    runs-on: vps-1
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js 16.x
        uses: actions/setup-node@v3
        with:
          node-version: 16.x
          cache: 'npm'
      # 在此添加VPS1的更新步骤

  build-vps2:
    runs-on: vps-2
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js 16.x
        uses: actions/setup-node@v3
        with:
          node-version: 16.x
          cache: 'npm'
      # 在此添加VPS2的更新步骤

操作说明:

  1. 确保两台Runner已添加对应的唯一标签
  2. 每个job的runs-on字段设置为对应Runner的标签
  3. 触发工作流后,两个job会并行执行,同时更新两台VPS

注意事项

  • 确保部署密钥已正确配置到对应VPS,保证任务执行时拥有足够权限
  • 如果更新步骤涉及共享资源(比如同一存储库的文件操作),需根据实际情况添加锁机制避免冲突
  • 若需要控制任务并行数量,可在矩阵策略中添加max-parallel字段设置最大并行数

内容的提问来源于stack exchange,提问作者zuZuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:36:11