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

如何通过gcloud CLI、Skaffold和Cloud Deploy在已有Cloud Run部署Docker镜像

实现步骤(基于现有Terraform创建的Cloud Run)

1. 调整Skaffold配置,适配已存在的Cloud Run资源

由于你已经通过Terraform完成Cloud Run实例创建,需要配置Skaffold仅执行镜像推送和服务更新,跳过资源创建环节。

编写skaffold.yaml

apiVersion: skaffold/v2beta27
kind: Config
metadata:
  name: your-service-id
build:
  artifacts:
  - image: gcr.io/[你的GCP项目ID]/[自定义镜像名]
    docker:
      dockerfile: Dockerfile  # 替换为你的Dockerfile实际路径
deploy:
  cloudrun:
    services:
    - name: [Terraform创建的Cloud Run服务名]
      projectid: [你的GCP项目ID]
      region: [服务所在GCP区域]
      createService: false  # 关键配置:禁用自动创建服务,仅更新镜像

2. 配置GitLab CI/CD流水线,集成Skaffold与GCP

第一步:设置CI/CD环境变量

在GitLab项目的Settings > CI/CD > Variables中添加以下变量:

  • GCP_PROJECT_ID: 你的GCP项目ID
  • GCP_SERVICE_ACCOUNT_KEY: 具备Cloud Run部署权限的服务账号JSON密钥(需base64编码)

第二步:编写.gitlab-ci.yml

stages:
  - build-deploy

deploy-cloudrun:
  stage: build-deploy
  image: google/cloud-sdk:latest
  before_script:
    # 安装Skaffold
    - curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
    - chmod +x skaffold
    - mv skaffold /usr/local/bin/
    # GCP身份认证
    - echo "$GCP_SERVICE_ACCOUNT_KEY" | base64 -d > sa-key.json
    - gcloud auth activate-service-account --key-file=sa-key.json
    - gcloud config set project $GCP_PROJECT_ID
  script:
    # 构建镜像并部署到已存在的Cloud Run服务
    - skaffold run --default-repo=gcr.io/$GCP_PROJECT_ID
  only:
    - main  # 可根据需求调整触发分支

3. 权限与验证

  • 确保用于CI的GCP服务账号拥有roles/run.developer或更高权限(如roles/run.admin),允许其更新Cloud Run服务的镜像版本。
  • 提交测试代码触发CI流水线,检查Cloud Run控制台中服务的镜像是否已更新为新构建版本。

多环境部署前置提示

完成第一步后,后续实现dev/preprod按需部署可参考:

  • 为两个环境分别创建skaffold-dev.yaml和skaffold-preprod.yaml,各自对应Terraform提前创建的环境专属Cloud Run服务。
  • 在GitLab CI中添加手动触发的Job,让用户选择部署目标环境,执行对应环境的Skaffold配置文件。

内容的提问来源于stack exchange,提问作者Robyn.D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:57:05