关于 gcp-deploy
gcp-deploy 是面向开发者的部署技能,用于将基于 Dockerfile 的应用发布到 Google Cloud Run。它涵盖构建、推送至 Artifact Registry、部署,以及通过 gcloud 命令或脚本进行配置。
主要功能
- 01将源代码部署到 Cloud Run
- 02使用 Cloud Build 构建
- 03推送镜像至 Artifact Registry
- 04配置资源与环境变量
- 05查看日志和服务信息
适用场景
- 01部署容器化应用
- 02设置环境变量或密钥
- 03调整区域、端口、内存或扩缩容
- 04排查构建及服务启动问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ fwfutures/ skills --skill gcp-deploy安装后在 Claude Code 中输入/gcp-deploy确认已加载。
附带文件scripts/deploy.sh
详细介绍
GCP Cloud Run 部署
只需一条命令,即可将源代码部署到 Cloud Run。需要:一个 GCP 项目、仓库根目录中有一个 Dockerfile,以及一个监听端口的应用(默认端口为 8080 / PORT 环境变量)。
快速部署
# 1. Auth (skip if already logged in)
gcloud auth login
gcloud config set project PROJECT_ID
# 2. Enable APIs (first time only)
gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
# 3. Deploy
gcloud run deploy SERVICE_NAME \
--source . \
--region australia-southeast1 \
--allow-unauthenticated
此命令会通过 Cloud Build 远程构建容器,将其推送到 Artifact Registry,部署到 Cloud Run,并返回一个公开的 HTTPS URL。再次运行同一命令即可重新部署。
部署脚本
将 scripts/deploy.sh 复制到项目根目录,即可通过一条命令完成部署:
chmod +x deploy.sh
./deploy.sh my-service
环境变量:GCP_REGION(默认值:australia-southeast1)、GCP_PROJECT(默认值:当前 gcloud 项目)。
常用标志
| 标志 | 用途 | 示例 |
|---|---|---|
--region | 部署区域 | australia-southeast1 |
--allow-unauthenticated | 公开访问 | |
--port | 容器端口(非 8080 时) | --port 3000 |
--set-env-vars | 环境变量 | --set-env-vars KEY=val,FOO=bar |
--set-secrets | Secret Manager 密钥 | --set-secrets ENV=SECRET:latest |
--memory | 内存 | --memory 512Mi |
--cpu | CPU | --cpu 1 |
--min-instances | 最小实例数(0 = 缩容至零) | --min-instances 0 |
--max-instances | 最大实例数 | --max-instances 3 |
--timeout | 请求超时时间(最长 3600) | --timeout 300 |
环境变量和密钥
内联环境变量:
gcloud run deploy SERVICE --source . --region REGION --allow-unauthenticated \
--set-env-vars "DATABASE_URL=postgres://...,API_KEY=abc123"
Secret Manager(敏感值推荐使用):
# Create secret
echo -n "secret-value" | gcloud secrets create MY_SECRET --data-file=-
# Grant access to default compute SA
gcloud secrets add-iam-policy-binding MY_SECRET \
--member="serviceAccount:$(gcloud iam service-accounts list --format='value(email)' --filter='displayName:Compute Engine default')" \
--role="roles/secretmanager.secretAccessor"
# Deploy with secret
gcloud run deploy SERVICE --source . --region REGION --allow-unauthenticated \
--set-secrets "MY_SECRET=MY_SECRET:latest"
实用命令
# Stream logs
gcloud run services logs tail SERVICE --region REGION
# List services
gcloud run services list --region REGION
# Get service URL
gcloud run services describe SERVICE --region REGION --format "value(status.url)"
# Delete service
gcloud run services delete SERVICE --region REGION
CI/无头身份验证
gcloud auth activate-service-account --key-file=key.json
gcloud config set project PROJECT_ID
故障排除
| 问题 | 解决方法 |
|---|---|
| 构建失败 | 在本地检查 Dockerfile:docker build . |
| 部署时出现 403 | 需要 roles/run.admin 和 roles/cloudbuild.builds.editor |
| 应用启动时崩溃 | 查看日志:gcloud run services logs tail SERVICE --region REGION |
| 端口不匹配 | 设置 --port 以匹配应用端口,或让应用读取 PORT 环境变量 |
| 冷启动缓慢 | 设置 --min-instances 1(保持实例预热,成本更高) |
| 长请求超时 | 使用 --timeout 300 增加超时时间(最长 3600s) |
评论
支持 Markdown