Use gcr to cache the docker images (#7)

* Use gcr to cache the docker images

* Remove sudo from docker command
This commit is contained in:
Takashi Matsuo 2019-07-12 15:43:32 -07:00 committed by GitHub
parent d6e90be651
commit 015e0a3daf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 64 additions and 76 deletions

View file

@ -1,35 +0,0 @@
#!/usr/bin/env bash
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -eu
# Create a Docker image with all the dependencies necessary to build the
# project.
if [[ -z "${PROJECT_ROOT+x}" ]]; then
readonly PROJECT_ROOT="$(cd "$(dirname "$0")/../.."; pwd)"
fi
source "${PROJECT_ROOT}/ci/kokoro/define-docker-variables.sh"
cd "${PROJECT_ROOT}"
# If there's a version specific Dockerfile, we use it.
if [[ -f "ci/kokoro/Dockerfile.${DISTRO}-${DISTRO_VERSION}" ]]; then
sudo docker build -t "${IMAGE}:tip" \
-f "ci/kokoro/Dockerfile.${DISTRO}-${DISTRO_VERSION}" ci
else
sudo docker build -t "${IMAGE}:tip" \
--build-arg DISTRO_VERSION="${DISTRO_VERSION}" \
-f "ci/kokoro/Dockerfile.${DISTRO}" ci
fi

View file

@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -eu
if [[ -n "${IMAGE+x}" ]]; then
echo "IMAGE is already defined."
else
readonly IMAGE="apisci-${DISTRO}-${DISTRO_VERSION}"
readonly BUILD_OUTPUT="cmake-out/${IMAGE}-${BUILD_NAME}"
readonly BUILD_HOME="cmake-out/home/${IMAGE}-${BUILD_NAME}"
fi

View file

@ -86,7 +86,15 @@ fi
if [[ -z "${PROJECT_ROOT+x}" ]]; then if [[ -z "${PROJECT_ROOT+x}" ]]; then
readonly PROJECT_ROOT="$(cd "$(dirname "$0")/../../.."; pwd)" readonly PROJECT_ROOT="$(cd "$(dirname "$0")/../../.."; pwd)"
fi 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 "================================================================" echo "================================================================"
cd "${PROJECT_ROOT}" cd "${PROJECT_ROOT}"
@ -94,28 +102,66 @@ echo "Building with $(nproc) cores $(date) on ${PWD}."
echo "================================================================" echo "================================================================"
echo "Capture Docker version to troubleshoot $(date)." echo "Capture Docker version to troubleshoot $(date)."
sudo docker version docker version
echo "================================================================" 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 "================================================================"
echo "Creating Docker image with all the development tools $(date)." 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 if ci/retry-command.sh docker build "${docker_build_flags[@]}" ci; then
# flag. Later, we will want to print out the emulator(s) logs *only* if there update_cache="true"
# is an error, so disabling from this point on is the right choice. echo "Docker image created $(date)."
set +e docker image ls | grep "${IMAGE}"
mkdir -p "${BUILD_OUTPUT}" else
readonly CREATE_DOCKER_IMAGE_LOG="${BUILD_OUTPUT}/create-build-docker-image.log" echo "Failed creating Docker image $(date)."
echo "Logging to ${CREATE_DOCKER_IMAGE_LOG}" if "${has_cache}"; then
if ! "${PROJECT_ROOT}/ci/retry-command.sh" \ echo "Continue the build with the cache."
"${PROJECT_ROOT}/ci/kokoro/create-docker-image.sh" \ else
>"${CREATE_DOCKER_IMAGE_LOG}" 2>&1 </dev/null; then
cat "${CREATE_DOCKER_IMAGE_LOG}"
exit 1 exit 1
fi fi
echo "Docker image created $(date)." fi
sudo docker image ls
echo "================================================================" 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 "================================================================"
echo "Running the full build $(date)." echo "Running the full build $(date)."
# The default user for a Docker container has uid 0 (root). To avoid creating # The default user for a Docker container has uid 0 (root). To avoid creating
@ -130,6 +176,7 @@ fi
# Make sure the user has a $HOME directory inside the Docker container. # Make sure the user has a $HOME directory inside the Docker container.
mkdir -p "${BUILD_HOME}" mkdir -p "${BUILD_HOME}"
mkdir -p "${BUILD_OUTPUT}"
# We use an array for the flags so they are easier to document. # We use an array for the flags so they are easier to document.
docker_flags=( docker_flags=(
@ -213,6 +260,6 @@ if [[ -t 0 ]]; then
docker_flags+=("-it") docker_flags+=("-it")
fi fi
sudo docker run "${docker_flags[@]}" "${IMAGE}:tip" \ docker run "${docker_flags[@]}" "${IMAGE}:latest" \
"/v/${in_docker_script}" "${CMAKE_SOURCE_DIR}" \ "/v/${in_docker_script}" "${CMAKE_SOURCE_DIR}" \
"${BUILD_OUTPUT}" "${BUILD_OUTPUT}"