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

GCP多服务Git Monorepo自动化CI/CD独立部署方案咨询

GCP Monorepo 独立服务自动化CI/CD落地方案

核心实现逻辑

基于GitHub Actions实现流水线,通过路径变更匹配实现服务独立触发构建,完全兼容现有GCP Container Registry环境,可直接替换现有手动构建发布流程。

前置准备

  • 在GitHub仓库的Secrets配置项中存入GCP服务账号JSON密钥,命名为GCP_SA_KEY,确保该服务账号拥有GCR镜像推送权限、对应生产环境(Cloud Run/GKE/其他GCP计算服务)的部署权限
  • 检查三个服务的dockerfile配置,确认COPY shared_module的相对路径写法正确,避免构建时找不到公共依赖

流水线配置细节

流水线配置文件存放在仓库的.github/workflows/gcp-auto-deploy.yml路径下,核心规则如下:

  • 触发逻辑按路径匹配,仅当服务自身目录、公共模块shared_module目录、流水线配置文件本身发生变更时,才触发对应服务的构建发布流程,无变更的服务不会重复构建
    • Service 1 触发匹配路径:Service 1/**、shared_module/**、.github/workflows/**
    • Service 2 触发匹配路径:Service 2/**、shared_module/**、.github/workflows/**
    • Service 3 触发匹配路径:Service 3/**、shared_module/**、.github/workflows/**
  • 每个服务的构建发布流程统一分为6步:
    1. 拉取仓库全量代码,用于路径变更判断和构建
    2. 完成GCP鉴权,登录GCR镜像仓库,执行命令参考:echo "${{ secrets.GCP_SA_KEY }}" | docker login -u _json_key --password-stdin https://gcr.io
    3. 进入对应服务目录执行单元测试,测试不通过直接中断流程,禁止发布
    4. 构建docker镜像,必须将构建上下文设置为仓库根目录,否则无法读取shared_module公共代码;镜像标签使用Git提交短SHA+构建时间戳命名,不要固定使用latest,方便后续版本回滚
    5. 将构建完成的镜像推送到GCR对应仓库
    6. 调用GCP对应服务的更新接口,将生产环境的服务镜像替换为刚推送的新版本

常见坑点提醒

  • 不要将单服务的docker构建上下文设置为服务自身目录,否则构建时COPY shared_module会直接报路径不存在错误
  • shared_module目录发生变更时,三个服务会同时触发重建,这个是预期行为,避免公共模块更新后各服务依赖版本不一致
  • 建议给流水线增加手动触发入口,方便需要强制重发版本时不用额外提交空提交触发流程
  • 可以在流程最后加版本通知逻辑,把发布的服务名、对应代码提交、镜像地址推送到团队内部通知渠道,方便全员知晓发版情况

核心流水线片段参考:

name: GCP Auto Deploy
on:
  push:
    branches: [ main ]
    paths:
      - 'Service 1/**'
      - 'Service 2/**'
      - 'Service 3/**'
      - 'shared_module/**'
      - '.github/workflows/**'
  workflow_dispatch: # 支持手动触发

jobs:
  deploy-service1:
    runs-on: ubuntu-latest
    if: |
      contains(github.event.head_commit.modified, 'Service 1/') || 
      contains(github.event.head_commit.modified, 'shared_module/')
    steps:
      - uses: actions/checkout@v4
      - name: Login GCR
        run: echo "${{ secrets.GCP_SA_KEY }}" | docker login -u _json_key --password-stdin https://gcr.io
      - name: Run test
        run: cd "Service 1" && pip install -r requirements.txt && pytest test_main.py
      - name: Build and push image
        run: |
          GIT_SHA=$(git rev-parse --short HEAD)
          IMAGE_TAG=gcr.io/替换为自己的GCP项目ID/service1:${GIT_SHA}-$(date +%Y%m%d%H%M)
          docker build -t $IMAGE_TAG -f "Service 1/dockerfile" . # 最后的.代表根目录构建上下文,不能修改
          docker push $IMAGE_TAG
      - name: Deploy to production
        run: gcloud run deploy service1 --image $IMAGE_TAG --region 替换为实际部署区域 # 按实际使用的GCP服务调整部署命令
  # Service2、Service3的job配置和上述逻辑一致,替换对应路径、镜像名、服务名即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:27:25