diff --git a/build/README.md b/build/README.md index cc57ef1af88..586ceabc6cb 100644 --- a/build/README.md +++ b/build/README.md @@ -73,17 +73,19 @@ When building final release tars, they are first staged into `_output/release-st ## Proxy Settings -If you are behind a proxy, you need to edit `build/build-image/Dockerfile` and add proxy settings to execute command in that container correctly. +If you are behind a proxy, you need to export proxy settings for kubernetes build, the following environment variables should be defined. -example: +``` +export KUBE_BUILD_HTTP_PROXY=http://username:password@proxyaddr:proxyport +export KUBE_BUILD_HTTPS_PROXY=http://username:password@proxyaddr:proxyport +``` -`ENV http_proxy http://username:password@proxyaddr:proxyport` +Optionally, you can specify addresses of no proxy for kubernetes build, for example -`ENV https_proxy http://username:password@proxyaddr:proxyport` - -Besides, to avoid integration test touch the proxy while connecting to local etcd service, you need to set - -`ENV no_proxy 127.0.0.1` +``` +export KUBE_BUILD_NO_PROXY=127.0.0.1 +``` +If you are using sudo to make kubernetes build for example make quick-release, you need run `sudo -E make quick-release` to pass the environment variables. ## TODOs diff --git a/build/build-image/Dockerfile b/build/build-image/Dockerfile index 1c6a414bc48..151a118207e 100644 --- a/build/build-image/Dockerfile +++ b/build/build-image/Dockerfile @@ -24,6 +24,10 @@ MAINTAINER Joe Beda ENV GOARM 5 ENV GOOS linux ENV GOARCH amd64 +ENV http_proxy KUBE_BUILD_HTTP_PROXY +ENV https_proxy KUBE_BUILD_HTTPS_PROXY +ENV no_proxy KUBE_BUILD_NO_PROXY + # work around 64MB tmpfs size in Docker 1.6 ENV TMPDIR /tmp.k8s diff --git a/build/common.sh b/build/common.sh index b653ea298cd..0dc7289f14a 100755 --- a/build/common.sh +++ b/build/common.sh @@ -159,7 +159,11 @@ function kube::build::prepare_docker_machine() { kube::log::status "docker-machine was found." docker-machine inspect "${DOCKER_MACHINE_NAME}" >/dev/null || { kube::log::status "Creating a machine to build Kubernetes" - docker-machine create --driver "${DOCKER_MACHINE_DRIVER}" "${DOCKER_MACHINE_NAME}" > /dev/null || { + docker-machine create --driver "${DOCKER_MACHINE_DRIVER}" \ + --engine-env HTTP_PROXY="${KUBE_BUILD_HTTP_PROXY:-}" \ + --engine-env HTTPS_PROXY="${KUBE_BUILD_HTTPS_PROXY:-}" \ + --engine-env NO_PROXY="${KUBE_BUILD_NO_PROXY:-127.0.0.1}" \ + "${DOCKER_MACHINE_NAME}" > /dev/null || { kube::log::error "Something went wrong creating a machine." kube::log::error "Try the following: " kube::log::error "docker-machine create -d ${DOCKER_MACHINE_DRIVER} ${DOCKER_MACHINE_NAME}" @@ -203,6 +207,18 @@ function kube::build::is_osx() { [[ "$(uname)" == "Darwin" ]] } +function kube::build::update_dockerfile() { + if kube::build::is_osx; then + sed_arg=\"\" + else + sed_arg="" + fi + sed -i $sed_arg "s/KUBE_BUILD_IMAGE_CROSS/${KUBE_BUILD_IMAGE_CROSS}/" ${build_context_dir}/Dockerfile + sed -i $sed_arg "s#KUBE_BUILD_HTTP_PROXY#"`echo ${KUBE_BUILD_HTTP_PROXY:-\"\"}`"#" ${build_context_dir}/Dockerfile + sed -i $sed_arg "s#KUBE_BUILD_HTTPS_PROXY#"`echo ${KUBE_BUILD_HTTPS_PROXY:-\"\"}`"#" ${build_context_dir}/Dockerfile + sed -i $sed_arg "s#KUBE_BUILD_NO_PROXY#"`echo ${KUBE_BUILD_NO_PROXY:-127.0.0.1}`"#" ${build_context_dir}/Dockerfile +} + function kube::build::ensure_docker_in_path() { if [[ -z "$(which docker)" ]]; then kube::log::error "Can't find 'docker' in PATH, please fix and retry." @@ -472,11 +488,8 @@ function kube::build::build_image() { kube::version::save_version_vars "${build_context_dir}/kube-version-defs" cp build/build-image/Dockerfile ${build_context_dir}/Dockerfile - if kube::build::is_osx; then - sed -i "" "s/KUBE_BUILD_IMAGE_CROSS/${KUBE_BUILD_IMAGE_CROSS}/" ${build_context_dir}/Dockerfile - else - sed -i "s/KUBE_BUILD_IMAGE_CROSS/${KUBE_BUILD_IMAGE_CROSS}/" ${build_context_dir}/Dockerfile - fi + kube::build::update_dockerfile + # 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. kube::build::docker_build "${KUBE_BUILD_IMAGE}" "${build_context_dir}" 'false'