This repository holds the code for gcp-controller-manager as well as cloud-controller-manager
This command will build and publish gcp-controller-manager
gcr.io/k8s-image-staging/gcp-controller-manager:latest
:
bazel run //cmd/gcp-controller-manager:publish
Environment variables IMAGE_REGISTRY
, IMAGE_REPO
and IMAGE_TAG
can be
used to override destination GCR repository and tag.
This command will build and publish
example.com/my-repo/gcp-controller-manager:v1
:
IMAGE_REGISTRY=example.com IMAGE_REPO=my-repo IMAGE_TAG=v1 bazel run //cmd/gcp-controller-manager:publish
This command will build and publish cloud-controller-manager
gcr.io/k8s-image-staging/cloud-controller-manager:latest
:
bazel run //cmd/cloud-controller-manager:publish
Environment variables IMAGE_REGISTRY
, IMAGE_REPO
and IMAGE_TAG
can be
used to override destination GCR repository and tag.
This command will build and publish
example.com/my-repo/gcp-controller-manager:v1
:
IMAGE_REGISTRY=example.com IMAGE_REPO=my-repo IMAGE_TAG=v1 bazel run //cmd/cloud-controller-manager:publish
Selecting the target platform is done with the --platforms
option with bazel
.
This command builds release tarballs for Windows:
bazel build --platforms=@io_bazel_rules_go//go/toolchain:windows_amd64 //release:release-tars
This command explicitly targets Linux as the target platform:
bazel build --platforms=@io_bazel_rules_go//go/toolchain:linux_amd64 //release:release-tars
Dependencies are managed using Go modules (go mod
subcommands).
Note that builds are done with Bazel and not the Go tool. Don't follow public Go module docs, instead use instructions in this readme.
If you work within GOPATH
, go mod
will error out unless you do one of:
- move repo outside of GOPATH (it should "just work")
- set env var
GO111MODULE=on
go get github.com/new/dependency && ./tools/update_vendor.sh
go get -u github.com/existing/dependency && ./tools/update_vendor.sh
go get -u && ./tools/update_vendor.sh
Note that this most likely won't work due to cross-dependency issues or repos not implementing modules correctly.
Bazel is required to build and release cloud-provider-gcp.
To install:
go get github.com/bazelbuild/bazelisk
alias bazel=bazelisk
To re-generate BUILD
files:
tools/update_bazel.sh
To trigger a new image for cloud-controller-manager, you need to add a git tag.
This needs to have the format ccm/vX.Y.Z
. For example.
git tag -a ccm/v27.1.0 -m "CCM build for Kubernetes v1.27.1"
The major version X corresponds to the Kubernetes minor version. The minor version Y corresponds to the Kubernetes patch version and the patch version Z corresponds to the CCM patch version.