Output tar of build image during release process

To meet licensing/compliance guidelines, bundle up the source. One of
the easiest ways to do this is just to grab the entire build image
directory - this makes it pretty much guaranteed that the user could
re-run the Docker build again from the exact code point if they wanted
to (they just need to poke at our scripts to figure out how).
pull/6/head
Zach Loafman 2016-02-10 17:57:45 -08:00
parent c70c7fde4d
commit b857f61009
1 changed files with 18 additions and 11 deletions

View File

@ -149,6 +149,7 @@ readonly KUBE_ADDON_PATHS=(
# KUBE_BUILD_CONTAINER_NAME # KUBE_BUILD_CONTAINER_NAME
# KUBE_BUILD_DATA_CONTAINER_NAME # KUBE_BUILD_DATA_CONTAINER_NAME
# DOCKER_MOUNT_ARGS # DOCKER_MOUNT_ARGS
# LOCAL_OUTPUT_BUILD_CONTEXT
function kube::build::verify_prereqs() { function kube::build::verify_prereqs() {
kube::log::status "Verifying Prerequisites...." kube::log::status "Verifying Prerequisites...."
kube::build::ensure_tar || return 1 kube::build::ensure_tar || return 1
@ -164,6 +165,7 @@ function kube::build::verify_prereqs() {
KUBE_BUILD_CONTAINER_NAME="kube-build-${KUBE_ROOT_HASH}" KUBE_BUILD_CONTAINER_NAME="kube-build-${KUBE_ROOT_HASH}"
KUBE_BUILD_DATA_CONTAINER_NAME="kube-build-data-${KUBE_ROOT_HASH}" KUBE_BUILD_DATA_CONTAINER_NAME="kube-build-data-${KUBE_ROOT_HASH}"
DOCKER_MOUNT_ARGS=("${DOCKER_MOUNT_ARGS_BASE[@]}" --volumes-from "${KUBE_BUILD_DATA_CONTAINER_NAME}") DOCKER_MOUNT_ARGS=("${DOCKER_MOUNT_ARGS_BASE[@]}" --volumes-from "${KUBE_BUILD_DATA_CONTAINER_NAME}")
LOCAL_OUTPUT_BUILD_CONTEXT="${LOCAL_OUTPUT_IMAGE_STAGING}/${KUBE_BUILD_IMAGE}"
} }
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@ -243,10 +245,10 @@ function kube::build::update_dockerfile() {
else else
sed_opts=(-i) sed_opts=(-i)
fi fi
sed ${sed_opts[@]} "s/KUBE_BUILD_IMAGE_CROSS/${KUBE_BUILD_IMAGE_CROSS}/" ${build_context_dir}/Dockerfile sed ${sed_opts[@]} "s/KUBE_BUILD_IMAGE_CROSS/${KUBE_BUILD_IMAGE_CROSS}/" "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
sed ${sed_opts[@]} "s#KUBE_BUILD_HTTP_PROXY#${KUBE_BUILD_HTTP_PROXY:-\"\"}#" ${build_context_dir}/Dockerfile sed ${sed_opts[@]} "s#KUBE_BUILD_HTTP_PROXY#${KUBE_BUILD_HTTP_PROXY:-\"\"}#" "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
sed ${sed_opts[@]} "s#KUBE_BUILD_HTTPS_PROXY#${KUBE_BUILD_HTTPS_PROXY:-\"\"}#" ${build_context_dir}/Dockerfile sed ${sed_opts[@]} "s#KUBE_BUILD_HTTPS_PROXY#${KUBE_BUILD_HTTPS_PROXY:-\"\"}#" "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
sed ${sed_opts[@]} "s#KUBE_BUILD_NO_PROXY#${KUBE_BUILD_NO_PROXY:-127.0.0.1}#" ${build_context_dir}/Dockerfile sed ${sed_opts[@]} "s#KUBE_BUILD_NO_PROXY#${KUBE_BUILD_NO_PROXY:-127.0.0.1}#" "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
} }
function kube::build::ensure_docker_in_path() { function kube::build::ensure_docker_in_path() {
@ -507,22 +509,20 @@ function kube::build::source_targets() {
function kube::build::build_image() { function kube::build::build_image() {
kube::build::ensure_tar kube::build::ensure_tar
local -r build_context_dir="${LOCAL_OUTPUT_IMAGE_STAGING}/${KUBE_BUILD_IMAGE}"
kube::build::build_image_cross kube::build::build_image_cross
mkdir -p "${build_context_dir}" mkdir -p "${LOCAL_OUTPUT_BUILD_CONTEXT}"
"${TAR}" czf "${build_context_dir}/kube-source.tar.gz" $(kube::build::source_targets) "${TAR}" czf "${LOCAL_OUTPUT_BUILD_CONTEXT}/kube-source.tar.gz" $(kube::build::source_targets)
kube::version::get_version_vars kube::version::get_version_vars
kube::version::save_version_vars "${build_context_dir}/kube-version-defs" kube::version::save_version_vars "${LOCAL_OUTPUT_BUILD_CONTEXT}/kube-version-defs"
cp build/build-image/Dockerfile ${build_context_dir}/Dockerfile cp build/build-image/Dockerfile "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
kube::build::update_dockerfile kube::build::update_dockerfile
# We don't want to force-pull this image because it's based on a local image # We don't want to force-pull this image because it's based on a local image
# (see kube::build::build_image_cross), not upstream. # (see kube::build::build_image_cross), not upstream.
kube::build::docker_build "${KUBE_BUILD_IMAGE}" "${build_context_dir}" 'false' kube::build::docker_build "${KUBE_BUILD_IMAGE}" "${LOCAL_OUTPUT_BUILD_CONTEXT}" 'false'
} }
# Build the kubernetes golang cross base image. # Build the kubernetes golang cross base image.
@ -701,6 +701,7 @@ function kube::release::package_tarballs() {
# Clean out any old releases # Clean out any old releases
rm -rf "${RELEASE_DIR}" rm -rf "${RELEASE_DIR}"
mkdir -p "${RELEASE_DIR}" mkdir -p "${RELEASE_DIR}"
kube::release::package_build_image_tarball &
kube::release::package_client_tarballs & kube::release::package_client_tarballs &
kube::release::package_server_tarballs & kube::release::package_server_tarballs &
kube::release::package_salt_tarball & kube::release::package_salt_tarball &
@ -712,6 +713,12 @@ function kube::release::package_tarballs() {
kube::util::wait-for-jobs || { kube::log::error "previous tarball phase failed"; return 1; } kube::util::wait-for-jobs || { kube::log::error "previous tarball phase failed"; return 1; }
} }
# Package the build image we used from the previous stage, for compliance/licensing/audit/yadda.
function kube::release::package_build_image_tarball() {
kube::log::status "Building tarball: src"
"${TAR}" czf "${RELEASE_DIR}/kubernetes-src.tar.gz" -C "${LOCAL_OUTPUT_BUILD_CONTEXT}" .
}
# Package up all of the cross compiled clients. Over time this should grow into # Package up all of the cross compiled clients. Over time this should grow into
# a full SDK # a full SDK
function kube::release::package_client_tarballs() { function kube::release::package_client_tarballs() {