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
|
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}"
|
||||||
|
|
Loading…
Reference in a new issue