diff options
author | Takashi Matsuo <tmatsuo@google.com> | 2019-07-12T22·43-0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-12T22·43-0700 |
commit | 015e0a3dafe4f7bdd0a4360c8a07248ab34aba2c (patch) | |
tree | 0ee347c16f3f1202bbb547f6dde205bad72bbe0f /ci | |
parent | d6e90be651ccc153840fd6a118ae6f50fb0fd9f5 (diff) |
Use gcr to cache the docker images (#7)
* Use gcr to cache the docker images * Remove sudo from docker command
Diffstat (limited to 'ci')
-rwxr-xr-x | ci/kokoro/create-docker-image.sh | 35 | ||||
-rwxr-xr-x | ci/kokoro/define-docker-variables.sh | 24 | ||||
-rwxr-xr-x | ci/kokoro/docker/build.sh | 81 |
3 files changed, 64 insertions, 76 deletions
diff --git a/ci/kokoro/create-docker-image.sh b/ci/kokoro/create-docker-image.sh deleted file mode 100755 index 82882072fed6..000000000000 --- a/ci/kokoro/create-docker-image.sh +++ /dev/null @@ -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 diff --git a/ci/kokoro/define-docker-variables.sh b/ci/kokoro/define-docker-variables.sh deleted file mode 100755 index 7a659c7a78c0..000000000000 --- a/ci/kokoro/define-docker-variables.sh +++ /dev/null @@ -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 diff --git a/ci/kokoro/docker/build.sh b/ci/kokoro/docker/build.sh index b42c49de29eb..87edff52879e 100755 --- a/ci/kokoro/docker/build.sh +++ b/ci/kokoro/docker/build.sh @@ -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}" |