如何通过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项目IDGCP_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
相关产品推荐
相关产品推荐

