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

Google Cloud Deploy未激活正确Skaffold配置文件问题排查

问题:Cloud Deploy未使用Skaffold指定Profile的配置,始终调用默认清单

通过Google Cloud Build、Cloud Deploy结合Skaffold Profiles管理Staging和Production环境的Pod规格,但最终渲染的清单始终采用Skaffold默认配置,而非对应Profile的设置。

问题根源

你的配置存在两处关键问题:

  1. Skaffold Profiles未覆盖manifests节点:当前的stage和prod Profile仅重写了build和deploy配置,manifests仍使用全局默认的k8s-deployment.yaml。如果不同环境的Pod规格差异定义在这个默认清单里,Profile不会自动替换这部分内容。
  2. Profile激活条件不兼容Cloud Deploy运行环境:Skaffold Profile的激活依赖kubeContext或command,但Cloud Deploy运行Skaffold时,不会自动设置这些触发条件——即便Cloud Deploy在DeliveryPipeline中指定了profiles,Skaffold也无法识别并激活对应Profile。

修复方案

1. 调整Skaffold配置,让Profile接管环境差异

修改skaffold.yaml,在每个Profile中明确指定对应环境的manifests配置,同时移除依赖kubeContext的激活条件(Cloud Deploy运行时的kubeContext与本地环境不一致,无法触发):

apiVersion: skaffold/v4beta1
kind: Config

build:
  artifacts:
    - image: ***

deploy:
  kubectl: {}

manifests:
  rawYaml:
    - k8s-deployment.yaml

profiles:
  - name: stage
    build:
      artifacts:
        - image: ***
    # 指定staging环境专属清单
    manifests:
      rawYaml:
        - k8s-deployment-stage.yaml
    deploy:
      kubectl: {}

  - name: prod
    build:
      artifacts:
        - image: ***
    # 指定production环境专属清单
    manifests:
      rawYaml:
        - k8s-deployment-prod.yaml
    deploy:
      kubectl: {}

如果不想维护多份清单文件,可改用Kustomize管理环境差异,配置示例:

apiVersion: skaffold/v4beta1
kind: Config

build:
  artifacts:
    - image: ***

deploy:
  kubectl: {}

manifests:
  # 基础清单放在base目录
  kustomize:
    paths: [base]

profiles:
  - name: stage
    manifests:
      # staging环境的覆盖配置放在overlays/stage
      kustomize:
        paths: [overlays/stage]
  - name: prod
    manifests:
      # production环境的覆盖配置放在overlays/prod
      kustomize:
        paths: [overlays/prod]

2. 验证Cloud Deploy的Profile传递逻辑

你的clouddeploy.yaml已经在每个Stage中指定了对应的profiles,这部分配置是正确的。只需确保Cloud Deploy使用的Skaffold版本为v4及以上(支持Profile传递),无需在Cloud Build的发布命令中额外指定Profile——Cloud Deploy会在部署对应Stage时自动将Profile参数传递给Skaffold。

3. 本地验证Profile渲染结果

在提交到Cloud Build前,先本地测试Skaffold是否能正确渲染对应Profile的清单:

# 测试stage Profile
skaffold render --profile stage
# 测试prod Profile
skaffold render --profile prod

确认输出的清单符合对应环境的配置后,再推送代码触发Cloud Build流程。


原配置文件

skaffold.yaml

apiVersion: skaffold/v4beta1
kind: Config

build:
  artifacts:
    - image: ***

deploy:
  kubectl: {}

manifests:
  rawYaml:
    - k8s-deployment.yaml

profiles:
  - name: stage
    activation:
      - kubeContext: <STAGE_KUBE_CONTEXT>
      - command: stage
    build:
      artifacts:
        - image: ***

  - name: prod
    activation:
      - kubeContext: <PROD_KUBE_CONTEXT>
      - command: prod
    build:
      artifacts:
        - image: ***

    deploy:
      kubectl: {}

cloudbuild.yaml

steps:
  - name: "asia.gcr.io/YOUR_PROJECT_ID/sonar-scanner:latest"
    args:
      [
        "-Dsonar.projectKey=***",
        "-Dsonar.organization=***",
        "-Dsonar.sources=.",
        "-Dsonar.host.url=https://sonarcloud.io",
        "-Dsonar.login=${_SONAR_TOKEN}",
      ]
  - name: "gcr.io/cloud-builders/docker"
    args:
      [
        "build",
        "-t",
        "asia.gcr.io/YOUR_PROJECT_ID/***/***:$SHORT_SHA",
        ".",
      ]
  - name: "gcr.io/cloud-builders/docker"
    args: ["push", "asia.gcr.io/YOUR_PROJECT_ID/***/***:$SHORT_SHA"]

  - name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: "bash"
    args:
      - "-c"
      - >
        gcloud deploy releases create stage-release-$SHORT_SHA
        --project=YOUR_PROJECT_ID
        --region=asia-east2
        --delivery-pipeline=***
        --source=./
        --images=***=asia.gcr.io/YOUR_PROJECT_ID/***/***:$SHORT_SHA

substitutions:
  _SONAR_TOKEN: "YOUR_SONAR_TOKEN"

clouddeploy.yaml

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
  name: ***
description: gke deployment pipeline
serialPipeline:
  stages:
    - targetId: staging
      profiles:
        - stage
    - targetId: production
      profiles:
        - prod

---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: staging
description: staging cluster
gke:
  cluster: ***

---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: production
description: production cluster
gke:
  cluster: ***

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:08:11