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
关键配置说明
- 触发分支:修改
on.push.branches,同时包含main和release,实现两个分支推送时触发Workflow。 - 动态选择Runner:通过
github.ref判断当前推送的分支,选择对应标签的Runner。self-hosted,env:dev表示选择同时带有self-hosted和env:dev标签的Runner。 - 镜像标签与容器名称优化:给镜像标签加上分支名(
github.ref_name),并根据分支设置不同的容器名称,避免DEV和STG环境的镜像、容器互相覆盖。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

