I have multiple Bazel rules for deploying Kubernetes
load("@k8s_deploy//:defaults.bzl", "k8s_deploy")
k8s_object(
name = "k8s_deployment",
kind = "deployment",
cluster = "cents-ideas",
template = ":ideas.deployment.yaml",
images = {
"gcr.io/cents-ideas/ideas:latest": ":image"
},
)
k8s_object(
name = "k8s_service",
kind = "service",
template = ":ideas.service.yaml",
)
And I've put all those k8s_object
together into a single k8s_objects
like this:
load("@io_bazel_rules_k8s//k8s:objects.bzl", "k8s_objects")
k8s_objects(
name = "k8s",
objects = [
":k8s_deployment",
":k8s_service"
]
)
Lastly, I have a cloudbuild.yaml
file which runs the k8s_objects
rule:
steps:
- id: 'push docker images and deploy changes to kubernetes'
name: gcr.io/cloud-builders/bazel
args: ['run', '//:kubernetes']
But the Kubernetes resources are not applied to the cluster, although the Cloud Build succeeds:
Here is the full build log.
So basically the images are pushed to the container registry and then the modified .yaml
files are logged, but not applied to my Google Kubernetes Engine cluster.
I think you need to suffix the target with ".create" or ".replace" see docs
So you would want something like:
bazel run //:k8s.create
where k8s is your target name.