如何为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
相关产品推荐
相关产品推荐

