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

GitHub同一仓库不同分支指定不同自托管Runner部署配置问题

实现同一仓库不同分支对应不同自托管Runner部署

第一步:给自托管Runner添加环境标签

要区分DEV和STG环境的Runner,先给对应的Runner打上专属标签:

  • 进入仓库的「Settings」→「Actions」→「Runners」页面
  • 编辑DEV环境的Runner,添加标签 env:dev
  • 编辑STG环境的Runner,添加标签 env:stg

第二步:修改Workflow配置

调整原有配置,实现分支触发、动态选择Runner的逻辑:

name: Build and Deploy
on:
  push:
    branches: [ "main", "release" ]  # 同时监听main和release分支的推送

jobs:
  build_push:
    name: Build and push image to ECR
    runs-on: ubuntu-latest
    steps:
      - name: Check out code
        uses: actions/checkout@v2
      
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-south-1

      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1
        with:
          mask-password: 'true'

      - name: Build, tag, and push image to Amazon ECR
        env:
          ECR_REGISTRY: ${{ vars.ECR_REGISTRY }}
          ECR_REPOSITORY: ${{ vars.ECR_REPOSITORY }}
          # 给镜像标签加上分支标识,避免不同分支镜像覆盖
          IMAGE_TAG: ${{ github.ref_name }}-${{ vars.IMAGE_TAG }}
        run: |
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

  deploy:
    # 根据分支动态显示部署环境名称
    name: Deploy on ${{ github.ref == 'refs/heads/main' && 'DEV' || 'STG' }} server
    # 根据分支选择对应标签的自托管Runner
    runs-on: ${{ github.ref == 'refs/heads/main' && 'self-hosted,env:dev' || 'self-hosted,env:stg' }}
    needs: build_push
    env:
      ECR_REGISTRY: ${{ vars.ECR_REGISTRY }}
      ECR_REPOSITORY: ${{ vars.ECR_REPOSITORY }}
      IMAGE_TAG: ${{ github.ref_name }}-${{ vars.IMAGE_TAG }}  # 和构建阶段保持一致
      # 根据分支设置容器名称,避免环境间冲突
      CONTAINER_NAME: ${{ github.ref == 'refs/heads/main' && 'test-insurance-dev' || 'test-insurance-stg' }}
    steps:
      - name: Retrieve authentication token
        run: aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin $ECR_REGISTRY
      - name: Pull the docker image
        run: docker pull $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
      - name: Delete old container
        run: docker rm -f $CONTAINER_NAME || true
      - name: Run the docker container
        run: docker run -d --name $CONTAINER_NAME $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

关键配置说明

  1. 触发分支:修改on.push.branches,同时包含main和release,实现两个分支推送时触发Workflow。
  2. 动态选择Runner:通过github.ref判断当前推送的分支,选择对应标签的Runner。self-hosted,env:dev表示选择同时带有self-hosted和env:dev标签的Runner。
  3. 镜像标签与容器名称优化:给镜像标签加上分支名(github.ref_name),并根据分支设置不同的容器名称,避免DEV和STG环境的镜像、容器互相覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:09:49