Skip to content
This repository has been archived by the owner on Dec 22, 2021. It is now read-only.

Use gcr to cache the docker images #7

Merged
merged 2 commits into from
Jul 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 0 additions & 35 deletions ci/kokoro/create-docker-image.sh

This file was deleted.

24 changes: 0 additions & 24 deletions ci/kokoro/define-docker-variables.sh

This file was deleted.

81 changes: 64 additions & 17 deletions ci/kokoro/docker/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -86,36 +86,82 @@ fi
if [[ -z "${PROJECT_ROOT+x}" ]]; then
readonly PROJECT_ROOT="$(cd "$(dirname "$0")/../../.."; pwd)"
fi
source "${PROJECT_ROOT}/ci/kokoro/define-docker-variables.sh"

if [[ -z "${PROJECT_ID+x}" ]]; then
readonly PROJECT_ID="cloud-devrel-kokoro-resources"
fi

# Determine the image name.
readonly IMAGE="gcr.io/${PROJECT_ID}/cpp-cmakefiles/${DISTRO}-${DISTRO_VERSION}"
readonly BUILD_OUTPUT="cmake-out/${BUILD_NAME}"
readonly BUILD_HOME="cmake-out/home/${BUILD_NAME}"

echo "================================================================"
cd "${PROJECT_ROOT}"
echo "Building with $(nproc) cores $(date) on ${PWD}."

echo "================================================================"
echo "Capture Docker version to troubleshoot $(date)."
sudo docker version
docker version
echo "================================================================"

has_cache="false"

if [[ -n "${KOKORO_JOB_NAME:-}" ]]; then
# Download the docker image from the previous build on kokoro for speed.
echo "================================================================"
echo "Downloading Docker image $(date)."
gcloud auth configure-docker
if docker pull "${IMAGE}:latest"; then
echo "Existing image successfully downloaded."
has_cache="true"
fi
echo "================================================================"
fi

docker_build_flags=(
"-t" "${IMAGE}:latest"
)

if [[ -f "ci/kokoro/Dockerfile.${DISTRO}-${DISTRO_VERSION}" ]]; then
docker_build_flags+=("-f" "ci/kokoro/Dockerfile.${DISTRO}-${DISTRO_VERSION}")
else
docker_build_flags+=(
"-f" "ci/kokoro/Dockerfile.${DISTRO}"
"--build-arg" "DISTRO_VERSION=${DISTRO_VERSION}"
)
fi

if "${has_cache}"; then
docker_build_flags+=("--cache-from=${IMAGE}:latest")
fi

update_cache="false"
echo "================================================================"
echo "Creating Docker image with all the development tools $(date)."
# We do not want to print the log unless there is an error, so disable the -e
# flag. Later, we will want to print out the emulator(s) logs *only* if there
# is an error, so disabling from this point on is the right choice.
set +e
mkdir -p "${BUILD_OUTPUT}"
readonly CREATE_DOCKER_IMAGE_LOG="${BUILD_OUTPUT}/create-build-docker-image.log"
echo "Logging to ${CREATE_DOCKER_IMAGE_LOG}"
if ! "${PROJECT_ROOT}/ci/retry-command.sh" \
"${PROJECT_ROOT}/ci/kokoro/create-docker-image.sh" \
>"${CREATE_DOCKER_IMAGE_LOG}" 2>&1 </dev/null; then
cat "${CREATE_DOCKER_IMAGE_LOG}"
exit 1
if ci/retry-command.sh docker build "${docker_build_flags[@]}" ci; then
update_cache="true"
echo "Docker image created $(date)."
docker image ls | grep "${IMAGE}"
else
echo "Failed creating Docker image $(date)."
if "${has_cache}"; then
echo "Continue the build with the cache."
else
exit 1
fi
fi
echo "Docker image created $(date)."
sudo docker image ls
echo "================================================================"

if [[ -n "${KOKORO_JOB_NAME:-}" ]]; then
# Upload the docker image for speeding up the future builds.
echo "================================================================"
echo "Uploading Docker image $(date)."
docker push "${IMAGE}:latest" || true
echo "================================================================"
fi


echo "================================================================"
echo "Running the full build $(date)."
# The default user for a Docker container has uid 0 (root). To avoid creating
Expand All @@ -130,6 +176,7 @@ fi

# Make sure the user has a $HOME directory inside the Docker container.
mkdir -p "${BUILD_HOME}"
mkdir -p "${BUILD_OUTPUT}"

# We use an array for the flags so they are easier to document.
docker_flags=(
Expand Down Expand Up @@ -213,6 +260,6 @@ if [[ -t 0 ]]; then
docker_flags+=("-it")
fi

sudo docker run "${docker_flags[@]}" "${IMAGE}:tip" \
docker run "${docker_flags[@]}" "${IMAGE}:latest" \
"/v/${in_docker_script}" "${CMAKE_SOURCE_DIR}" \
"${BUILD_OUTPUT}"