This is an automated email from the ASF dual-hosted git repository. potiuk pushed a commit to branch v1-10-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 4b642c10d34d34989732d63846ce52b63fdf9006 Author: Jarek Potiuk <[email protected]> AuthorDate: Sun Sep 27 18:00:03 2020 +0200 Optionally disables PIP cache from GitHub during the build (#11173) This is first step of implementing the corporate-environment friendly way of building images, where in the corporate environment, this might not be possible to install the packages using the GitHub cache initially. Part of #11171 (cherry picked from commit f16354bc02f563bcaee704cafe666c594fbec5e8) --- BREEZE.rst | 9 +++++++++ Dockerfile | 11 ++++++++--- Dockerfile.ci | 11 ++++++++--- IMAGES.rst | 8 ++++++++ breeze | 10 ++++++++++ breeze-complete | 2 +- docs/production-deployment.rst | 8 ++++++++ scripts/ci/libraries/_build_images.sh | 3 +++ scripts/ci/libraries/_initialization.sh | 4 +++- 9 files changed, 58 insertions(+), 8 deletions(-) diff --git a/BREEZE.rst b/BREEZE.rst index 728d590..11f7cdb 100644 --- a/BREEZE.rst +++ b/BREEZE.rst @@ -1218,6 +1218,9 @@ This is the current syntax for `./breeze <./breeze>`_: --additional-runtime-deps Additional apt runtime dependencies to use when building the images. + --disable-pip-cache + Disables GitHub PIP cache during the build. Useful if github is not reachable during build. + -C, --force-clean-images Force build images with cache disabled. This will remove the pulled or build images and start building images from scratch. This might take a long time. @@ -1639,6 +1642,9 @@ This is the current syntax for `./breeze <./breeze>`_: --additional-runtime-deps Additional apt runtime dependencies to use when building the images. + --disable-pip-cache + Disables GitHub PIP cache during the build. Useful if github is not reachable during build. + -C, --force-clean-images Force build images with cache disabled. This will remove the pulled or build images and start building images from scratch. This might take a long time. @@ -1946,6 +1952,9 @@ This is the current syntax for `./breeze <./breeze>`_: --additional-runtime-deps Additional apt runtime dependencies to use when building the images. + --disable-pip-cache + Disables GitHub PIP cache during the build. Useful if github is not reachable during build. + -C, --force-clean-images Force build images with cache disabled. This will remove the pulled or build images and start building images from scratch. This might take a long time. diff --git a/Dockerfile b/Dockerfile index a5db8e5..8ad448f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -163,11 +163,16 @@ ENV AIRFLOW_CONSTRAINTS_URL=${AIRFLOW_CONSTRAINTS_URL} ENV PATH=${PATH}:/root/.local/bin RUN mkdir -p /root/.local/bin +ARG AIRFLOW_PRE_CACHED_PIP_PACKAGES="true" +ENV AIRFLOW_PRE_CACHED_PIP_PACKAGES=${AIRFLOW_PRE_CACHED_PIP_PACKAGES} + # In case of Production build image segment we want to pre-install master version of airflow # dependencies from github so that we do not have to always reinstall it from the scratch. -RUN pip install --user \ - "https://github.com/${AIRFLOW_REPO}/archive/${AIRFLOW_BRANCH}.tar.gz#egg=apache-airflow[${AIRFLOW_EXTRAS}]" \ - --constraint "${AIRFLOW_CONSTRAINTS_URL}" && pip uninstall --yes apache-airflow; +RUN if [[ ${AIRFLOW_PRE_CACHED_PIP_PACKAGES} == "true" ]]; then \ + pip install --user \ + "https://github.com/${AIRFLOW_REPO}/archive/${AIRFLOW_BRANCH}.tar.gz#egg=apache-airflow[${AIRFLOW_EXTRAS}]" \ + --constraint "${AIRFLOW_CONSTRAINTS_URL}" && pip uninstall --yes apache-airflow; \ + fi ARG AIRFLOW_SOURCES_FROM="." ENV AIRFLOW_SOURCES_FROM=${AIRFLOW_SOURCES_FROM} diff --git a/Dockerfile.ci b/Dockerfile.ci index d6beac6..b100f17 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -216,13 +216,18 @@ ENV AIRFLOW_CONSTRAINTS_URL=${AIRFLOW_CONSTRAINTS_URL} ARG AIRFLOW_CI_BUILD_EPOCH="1" ENV AIRFLOW_CI_BUILD_EPOCH=${AIRFLOW_CI_BUILD_EPOCH} +ARG AIRFLOW_PRE_CACHED_PIP_PACKAGES="true" +ENV AIRFLOW_PRE_CACHED_PIP_PACKAGES=${AIRFLOW_PRE_CACHED_PIP_PACKAGES} + # In case of CI builds we want to pre-install master version of airflow dependencies so that # We do not have to always reinstall it from the scratch. # This can be reinstalled from latest master by increasing PIP_DEPENDENCIES_EPOCH_NUMBER. # And is automatically reinstalled from the scratch every time patch release of python gets released -RUN pip install \ - "https://github.com/${AIRFLOW_REPO}/archive/${AIRFLOW_BRANCH}.tar.gz#egg=apache-airflow[${AIRFLOW_EXTRAS}]" \ - --constraint "${AIRFLOW_CONSTRAINTS_URL}" && pip uninstall --yes apache-airflow; +RUN if [[ ${AIRFLOW_PRE_CACHED_PIP_PACKAGES} == "true" ]]; then \ + pip install \ + "https://github.com/${AIRFLOW_REPO}/archive/${AIRFLOW_BRANCH}.tar.gz#egg=apache-airflow[${AIRFLOW_EXTRAS}]" \ + --constraint "${AIRFLOW_CONSTRAINTS_URL}" && pip uninstall --yes apache-airflow; \ + fi # Link dumb-init for backwards compatibility (so that older images also work) diff --git a/IMAGES.rst b/IMAGES.rst index bd7dcba..6599d96 100644 --- a/IMAGES.rst +++ b/IMAGES.rst @@ -309,6 +309,14 @@ The following build arguments (``--build-arg`` in docker build command) can be u +------------------------------------------+------------------------------------------+------------------------------------------+ | ``AIRFLOW_EXTRAS`` | ``all`` | extras to install | +------------------------------------------+------------------------------------------+------------------------------------------+ +| ``AIRFLOW_PRE_CACHED_PIP_PACKAGES`` | ``true`` | Allows to pre-cache airflow PIP packages | +| | | from the GitHub of Apache Airflow | +| | | This allows to optimize iterations for | +| | | Image builds and speeds up CI builds | +| | | But in some corporate environments it | +| | | might be forbidden to download anything | +| | | from public repositories. | ++------------------------------------------+------------------------------------------+------------------------------------------+ | ``ADDITIONAL_AIRFLOW_EXTRAS`` | | additional extras to install | +------------------------------------------+------------------------------------------+------------------------------------------+ | ``ADDITIONAL_PYTHON_DEPS`` | | additional python dependencies to | diff --git a/breeze b/breeze index 56173aa..6c476a7 100755 --- a/breeze +++ b/breeze @@ -905,6 +905,13 @@ function breeze::parse_arguments() { # if not set here, docker cached is determined later, depending on type of image to be build shift ;; + -B | --disable-pip-cache) + echo "Disable PIP cache during build" + echo + export AIRFLOW_PRE_CACHED_PIP_PACKAGES="false" + shift + ;; + -P | --force-pull-images) echo "Force pulling images before build. Uses pulled images as cache." echo @@ -2097,6 +2104,9 @@ ${FORMATTED_DEFAULT_PROD_EXTRAS} --additional-runtime-deps Additional apt runtime dependencies to use when building the images. +--disable-pip-cache + Disables GitHub PIP cache during the build. Useful if github is not reachable during build. + -C, --force-clean-images Force build images with cache disabled. This will remove the pulled or build images and start building images from scratch. This might take a long time. diff --git a/breeze-complete b/breeze-complete index e8b281a..9abb033 100644 --- a/breeze-complete +++ b/breeze-complete @@ -131,7 +131,7 @@ kubernetes-mode: kubernetes-version: helm-version: kind-version: skip-mounting-local-sources install-airflow-version: install-airflow-reference: db-reset verbose assume-yes assume-no assume-quit forward-credentials start-airflow rbac-ui init-script: force-build-images force-pull-images production-image extras: force-clean-images skip-rebuild-check -build-cache-local build-cache-pulled build-cache-disabled +build-cache-local build-cache-pulled build-cache-disabled disable-pip-cache dockerhub-user: dockerhub-repo: github-registry github-repository: github-image-id: postgres-version: mysql-version: additional-extras: additional-python-deps: additional-dev-deps: additional-runtime-deps: diff --git a/docs/production-deployment.rst b/docs/production-deployment.rst index 9f33e5c..aedb752 100644 --- a/docs/production-deployment.rst +++ b/docs/production-deployment.rst @@ -289,6 +289,14 @@ The following build arguments (``--build-arg`` in docker build command) can be u | ``AIRFLOW_EXTRAS`` | (see Dockerfile) | Default extras with which airflow is | | | | installed | +------------------------------------------+------------------------------------------+------------------------------------------+ +| ``AIRFLOW_PRE_CACHED_PIP_PACKAGES`` | ``true`` | Allows to pre-cache airflow PIP packages | +| | | from the GitHub of Apache Airflow | +| | | This allows to optimize iterations for | +| | | Image builds and speeds up CI builds | +| | | But in some corporate environments it | +| | | might be forbidden to download anything | +| | | from public repositories. | ++------------------------------------------+------------------------------------------+------------------------------------------+ | ``ADDITIONAL_AIRFLOW_EXTRAS`` | | Optional additional extras with which | | | | airflow is installed | +------------------------------------------+------------------------------------------+------------------------------------------+ diff --git a/scripts/ci/libraries/_build_images.sh b/scripts/ci/libraries/_build_images.sh index cbc8964..41856d8 100644 --- a/scripts/ci/libraries/_build_images.sh +++ b/scripts/ci/libraries/_build_images.sh @@ -556,6 +556,7 @@ Docker building ${AIRFLOW_CI_IMAGE}. --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \ --build-arg AIRFLOW_BRANCH="${BRANCH_NAME}" \ --build-arg AIRFLOW_EXTRAS="${AIRFLOW_EXTRAS}" \ + --build-arg AIRFLOW_PRE_CACHED_PIP_PACKAGES="${AIRFLOW_PRE_CACHED_PIP_PACKAGES}" \ --build-arg ADDITIONAL_AIRFLOW_EXTRAS="${ADDITIONAL_AIRFLOW_EXTRAS}" \ --build-arg ADDITIONAL_PYTHON_DEPS="${ADDITIONAL_PYTHON_DEPS}" \ --build-arg ADDITIONAL_DEV_DEPS="${ADDITIONAL_DEV_DEPS}" \ @@ -685,6 +686,7 @@ function build_images::build_prod_images() { --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \ --build-arg AIRFLOW_BRANCH="${AIRFLOW_BRANCH_FOR_PYPI_PRELOADING}" \ --build-arg AIRFLOW_EXTRAS="${AIRFLOW_EXTRAS}" \ + --build-arg AIRFLOW_PRE_CACHED_PIP_PACKAGES="${AIRFLOW_PRE_CACHED_PIP_PACKAGES}" \ --build-arg ADDITIONAL_AIRFLOW_EXTRAS="${ADDITIONAL_AIRFLOW_EXTRAS}" \ --build-arg ADDITIONAL_PYTHON_DEPS="${ADDITIONAL_PYTHON_DEPS}" \ --build-arg ADDITIONAL_DEV_DEPS="${ADDITIONAL_DEV_DEPS}" \ @@ -705,6 +707,7 @@ function build_images::build_prod_images() { --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \ --build-arg AIRFLOW_BRANCH="${AIRFLOW_BRANCH_FOR_PYPI_PRELOADING}" \ --build-arg AIRFLOW_EXTRAS="${AIRFLOW_EXTRAS}" \ + --build-arg AIRFLOW_PRE_CACHED_PIP_PACKAGES="${AIRFLOW_PRE_CACHED_PIP_PACKAGES}" \ --build-arg BUILD_ID="${CI_BUILD_ID}" \ --build-arg COMMIT_SHA="${COMMIT_SHA}" \ "${DOCKER_CACHE_PROD_DIRECTIVE[@]}" \ diff --git a/scripts/ci/libraries/_initialization.sh b/scripts/ci/libraries/_initialization.sh index 419a6fe..afc8bee 100644 --- a/scripts/ci/libraries/_initialization.sh +++ b/scripts/ci/libraries/_initialization.sh @@ -320,7 +320,8 @@ function initialization::initialize_image_build_variables() { export ADDITIONAL_DEV_DEPS="${ADDITIONAL_DEV_DEPS:=""}" # additional runtime apt dependencies on top of the default ones export ADDITIONAL_RUNTIME_DEPS="${ADDITIONAL_RUNTIME_DEPS:=""}" - + # whether pre cached pip packages are used during build + export AIRFLOW_PRE_CACHED_PIP_PACKAGES="${AIRFLOW_PRE_CACHED_PIP_PACKAGES:="true"}" } # Determine version suffixes used to build backport packages @@ -637,6 +638,7 @@ function initialization::make_constants_read_only() { readonly ADDITIONAL_PYTHON_DEPS readonly ADDITIONAL_DEV_DEPS readonly ADDITIONAL_RUNTIME_DEPS + readonly AIRFLOW_PRE_CACHED_PIP_PACKAGES readonly DOCKERHUB_USER readonly DOCKERHUB_REPO
