Create an Artifact Registry repository for the CCM image.
Then use make publish to build and push the cloud-controller-manager Docker image. For example, the following command will build and push the image to us-central1-docker.pkg.dev/my-project/my-repo/cloud-controller-manager:v0.
Change the location, project, and repo names to match yours.
LOCATION=us-central1 PROJECT=my-project REPO=my-repo
gcloud auth configure-docker ${LOCATION}-docker.pkg.dev
IMAGE_REPO=${LOCATION}-docker.pkg.dev/${PROJECT}/${REPO} IMAGE_TAG=v0 make publishIf IMAGE_REPO is not set, the script will exit with an error. If IMAGE_TAG is not set, it defaults to a unique value combining the current git commit SHA and the build date.
Note: To push images to Google Artifact Registry, you must first authenticate Docker by running the following command:
gcloud auth configure-docker ${LOCATION}-docker.pkg.dev
-
make publish: Builds thecloud-controller-managerDocker image (including multi-architecture support) and pushes it to the container registry specified by theIMAGE_REPOenvironment variable. -
make bundle: Builds thecloud-controller-managerDocker image and saves it as a.tarfile locally, along with creating a.docker_tagfile. This is useful for offline distribution or loading. -
make clean-builder: Removes thedocker buildxbuilder used for multi-platform Docker builds. This command is useful to reset the builder environment if the builder encounters an error or becomes corrupted. It can also be used to free up resources when the builder is no longer needed.
Platform-specific release tarballs can be built using the following commands.
This command builds the release tarball for Windows (kubernetes-node-windows-amd64.tar.gz):
make release-tars-windows-amd64This command builds the release tarballs for Linux (kubernetes-server-linux-amd64.tar.gz and kubernetes-node-linux-amd64.tar.gz):
make release-tars-linux-amd64To build all release artifacts for all platforms, run:
make release-tarsDependencies are managed using Go modules (go mod subcommands).
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 && make update-vendorgo get -u github.com/existing/dependency && make update-vendorgo get -u && make update-vendorNote 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=bazeliskTo re-generate BUILD files:
tools/update_bazel.sh