Reputation: 1
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
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