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:
parent
d6e90be651
commit
015e0a3daf
3 changed files with 64 additions and 76 deletions
|
@ -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
|
|
@ -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
|
|
@ -86,7 +86,15 @@ 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}"
|
||||
|
@ -94,28 +102,66 @@ 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
|
||||
|
@ -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=(
|
||||
|
@ -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}"
|
||||
|
|
Loading…
Reference in a new issue