spicyzboss
spicyzboss

Reputation: 1

Can Google Cloud Deploy deploy to multiple child targets with different image to Cloud Run on single multi-target?

I have a release from my Github Actions that pushed multiple image artifacts to a single release on Google Cloud Deploy. That configured with clouddeploy.yaml, skaffold.yaml and rawYaml for serving to Cloud Run.

I tried to use multiple rawYaml file on Skaffold configuration but Cloud Build returned me an error

error: the manifest contains a KRM definition with kind: Service. As a result the manifest is assumed to define a Cloud Run Service. However, 2 KRM definitions were found, a manifest may only define one Cloud Run Service

My case need to deploy different image on each child target on single multi-target but I still don't know how to fix that.

here's my clouddeploy.yaml

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
  name: main-pipeline
description: main application pipeline
serialPipeline:
  stages:
    - targetId: prod-services
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: prod-services
description: production group services
multiTarget:
  targetIds: [service-name-1, service-name-2]
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: service-name-1
description: production service 1
run:
  location: projects/coolbeaver/locations/asia-southeast1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: service-name-2
description: production service 2
run:
  location: projects/coolbeaver/locations/asia-southeast1

here's my skaffold.yaml

apiVersion: skaffold/v4beta6
kind: Config

manifests:
  rawYaml:
    - services/*

deploy:
  cloudrun: {}

here's the example of config files in services/ folder

service-name-1.yaml

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: service-name-1
spec:
  template:
    spec:
      containers:
        - image: service-name-1

Upvotes: 0

Views: 527

Answers (1)

Olumide Ogundele
Olumide Ogundele

Reputation: 11

I also had the same problem but the way I got it to work is using deployParameters.

I used a single service.yaml to stand as a template then used deploy parameters https://cloud.google.com/deploy/docs/parameters to change the attributes using the pipeline Target.

This way, I can deploy multiple cloudrun services in parallel.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: 'app-dev'  # from-param: ${service_name}
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/maxScale: '1'
    spec:
      containers:
        - name: 'app'
          image: gcr.io/cloudrun/hello@sha256:98cdb98c2d97a67d5e9183beedfec98ca9d5967acd874409b4800bf4d1a51710
          

skaffold.yaml

apiVersion: skaffold/v3alpha1
kind: Config
metadata:
  name: 'app'
deploy:
  cloudrun: {}
profiles:
  - name: 'dev'
    manifests:
      rawYaml:
        - 'service.yaml'

clouddeploy.yaml

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
  name: app
description: Deployment pipeline for demo app
serialPipeline:
  stages:
    - targetId: dev-multi
      profiles: [dev]

---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: dev-service-a
description: dev service A
deployParameters:
  service_name: "dev-service-a"
run:
  location: projects/<project_id>/locations/<region>

---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: dev-service-b
  labels:
    label1: label1
description: dev service B
deployParameters:
  service_name: "dev-service-b"
run:
  location: projects/<project_id>/locations/<region>

---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: dev-service-c
  labels:
    label2: label2
description: dev Service C
deployParameters:
  service_name: "dev-service-c"
run:
  location: projects/<project_id>/locations/<region>

---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: dev-multi
description: parallel deployed services
multiTarget:
  targetIds: [dev-service-a, dev-service-b, dev-service-c]

Upvotes: 0

Related Questions