diff --git a/build/lib/release.sh b/build/lib/release.sh index acf43de985b..ef61fe49cec 100644 --- a/build/lib/release.sh +++ b/build/lib/release.sh @@ -85,6 +85,7 @@ function kube::release::package_tarballs() { mkdir -p "${RELEASE_DIR}" kube::release::package_src_tarball & kube::release::package_client_tarballs & + kube::release::package_node_tarballs & kube::release::package_server_tarballs & kube::release::package_salt_tarball & kube::release::package_kube_manifests_tarball & @@ -148,6 +149,50 @@ function kube::release::package_client_tarballs() { kube::util::wait-for-jobs || { kube::log::error "client tarball creation failed"; exit 1; } } +# Package up all of the node binaries +function kube::release::package_node_tarballs() { + local platform + for platform in "${KUBE_NODE_PLATFORMS[@]}"; do + local platform_tag=${platform/\//-} # Replace a "/" for a "-" + local arch=$(basename ${platform}) + kube::log::status "Building tarball: node $platform_tag" + + local release_stage="${RELEASE_STAGE}/node/${platform_tag}/kubernetes" + rm -rf "${release_stage}" + mkdir -p "${release_stage}/node/bin" + + local node_bins=("${KUBE_NODE_BINARIES[@]}") + if [[ "${platform%/*}" == "windows" ]]; then + node_bins=("${KUBE_NODE_BINARIES_WIN[@]}") + fi + # This fancy expression will expand to prepend a path + # (${LOCAL_OUTPUT_BINPATH}/${platform}/) to every item in the + # KUBE_NODE_BINARIES array. + cp "${node_bins[@]/#/${LOCAL_OUTPUT_BINPATH}/${platform}/}" \ + "${release_stage}/node/bin/" + + # TODO: Docker images here + # kube::release::create_docker_images_for_server "${release_stage}/server/bin" "${arch}" + + # Include the client binaries here too as they are useful debugging tools. + local client_bins=("${KUBE_CLIENT_BINARIES[@]}") + if [[ "${platform%/*}" == "windows" ]]; then + client_bins=("${KUBE_CLIENT_BINARIES_WIN[@]}") + fi + cp "${client_bins[@]/#/${LOCAL_OUTPUT_BINPATH}/${platform}/}" \ + "${release_stage}/node/bin/" + + cp "${KUBE_ROOT}/Godeps/LICENSES" "${release_stage}/" + + cp "${RELEASE_DIR}/kubernetes-src.tar.gz" "${release_stage}/" + + kube::release::clean_cruft + + local package_name="${RELEASE_DIR}/kubernetes-node-${platform_tag}.tar.gz" + kube::release::create_tarball "${package_name}" "${release_stage}/.." + done +} + # Package up all of the server binaries function kube::release::package_server_tarballs() { local platform diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh index 2a22af61e62..67dc4c276da 100755 --- a/hack/lib/golang.sh +++ b/hack/lib/golang.sh @@ -39,8 +39,22 @@ kube::golang::server_targets() { readonly KUBE_SERVER_TARGETS=($(kube::golang::server_targets)) readonly KUBE_SERVER_BINARIES=("${KUBE_SERVER_TARGETS[@]##*/}") +# The set of server targets that we are only building for Kubernetes nodes +kube::golang::node_targets() { + local targets=( + cmd/kube-proxy + cmd/kubelet + ) + echo "${targets[@]}" +} + +readonly KUBE_NODE_TARGETS=($(kube::golang::node_targets)) +readonly KUBE_NODE_BINARIES=("${KUBE_NODE_TARGETS[@]##*/}") +readonly KUBE_NODE_BINARIES_WIN=("${KUBE_NODE_BINARIES[@]/%/.exe}") + if [[ "${KUBE_FASTBUILD:-}" == "true" ]]; then readonly KUBE_SERVER_PLATFORMS=(linux/amd64) + readonly KUBE_NODE_PLATFORMS=(linux/amd64) if [[ "${KUBE_BUILDER_OS:-}" == "darwin"* ]]; then readonly KUBE_TEST_PLATFORMS=( darwin/amd64 @@ -68,6 +82,19 @@ else fi readonly KUBE_SERVER_PLATFORMS + # The node platforms we build for + KUBE_NODE_PLATFORMS=( + linux/amd64 + linux/arm + linux/arm64 + linux/s390x + windows/amd64 + ) + if [[ "${KUBE_BUILD_PPC64LE:-}" =~ ^[yY]$ ]]; then + KUBE_NODE_PLATFORMS+=(linux/ppc64le) + fi + readonly KUBE_NODE_PLATFORMS + # If we update this we should also update the set of golang compilers we build # in 'build/build-image/cross/Dockerfile'. However, it's only a bit faster since go 1.5, not mandatory KUBE_CLIENT_PLATFORMS=( diff --git a/hack/make-rules/cross.sh b/hack/make-rules/cross.sh index 08ae0d8da35..e2c2f9f44d0 100755 --- a/hack/make-rules/cross.sh +++ b/hack/make-rules/cross.sh @@ -29,6 +29,8 @@ source "${KUBE_ROOT}/hack/lib/init.sh" make all WHAT="${KUBE_SERVER_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_SERVER_PLATFORMS[*]}" +make all WHAT="${KUBE_NODE_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_NODE_PLATFORMS[*]}" + make all WHAT="${KUBE_CLIENT_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_CLIENT_PLATFORMS[*]}" make all WHAT="${KUBE_TEST_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_TEST_PLATFORMS[*]}"