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

如何为Node.js项目的main与staging分支配置独立自托管GitHub Actions部署至AWS EC2?

实现不同分支绑定独立自托管GitHub Actions Runner的方案

要让main和staging分支分别触发对应的自托管Runner,核心是通过**标签(Labels)**为Runner分配专属任务,再在Workflow中指定分支触发条件与对应标签的Runner绑定。以下是具体操作步骤:

1. 为两个自托管Runner设置专属标签

每个Runner需要一个唯一标签,用于区分其对应的部署环境:

  • 注册main分支对应的Runner时,添加prod-runner标签:
    ./config.sh --url https://github.com/你的仓库地址 --token 你的注册令牌 --labels prod-runner
    
  • 注册staging分支对应的Runner时,添加staging-runner标签:
    ./config.sh --url https://github.com/你的仓库地址 --token 你的注册令牌 --labels staging-runner
    

如果已完成Runner注册,可在GitHub仓库的Settings > Actions > Runners页面,编辑对应Runner的标签,添加上述专属标签。

若两个Runner部署在同一EC2实例上,注册时需通过--work参数指定不同工作目录,避免文件冲突:

# 生产环境Runner工作目录
./config.sh --url ... --work /home/ubuntu/actions-prod
# 预发布环境Runner工作目录
./config.sh --url ... --work /home/ubuntu/actions-staging

2. 创建分支专属的Workflow配置

分别为main和staging分支编写独立的Workflow文件,指定触发分支与对应标签的Runner:

针对main分支的生产部署Workflow(.github/workflows/deploy-prod.yml)

name: Deploy to Production
on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: prod-runner
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      
      - name: 安装依赖
        run: npm install
      
      - name: 构建项目
        run: npm run build
      
      - name: 部署到生产环境
        run: |
          # 替换为你的生产环境部署命令,如重启服务、同步文件
          sudo systemctl restart your-node-prod-service

针对staging分支的预发布部署Workflow(.github/workflows/deploy-staging.yml)

name: Deploy to Staging
on:
  push:
    branches: [ staging ]

jobs:
  deploy:
    runs-on: staging-runner
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      
      - name: 安装依赖
        run: npm install
      
      - name: 构建项目
        run: npm run build
      
      - name: 部署到预发布环境
        run: |
          # 替换为你的预发布环境部署命令
          sudo systemctl restart your-node-staging-service

3. 验证运行逻辑

  • 推送代码到main分支,检查GitHub Actions面板,确认prod-runner触发部署任务;
  • 推送代码到staging分支,确认staging-runner触发对应任务。

常见问题排查

  • 若任务未触发,检查Workflow文件中的分支名称是否与实际分支完全匹配;
  • 若Runner未接收到任务,确认runs-on指定的标签与Runner的标签完全一致(区分大小写);
  • 同一EC2实例上的两个Runner需确保服务进程独立,避免端口或资源冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:22:52