You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ch...@apache.org on 2020/04/28 11:02:42 UTC

[flink-docker] branch master updated (887ac36 -> 2991299)

This is an automated email from the ASF dual-hosted git repository.

chesnay pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/flink-docker.git.


    from 887ac36  [FLINK-17346] Deduplicate process setup
     new 1c4c876  [FLINK-17367] Directly inject download URLs
     new 2991299  [FLINK-17367] Add script for building with configurable download URL

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .gitignore                        |  3 ++-
 1.10/scala_2.11-debian/Dockerfile | 38 ++++++++++++++----------------
 1.10/scala_2.12-debian/Dockerfile | 38 ++++++++++++++----------------
 1.9/scala_2.11-debian/Dockerfile  | 38 ++++++++++++++----------------
 1.9/scala_2.12-debian/Dockerfile  | 38 ++++++++++++++----------------
 Dockerfile-debian.template        | 38 ++++++++++++++----------------
 add-custom.sh                     | 49 +++++++++++++++++++++++++++++++++++++++
 add-version.sh                    | 18 +++++++-------
 common.sh                         | 26 +++++++++++++++++++++
 9 files changed, 176 insertions(+), 110 deletions(-)
 create mode 100755 add-custom.sh
 create mode 100644 common.sh


[flink-docker] 02/02: [FLINK-17367] Add script for building with configurable download URL

Posted by ch...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

chesnay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-docker.git

commit 2991299ee8d42ddc741417864e75fc1832984fe5
Author: Chesnay Schepler <ch...@apache.org>
AuthorDate: Fri Apr 24 10:42:05 2020 +0200

    [FLINK-17367] Add script for building with configurable download URL
---
 .gitignore                        |  3 ++-
 1.10/scala_2.11-debian/Dockerfile | 29 ++++++++++++-----------
 1.10/scala_2.12-debian/Dockerfile | 29 ++++++++++++-----------
 1.9/scala_2.11-debian/Dockerfile  | 29 ++++++++++++-----------
 1.9/scala_2.12-debian/Dockerfile  | 29 ++++++++++++-----------
 Dockerfile-debian.template        | 29 ++++++++++++-----------
 add-custom.sh                     | 49 +++++++++++++++++++++++++++++++++++++++
 add-version.sh                    | 27 ++++-----------------
 common.sh                         | 26 +++++++++++++++++++++
 9 files changed, 161 insertions(+), 89 deletions(-)

diff --git a/.gitignore b/.gitignore
index c34e36b..feb151f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 .*.swp
-.idea
\ No newline at end of file
+.idea
+dev
\ No newline at end of file
diff --git a/1.10/scala_2.11-debian/Dockerfile b/1.10/scala_2.11-debian/Dockerfile
index 5c84be8..f7b5f6d 100644
--- a/1.10/scala_2.11-debian/Dockerfile
+++ b/1.10/scala_2.11-debian/Dockerfile
@@ -46,7 +46,8 @@ RUN set -ex; \
 # Configure Flink version
 ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz \
     FLINK_ASC_URL=https://www.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz.asc \
-    GPG_KEY=BB137807CEFBE7DD2616556710B12A1F89C115E8
+    GPG_KEY=BB137807CEFBE7DD2616556710B12A1F89C115E8 \
+    SKIP_GPG=false
 
 # Prepare environment
 ENV FLINK_HOME=/opt/flink
@@ -58,19 +59,21 @@ WORKDIR $FLINK_HOME
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
-  wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
   \
-  export GNUPGHOME="$(mktemp -d)"; \
-  for server in ha.pool.sks-keyservers.net $(shuf -e \
-                          hkp://p80.pool.sks-keyservers.net:80 \
-                          keyserver.ubuntu.com \
-                          hkp://keyserver.ubuntu.com:80 \
-                          pgp.mit.edu) ; do \
-      gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
-  done && \
-  gpg --batch --verify flink.tgz.asc flink.tgz; \
-  gpgconf --kill all; \
-  rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  if [ "$SKIP_GPG" = "false" ]; then \
+    wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
+    export GNUPGHOME="$(mktemp -d)"; \
+    for server in ha.pool.sks-keyservers.net $(shuf -e \
+                            hkp://p80.pool.sks-keyservers.net:80 \
+                            keyserver.ubuntu.com \
+                            hkp://keyserver.ubuntu.com:80 \
+                            pgp.mit.edu) ; do \
+        gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
+    done && \
+    gpg --batch --verify flink.tgz.asc flink.tgz; \
+    gpgconf --kill all; \
+    rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  fi; \
   \
   tar -xf flink.tgz --strip-components=1; \
   rm flink.tgz; \
diff --git a/1.10/scala_2.12-debian/Dockerfile b/1.10/scala_2.12-debian/Dockerfile
index c8e1c09..cf22764 100644
--- a/1.10/scala_2.12-debian/Dockerfile
+++ b/1.10/scala_2.12-debian/Dockerfile
@@ -46,7 +46,8 @@ RUN set -ex; \
 # Configure Flink version
 ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.10.0/flink-1.10.0-bin-scala_2.12.tgz \
     FLINK_ASC_URL=https://www.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.12.tgz.asc \
-    GPG_KEY=BB137807CEFBE7DD2616556710B12A1F89C115E8
+    GPG_KEY=BB137807CEFBE7DD2616556710B12A1F89C115E8 \
+    SKIP_GPG=false
 
 # Prepare environment
 ENV FLINK_HOME=/opt/flink
@@ -58,19 +59,21 @@ WORKDIR $FLINK_HOME
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
-  wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
   \
-  export GNUPGHOME="$(mktemp -d)"; \
-  for server in ha.pool.sks-keyservers.net $(shuf -e \
-                          hkp://p80.pool.sks-keyservers.net:80 \
-                          keyserver.ubuntu.com \
-                          hkp://keyserver.ubuntu.com:80 \
-                          pgp.mit.edu) ; do \
-      gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
-  done && \
-  gpg --batch --verify flink.tgz.asc flink.tgz; \
-  gpgconf --kill all; \
-  rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  if [ "$SKIP_GPG" = "false" ]; then \
+    wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
+    export GNUPGHOME="$(mktemp -d)"; \
+    for server in ha.pool.sks-keyservers.net $(shuf -e \
+                            hkp://p80.pool.sks-keyservers.net:80 \
+                            keyserver.ubuntu.com \
+                            hkp://keyserver.ubuntu.com:80 \
+                            pgp.mit.edu) ; do \
+        gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
+    done && \
+    gpg --batch --verify flink.tgz.asc flink.tgz; \
+    gpgconf --kill all; \
+    rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  fi; \
   \
   tar -xf flink.tgz --strip-components=1; \
   rm flink.tgz; \
diff --git a/1.9/scala_2.11-debian/Dockerfile b/1.9/scala_2.11-debian/Dockerfile
index 8a82570..8f71da8 100644
--- a/1.9/scala_2.11-debian/Dockerfile
+++ b/1.9/scala_2.11-debian/Dockerfile
@@ -46,7 +46,8 @@ RUN set -ex; \
 # Configure Flink version
 ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.9.3/flink-1.9.3-bin-scala_2.11.tgz \
     FLINK_ASC_URL=https://www.apache.org/dist/flink/flink-1.9.3/flink-1.9.3-bin-scala_2.11.tgz.asc \
-    GPG_KEY=6B6291A8502BA8F0913AE04DDEB95B05BF075300
+    GPG_KEY=6B6291A8502BA8F0913AE04DDEB95B05BF075300 \
+    SKIP_GPG=false
 
 # Prepare environment
 ENV FLINK_HOME=/opt/flink
@@ -58,19 +59,21 @@ WORKDIR $FLINK_HOME
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
-  wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
   \
-  export GNUPGHOME="$(mktemp -d)"; \
-  for server in ha.pool.sks-keyservers.net $(shuf -e \
-                          hkp://p80.pool.sks-keyservers.net:80 \
-                          keyserver.ubuntu.com \
-                          hkp://keyserver.ubuntu.com:80 \
-                          pgp.mit.edu) ; do \
-      gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
-  done && \
-  gpg --batch --verify flink.tgz.asc flink.tgz; \
-  gpgconf --kill all; \
-  rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  if [ "$SKIP_GPG" = "false" ]; then \
+    wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
+    export GNUPGHOME="$(mktemp -d)"; \
+    for server in ha.pool.sks-keyservers.net $(shuf -e \
+                            hkp://p80.pool.sks-keyservers.net:80 \
+                            keyserver.ubuntu.com \
+                            hkp://keyserver.ubuntu.com:80 \
+                            pgp.mit.edu) ; do \
+        gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
+    done && \
+    gpg --batch --verify flink.tgz.asc flink.tgz; \
+    gpgconf --kill all; \
+    rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  fi; \
   \
   tar -xf flink.tgz --strip-components=1; \
   rm flink.tgz; \
diff --git a/1.9/scala_2.12-debian/Dockerfile b/1.9/scala_2.12-debian/Dockerfile
index dc30005..095e9d2 100644
--- a/1.9/scala_2.12-debian/Dockerfile
+++ b/1.9/scala_2.12-debian/Dockerfile
@@ -46,7 +46,8 @@ RUN set -ex; \
 # Configure Flink version
 ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.9.3/flink-1.9.3-bin-scala_2.12.tgz \
     FLINK_ASC_URL=https://www.apache.org/dist/flink/flink-1.9.3/flink-1.9.3-bin-scala_2.12.tgz.asc \
-    GPG_KEY=6B6291A8502BA8F0913AE04DDEB95B05BF075300
+    GPG_KEY=6B6291A8502BA8F0913AE04DDEB95B05BF075300 \
+    SKIP_GPG=false
 
 # Prepare environment
 ENV FLINK_HOME=/opt/flink
@@ -58,19 +59,21 @@ WORKDIR $FLINK_HOME
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
-  wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
   \
-  export GNUPGHOME="$(mktemp -d)"; \
-  for server in ha.pool.sks-keyservers.net $(shuf -e \
-                          hkp://p80.pool.sks-keyservers.net:80 \
-                          keyserver.ubuntu.com \
-                          hkp://keyserver.ubuntu.com:80 \
-                          pgp.mit.edu) ; do \
-      gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
-  done && \
-  gpg --batch --verify flink.tgz.asc flink.tgz; \
-  gpgconf --kill all; \
-  rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  if [ "$SKIP_GPG" = "false" ]; then \
+    wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
+    export GNUPGHOME="$(mktemp -d)"; \
+    for server in ha.pool.sks-keyservers.net $(shuf -e \
+                            hkp://p80.pool.sks-keyservers.net:80 \
+                            keyserver.ubuntu.com \
+                            hkp://keyserver.ubuntu.com:80 \
+                            pgp.mit.edu) ; do \
+        gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
+    done && \
+    gpg --batch --verify flink.tgz.asc flink.tgz; \
+    gpgconf --kill all; \
+    rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  fi; \
   \
   tar -xf flink.tgz --strip-components=1; \
   rm flink.tgz; \
diff --git a/Dockerfile-debian.template b/Dockerfile-debian.template
index 0a206e6..7222314 100644
--- a/Dockerfile-debian.template
+++ b/Dockerfile-debian.template
@@ -46,7 +46,8 @@ RUN set -ex; \
 # Configure Flink version
 ENV FLINK_TGZ_URL=%%BINARY_DOWNLOAD_URL%% \
     FLINK_ASC_URL=%%ASC_DOWNLOAD_URL%% \
-    GPG_KEY=%%GPG_KEY%%
+    GPG_KEY=%%GPG_KEY%% \
+    CHECK_GPG=%%CHECK_GPG%%
 
 # Prepare environment
 ENV FLINK_HOME=/opt/flink
@@ -58,19 +59,21 @@ WORKDIR $FLINK_HOME
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
-  wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
   \
-  export GNUPGHOME="$(mktemp -d)"; \
-  for server in ha.pool.sks-keyservers.net $(shuf -e \
-                          hkp://p80.pool.sks-keyservers.net:80 \
-                          keyserver.ubuntu.com \
-                          hkp://keyserver.ubuntu.com:80 \
-                          pgp.mit.edu) ; do \
-      gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
-  done && \
-  gpg --batch --verify flink.tgz.asc flink.tgz; \
-  gpgconf --kill all; \
-  rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  if [ "$CHECK_GPG" = "true" ]; then \
+    wget -nv -O flink.tgz.asc "$FLINK_ASC_URL"; \
+    export GNUPGHOME="$(mktemp -d)"; \
+    for server in ha.pool.sks-keyservers.net $(shuf -e \
+                            hkp://p80.pool.sks-keyservers.net:80 \
+                            keyserver.ubuntu.com \
+                            hkp://keyserver.ubuntu.com:80 \
+                            pgp.mit.edu) ; do \
+        gpg --batch --keyserver "$server" --recv-keys "$GPG_KEY" && break || : ; \
+    done && \
+    gpg --batch --verify flink.tgz.asc flink.tgz; \
+    gpgconf --kill all; \
+    rm -rf "$GNUPGHOME" flink.tgz.asc; \
+  fi; \
   \
   tar -xf flink.tgz --strip-components=1; \
   rm flink.tgz; \
diff --git a/add-custom.sh b/add-custom.sh
new file mode 100755
index 0000000..c863f3f
--- /dev/null
+++ b/add-custom.sh
@@ -0,0 +1,49 @@
+#!/bin/bash -e
+
+# Use this script to build the Dockerfiles against an arbitrary
+# Flink distribution.
+# This is exlusively for development purposes.
+
+source "$(dirname "$0")"/common.sh
+
+function usage() {
+    echo >&2 "usage: $0 -u binary-download-url [-n name]"
+}
+
+binary_download_url=
+name=custom
+
+while getopts u:n:h arg; do
+  case "$arg" in
+    u)
+      binary_download_url=$OPTARG
+      ;;
+    n)
+      name=$OPTARG
+      ;;
+    h)
+      usage
+      exit 0
+      ;;
+    \?)
+      usage
+      exit 1
+      ;;
+  esac
+done
+
+if [ -z "${binary_download_url}" ]; then
+    usage
+    exit 1
+fi
+
+mkdir -p "dev"
+
+echo -n >&2 "Generating Dockerfiles..."
+for source_variant in "${SOURCE_VARIANTS[@]}"; do
+  dir="dev/${name}-${source_variant}"
+  rm -rf "${dir}"
+
+  generate "${dir}" "${binary_download_url}" "" "" false ${source_variant}
+done
+echo >&2 " done."
diff --git a/add-version.sh b/add-version.sh
index 779113b..329ed70 100755
--- a/add-version.sh
+++ b/add-version.sh
@@ -10,6 +10,8 @@
 #
 # See other repos (e.g. httpd, cassandra) for update.sh examples.
 
+source "$(dirname "$0")"/common.sh
+
 function usage() {
     echo >&2 "usage: $0 -r flink-release -f flink-version"
 }
@@ -57,7 +59,6 @@ if [[ ! "$flink_version" =~ ^$flink_release\.+ ]]; then
 fi
 
 # Defaults, can vary between versions
-source_variants=( debian )
 scala_versions=( 2.11 2.12 )
 gpg_key=
 
@@ -95,28 +96,8 @@ fi
 
 mkdir "$flink_release"
 
-function generate() {
-    dir=$1
-    binary_download_url=$2
-    asc_download_url=$3
-    gpg_key=$4
-    source_variant=$5
-
-    mkdir "$dir"
-    cp docker-entrypoint.sh "$dir/docker-entrypoint.sh"
-
-    # '&' has special semantics in sed replacement patterns
-    escaped_binary_download_url=$(echo "$binary_download_url" | sed 's/&/\\\&/')
-
-    sed \
-        -e "s,%%BINARY_DOWNLOAD_URL%%,${escaped_binary_download_url}," \
-        -e "s,%%ASC_DOWNLOAD_URL%%,$asc_download_url," \
-        -e "s/%%GPG_KEY%%/$gpg_key/" \
-        "Dockerfile-$source_variant.template" > "$dir/Dockerfile"
-}
-
 echo -n >&2 "Generating Dockerfiles..."
-for source_variant in "${source_variants[@]}"; do
+for source_variant in "${SOURCE_VARIANTS[@]}"; do
     for scala_version in "${scala_versions[@]}"; do
         dir="$flink_release/scala_${scala_version}-${source_variant}"
 
@@ -126,7 +107,7 @@ for source_variant in "${source_variants[@]}"; do
         # Not all mirrors have the .asc files
         flink_asc_url=https://www.apache.org/dist/${flink_url_file_path}.asc
 
-        generate "${dir}" "${flink_tgz_url}" "${flink_asc_url}" ${gpg_key} ${source_variant}
+        generate "${dir}" "${flink_tgz_url}" "${flink_asc_url}" ${gpg_key} true ${source_variant}
     done
 done
 echo >&2 " done."
diff --git a/common.sh b/common.sh
new file mode 100644
index 0000000..0232930
--- /dev/null
+++ b/common.sh
@@ -0,0 +1,26 @@
+#!/bin/bash -e
+
+# Defaults, can vary between versions
+export SOURCE_VARIANTS=( debian )
+
+function generate() {
+    dir=$1
+    binary_download_url=$2
+    asc_download_url=$3
+    gpg_key=$4
+    check_gpg=$5
+    source_variant=$6
+
+    mkdir "$dir"
+    cp docker-entrypoint.sh "$dir/docker-entrypoint.sh"
+
+    # '&' has special semantics in sed replacement patterns
+    escaped_binary_download_url=$(echo "$binary_download_url" | sed 's/&/\\\&/')
+
+    sed \
+        -e "s,%%BINARY_DOWNLOAD_URL%%,${escaped_binary_download_url}," \
+        -e "s,%%ASC_DOWNLOAD_URL%%,$asc_download_url," \
+        -e "s/%%GPG_KEY%%/$gpg_key/" \
+        -e "s/%%CHECK_GPG%%/${check_gpg}/" \
+        "Dockerfile-$source_variant.template" > "$dir/Dockerfile"
+}


[flink-docker] 01/02: [FLINK-17367] Directly inject download URLs

Posted by ch...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

chesnay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-docker.git

commit 1c4c876b6127e51569477250bec350c951acd47b
Author: Chesnay Schepler <ch...@apache.org>
AuthorDate: Fri Apr 24 10:40:05 2020 +0200

    [FLINK-17367] Directly inject download URLs
---
 1.10/scala_2.11-debian/Dockerfile |  9 ++-------
 1.10/scala_2.12-debian/Dockerfile |  9 ++-------
 1.9/scala_2.11-debian/Dockerfile  |  9 ++-------
 1.9/scala_2.12-debian/Dockerfile  |  9 ++-------
 Dockerfile-debian.template        |  9 ++-------
 add-version.sh                    | 33 ++++++++++++++++++++++++++-------
 6 files changed, 36 insertions(+), 42 deletions(-)

diff --git a/1.10/scala_2.11-debian/Dockerfile b/1.10/scala_2.11-debian/Dockerfile
index 1513b58..5c84be8 100644
--- a/1.10/scala_2.11-debian/Dockerfile
+++ b/1.10/scala_2.11-debian/Dockerfile
@@ -44,8 +44,8 @@ RUN set -ex; \
   gosu nobody true
 
 # Configure Flink version
-ENV FLINK_VERSION=1.10.0 \
-    SCALA_VERSION=2.11 \
+ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz \
+    FLINK_ASC_URL=https://www.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz.asc \
     GPG_KEY=BB137807CEFBE7DD2616556710B12A1F89C115E8
 
 # Prepare environment
@@ -55,11 +55,6 @@ RUN groupadd --system --gid=9999 flink && \
     useradd --system --home-dir $FLINK_HOME --uid=9999 --gid=flink flink
 WORKDIR $FLINK_HOME
 
-ENV FLINK_URL_FILE_PATH=flink/flink-${FLINK_VERSION}/flink-${FLINK_VERSION}-bin-scala_${SCALA_VERSION}.tgz
-# Not all mirrors have the .asc files
-ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=${FLINK_URL_FILE_PATH} \
-    FLINK_ASC_URL=https://www.apache.org/dist/${FLINK_URL_FILE_PATH}.asc
-
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
diff --git a/1.10/scala_2.12-debian/Dockerfile b/1.10/scala_2.12-debian/Dockerfile
index 1febf1a..c8e1c09 100644
--- a/1.10/scala_2.12-debian/Dockerfile
+++ b/1.10/scala_2.12-debian/Dockerfile
@@ -44,8 +44,8 @@ RUN set -ex; \
   gosu nobody true
 
 # Configure Flink version
-ENV FLINK_VERSION=1.10.0 \
-    SCALA_VERSION=2.12 \
+ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.10.0/flink-1.10.0-bin-scala_2.12.tgz \
+    FLINK_ASC_URL=https://www.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.12.tgz.asc \
     GPG_KEY=BB137807CEFBE7DD2616556710B12A1F89C115E8
 
 # Prepare environment
@@ -55,11 +55,6 @@ RUN groupadd --system --gid=9999 flink && \
     useradd --system --home-dir $FLINK_HOME --uid=9999 --gid=flink flink
 WORKDIR $FLINK_HOME
 
-ENV FLINK_URL_FILE_PATH=flink/flink-${FLINK_VERSION}/flink-${FLINK_VERSION}-bin-scala_${SCALA_VERSION}.tgz
-# Not all mirrors have the .asc files
-ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=${FLINK_URL_FILE_PATH} \
-    FLINK_ASC_URL=https://www.apache.org/dist/${FLINK_URL_FILE_PATH}.asc
-
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
diff --git a/1.9/scala_2.11-debian/Dockerfile b/1.9/scala_2.11-debian/Dockerfile
index 49046f8..8a82570 100644
--- a/1.9/scala_2.11-debian/Dockerfile
+++ b/1.9/scala_2.11-debian/Dockerfile
@@ -44,8 +44,8 @@ RUN set -ex; \
   gosu nobody true
 
 # Configure Flink version
-ENV FLINK_VERSION=1.9.3 \
-    SCALA_VERSION=2.11 \
+ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.9.3/flink-1.9.3-bin-scala_2.11.tgz \
+    FLINK_ASC_URL=https://www.apache.org/dist/flink/flink-1.9.3/flink-1.9.3-bin-scala_2.11.tgz.asc \
     GPG_KEY=6B6291A8502BA8F0913AE04DDEB95B05BF075300
 
 # Prepare environment
@@ -55,11 +55,6 @@ RUN groupadd --system --gid=9999 flink && \
     useradd --system --home-dir $FLINK_HOME --uid=9999 --gid=flink flink
 WORKDIR $FLINK_HOME
 
-ENV FLINK_URL_FILE_PATH=flink/flink-${FLINK_VERSION}/flink-${FLINK_VERSION}-bin-scala_${SCALA_VERSION}.tgz
-# Not all mirrors have the .asc files
-ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=${FLINK_URL_FILE_PATH} \
-    FLINK_ASC_URL=https://www.apache.org/dist/${FLINK_URL_FILE_PATH}.asc
-
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
diff --git a/1.9/scala_2.12-debian/Dockerfile b/1.9/scala_2.12-debian/Dockerfile
index aad8384..dc30005 100644
--- a/1.9/scala_2.12-debian/Dockerfile
+++ b/1.9/scala_2.12-debian/Dockerfile
@@ -44,8 +44,8 @@ RUN set -ex; \
   gosu nobody true
 
 # Configure Flink version
-ENV FLINK_VERSION=1.9.3 \
-    SCALA_VERSION=2.12 \
+ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=flink/flink-1.9.3/flink-1.9.3-bin-scala_2.12.tgz \
+    FLINK_ASC_URL=https://www.apache.org/dist/flink/flink-1.9.3/flink-1.9.3-bin-scala_2.12.tgz.asc \
     GPG_KEY=6B6291A8502BA8F0913AE04DDEB95B05BF075300
 
 # Prepare environment
@@ -55,11 +55,6 @@ RUN groupadd --system --gid=9999 flink && \
     useradd --system --home-dir $FLINK_HOME --uid=9999 --gid=flink flink
 WORKDIR $FLINK_HOME
 
-ENV FLINK_URL_FILE_PATH=flink/flink-${FLINK_VERSION}/flink-${FLINK_VERSION}-bin-scala_${SCALA_VERSION}.tgz
-# Not all mirrors have the .asc files
-ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=${FLINK_URL_FILE_PATH} \
-    FLINK_ASC_URL=https://www.apache.org/dist/${FLINK_URL_FILE_PATH}.asc
-
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
diff --git a/Dockerfile-debian.template b/Dockerfile-debian.template
index a4896d2..0a206e6 100644
--- a/Dockerfile-debian.template
+++ b/Dockerfile-debian.template
@@ -44,8 +44,8 @@ RUN set -ex; \
   gosu nobody true
 
 # Configure Flink version
-ENV FLINK_VERSION=%%FLINK_VERSION%% \
-    SCALA_VERSION=%%SCALA_VERSION%% \
+ENV FLINK_TGZ_URL=%%BINARY_DOWNLOAD_URL%% \
+    FLINK_ASC_URL=%%ASC_DOWNLOAD_URL%% \
     GPG_KEY=%%GPG_KEY%%
 
 # Prepare environment
@@ -55,11 +55,6 @@ RUN groupadd --system --gid=9999 flink && \
     useradd --system --home-dir $FLINK_HOME --uid=9999 --gid=flink flink
 WORKDIR $FLINK_HOME
 
-ENV FLINK_URL_FILE_PATH=flink/flink-${FLINK_VERSION}/flink-${FLINK_VERSION}-bin-scala_${SCALA_VERSION}.tgz
-# Not all mirrors have the .asc files
-ENV FLINK_TGZ_URL=https://www.apache.org/dyn/closer.cgi?action=download&filename=${FLINK_URL_FILE_PATH} \
-    FLINK_ASC_URL=https://www.apache.org/dist/${FLINK_URL_FILE_PATH}.asc
-
 # Install Flink
 RUN set -ex; \
   wget -nv -O flink.tgz "$FLINK_TGZ_URL"; \
diff --git a/add-version.sh b/add-version.sh
index d6db723..779113b 100755
--- a/add-version.sh
+++ b/add-version.sh
@@ -95,19 +95,38 @@ fi
 
 mkdir "$flink_release"
 
+function generate() {
+    dir=$1
+    binary_download_url=$2
+    asc_download_url=$3
+    gpg_key=$4
+    source_variant=$5
+
+    mkdir "$dir"
+    cp docker-entrypoint.sh "$dir/docker-entrypoint.sh"
+
+    # '&' has special semantics in sed replacement patterns
+    escaped_binary_download_url=$(echo "$binary_download_url" | sed 's/&/\\\&/')
+
+    sed \
+        -e "s,%%BINARY_DOWNLOAD_URL%%,${escaped_binary_download_url}," \
+        -e "s,%%ASC_DOWNLOAD_URL%%,$asc_download_url," \
+        -e "s/%%GPG_KEY%%/$gpg_key/" \
+        "Dockerfile-$source_variant.template" > "$dir/Dockerfile"
+}
+
 echo -n >&2 "Generating Dockerfiles..."
 for source_variant in "${source_variants[@]}"; do
     for scala_version in "${scala_versions[@]}"; do
         dir="$flink_release/scala_${scala_version}-${source_variant}"
 
-        mkdir "$dir"
-        cp docker-entrypoint.sh "$dir/docker-entrypoint.sh"
+        flink_url_file_path=flink/flink-${flink_version}/flink-${flink_version}-bin-scala_${scala_version}.tgz
+
+        flink_tgz_url="https://www.apache.org/dyn/closer.cgi?action=download&filename=${flink_url_file_path}"
+        # Not all mirrors have the .asc files
+        flink_asc_url=https://www.apache.org/dist/${flink_url_file_path}.asc
 
-        sed \
-            -e "s/%%FLINK_VERSION%%/$flink_version/" \
-            -e "s/%%SCALA_VERSION%%/$scala_version/" \
-            -e "s/%%GPG_KEY%%/$gpg_key/" \
-            "Dockerfile-$source_variant.template" > "$dir/Dockerfile"
+        generate "${dir}" "${flink_tgz_url}" "${flink_asc_url}" ${gpg_key} ${source_variant}
     done
 done
 echo >&2 " done."