DEV Community

Cover image for Forcing a kubernetes version during build

Forcing a kubernetes version during build

chuck_ha profile image Chuck Ha ・2 min read
Date: November, 19th, 2018
The current release is just before v1.13.0 so the newest tag is v1.14.0-alpha.

When a Kubernetes binary is built with bazel it will set a default version on the binary for you. That is, when you run kubectl version the version is populated automatically.

However, sometimes you want a custom version, probably for testing purposes. For example, if you are testing kubeadm's upgrade feature it helps to force a version to avoid some annoying behavior.

Bazel calculates this version through a script that is defined by a flag called --workspace_status_command. That argument is specified in the .bazelrc file. calls a bash function and prints some version information in a very specific format that bazel uses.

If you want to customize this, you have two options.

Option 1 You can define a custom --workspace_status_command script that generates these versions with whatever versions you want

Create this file as and make it executable chmod +x

#!/usr/bin/env bash

cat <<EOF
gitCommit $(git rev-parse "HEAD^{commit}")
gitTreeState clean
gitVersion v2.0.0
gitMajor 2
gitMinor 0
buildDate $(date \
 -u +'%Y-%m-%dT%H:%M:%SZ')

Now run bazel build --workspace_status_command=./ //cmd/kubeadm and you can see it works when you run kubeadm version and get this output:

kubeadm version
kubeadm version: &version.Info{Major:"2", Minor:"0", GitVersion:"v2.0.0", GitCommit:"679d4397cfdb386ebd3ae4bcb9972273b3f75ca3", GitTreeState:"clean", BuildDate:"2018-11-19T20:43:30Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"darwin/amd64"}

Option 2

You can define an environment variable, KUBE_GIT_VERSION_FILE, that defines a file in which the versions are already specified.

Create a file called version.txt and put the following contents in it:


Now get that file as an environment variable with export KUBE_GIT_VERSION_FILE=version.txt and run bazel build //cmd/kubeadm.

Then when you run kubeadm version you will see:

$ kubeadm version
kubeadm version: &version.Info{Major:"2", Minor:"0", GitVersion:"v2.0.3", GitCommit:"abcd", GitTreeState:"clean", BuildDate:"2018-11-19T20:58:25Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"darwin/amd64"}


Editor guide