diff --git a/ci/kokoro/create-docker-image.sh b/ci/kokoro/create-docker-image.sh deleted file mode 100755 index 82882072f..000000000 --- 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 7a659c7a7..000000000 --- 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 b42c49de2..87edff528 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