mirror of
https://ops.gitlab.net/gitlab-org/gitlab-build-images.git
synced 2025-12-08 17:42:56 +01:00
Build arm64 images by default and additionally do not require docker buildx for simple builds
This commit is contained in:
parent
66c6656f97
commit
f6a1f0e63f
12 changed files with 128 additions and 84 deletions
|
|
@ -1,5 +1,5 @@
|
|||
.install-qemu:
|
||||
timeout: 2 hours # builds with emulation can take a long time to complete
|
||||
timeout: 4 hours # builds with emulation can take a long time to complete
|
||||
tags:
|
||||
- docker
|
||||
- high-cpu
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ gitlab:
|
|||
LFS: '2.9'
|
||||
YARN: '1.22'
|
||||
GRAPHICSMAGICK: '1.3.36'
|
||||
ARCH: linux/amd64,linux/arm64
|
||||
parallel:
|
||||
matrix:
|
||||
- OS: ['debian:bullseye']
|
||||
|
|
@ -28,6 +29,7 @@ gitlab-assets:
|
|||
LFS: '2.9'
|
||||
YARN: '1.22'
|
||||
GRAPHICSMAGICK: '1.3.36'
|
||||
ARCH: amd64,arm64
|
||||
parallel:
|
||||
matrix:
|
||||
- OS: ['debian:bullseye']
|
||||
|
|
|
|||
|
|
@ -35,13 +35,13 @@ RUN if [ -n "$GIT_VERSION" ]; then /scripts/install-git && git --version; fi
|
|||
# Chrome
|
||||
ARG CHROME_VERSION
|
||||
|
||||
RUN if [ -n "$CHROME_VERSION" ]; then /scripts/install-chrome $CHROME_VERSION && ( google-chrome --version || chromium --version ); fi
|
||||
RUN if [ -n "$CHROME_VERSION" ]; then /scripts/install-chrome "$CHROME_VERSION" && ( google-chrome --version || chromium --version ); fi
|
||||
|
||||
# NodeJS and Yarn
|
||||
ARG NODE_INSTALL_VERSION
|
||||
ARG YARN_INSTALL_VERSION
|
||||
|
||||
RUN if [ -n "$NODE_INSTALL_VERSION" ] ; then /scripts/install-node $NODE_INSTALL_VERSION $YARN_INSTALL_VERSION && node --version && yarn --version; fi
|
||||
RUN if [ -n "$NODE_INSTALL_VERSION" ] ; then /scripts/install-node "$NODE_INSTALL_VERSION" "$YARN_INSTALL_VERSION" && node --version && yarn --version; fi
|
||||
|
||||
# Golang
|
||||
ARG INSTALL_GOLANG_VERSION
|
||||
|
|
@ -58,7 +58,7 @@ RUN if [ -n "$LFS_VERSION" ]; then /scripts/install-lfs && git lfs --version; fi
|
|||
# Postgres
|
||||
ARG POSTGRES_VERSION
|
||||
|
||||
RUN if [ -n "$POSTGRES_VERSION" ] ; then /scripts/install-postgresql $POSTGRES_VERSION; fi
|
||||
RUN if [ -n "$POSTGRES_VERSION" ] ; then /scripts/install-postgresql "$POSTGRES_VERSION"; fi
|
||||
|
||||
# GraphicsMagick
|
||||
ARG GRAPHISMAGICK_VERSION
|
||||
|
|
@ -70,36 +70,36 @@ RUN if [ -n "$GRAPHISMAGICK_VERSION" ]; then /scripts/install-graphicsmagick &&
|
|||
# Docker
|
||||
ARG DOCKER_VERSION
|
||||
|
||||
RUN if [ -n "$DOCKER_VERSION" ]; then /scripts/install-docker $DOCKER_VERSION; fi
|
||||
RUN if [ -n "$DOCKER_VERSION" ]; then /scripts/install-docker "$DOCKER_VERSION"; fi
|
||||
|
||||
# Docker buildx plugin
|
||||
ARG BUILDX_VERSION
|
||||
ARG BUILDX_DOWNLOAD_SHA256
|
||||
|
||||
RUN if [ -n "$BUILDX_VERSION" ]; then /scripts/install-buildx $BUILDX_VERSION $BUILDX_DOWNLOAD_SHA256; fi
|
||||
RUN if [ -n "$BUILDX_VERSION" ]; then /scripts/install-buildx "$BUILDX_VERSION" "$BUILDX_DOWNLOAD_SHA256"; fi
|
||||
|
||||
# Bazelisk
|
||||
ARG BAZELISK_VERSION
|
||||
ARG BAZELISK_DOWNLOAD_SHA256
|
||||
|
||||
RUN if [ -n "$BAZELISK_VERSION" ] ; then /scripts/install-bazelisk $BAZELISK_VERSION $BAZELISK_DOWNLOAD_SHA256; fi
|
||||
RUN if [ -n "$BAZELISK_VERSION" ] ; then /scripts/install-bazelisk "$BAZELISK_VERSION" "$BAZELISK_DOWNLOAD_SHA256"; fi
|
||||
|
||||
# Google-cloud-sdk
|
||||
ARG GCLOUD_VERSION
|
||||
|
||||
RUN if [ -n "$GCLOUD_VERSION" ] ; then /scripts/install-gcloud $GCLOUD_VERSION; fi
|
||||
RUN if [ -n "$GCLOUD_VERSION" ] ; then /scripts/install-gcloud "$GCLOUD_VERSION"; fi
|
||||
|
||||
# Kubectl
|
||||
ARG KUBECTL_VERSION
|
||||
ARG KUBECTL_DOWNLOAD_SHA256
|
||||
|
||||
RUN if [ -n "$KUBECTL_VERSION" ] ; then /scripts/install-kubectl $KUBECTL_VERSION $KUBECTL_DOWNLOAD_SHA256; fi
|
||||
RUN if [ -n "$KUBECTL_VERSION" ] ; then /scripts/install-kubectl "$KUBECTL_VERSION" "$KUBECTL_DOWNLOAD_SHA256"; fi
|
||||
|
||||
# Helm
|
||||
ARG HELM_VERSION
|
||||
ARG HELM_DOWNLOAD_SHA256
|
||||
|
||||
RUN if [ -n "$HELM_VERSION" ] ; then /scripts/install-helm $HELM_VERSION $HELM_DOWNLOAD_SHA256; fi
|
||||
RUN if [ -n "$HELM_VERSION" ] ; then /scripts/install-helm "$HELM_VERSION" "$HELM_DOWNLOAD_SHA256"; fi
|
||||
|
||||
RUN /scripts/generate-locale
|
||||
ENV LANG=C.UTF-8 \
|
||||
|
|
|
|||
22
scripts/download-file
Executable file
22
scripts/download-file
Executable file
|
|
@ -0,0 +1,22 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [[ $# -lt 3 ]]; then
|
||||
echo "usage: $0 <file> <url> <checksum(s)...>" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -xeou pipefail
|
||||
|
||||
FILE="$1"
|
||||
URL="$2"
|
||||
shift 2
|
||||
|
||||
curl --retry 6 -fsSL "$URL" -o "$FILE"
|
||||
|
||||
for checksum; do
|
||||
if echo "${checksum} ${FILE}" | sha256sum -c -; then
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
|
||||
exit 1
|
||||
|
|
@ -6,8 +6,7 @@ BUILDX_VERSION=${1}
|
|||
BUILDX_DOWNLOAD_SHA256=${2}
|
||||
BUILDX_DOWNLOAD_URL="https://github.com/docker/buildx/releases/download/v${BUILDX_VERSION}/buildx-v${BUILDX_VERSION}.linux-${TARGETARCH:-amd64}"
|
||||
|
||||
curl -fsSL "${BUILDX_DOWNLOAD_URL}" -o docker-buildx
|
||||
echo "${BUILDX_DOWNLOAD_SHA256} docker-buildx" | sha256sum -c -
|
||||
/scripts/download-file docker-buildx "$BUILDX_DOWNLOAD_URL" $BUILDX_DOWNLOAD_SHA256
|
||||
|
||||
mkdir -p /usr/local/lib/docker/cli-plugins
|
||||
chmod +x docker-buildx && mv docker-buildx /usr/local/lib/docker/cli-plugins/
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@ function build_debian() {
|
|||
if [ "${ARCH}" == "amd64" ]; then
|
||||
PKG=google-chrome-stable
|
||||
else
|
||||
PKG=chromium
|
||||
# TODO: We do not yet have all packages required for platform other than amd64
|
||||
apt install -y chromium chromium-driver
|
||||
return
|
||||
fi
|
||||
|
||||
# We hard code the URL rather than using $CI_API_V4_URL $CI_PROJECT_ID,
|
||||
|
|
@ -21,8 +23,7 @@ function build_debian() {
|
|||
|
||||
echo "Installing browser"
|
||||
curl --silent --show-error --fail -O "$BROWSER_URL"
|
||||
dpkg -i "./${BROWSER_DEB}" || true
|
||||
apt-get install -f -y
|
||||
apt install -y "$PWD/$BROWSER_DEB"
|
||||
rm -f "$BROWSER_DEB"
|
||||
|
||||
echo "Installing webdriver"
|
||||
|
|
@ -38,8 +39,7 @@ function build_debian() {
|
|||
DRIVER_URL="${DOWNLOAD_URL_BASE}/${CHROME_VERSION}/${DRIVER_DEB}"
|
||||
|
||||
curl --silent --show-error --fail -O "$DRIVER_URL"
|
||||
dpkg -i "./${DRIVER_DEB}" || true
|
||||
apt-get install -f -y
|
||||
apt install -y "$PWD/$DRIVER_DEB"
|
||||
rm -f "$DRIVER_DEB"
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -8,8 +8,7 @@ GOLANG_DOWNLOAD_SHA256=${2}
|
|||
GOLANG_DOWNLOAD_URL="https://golang.org/dl/go${INSTALL_GOLANG_VERSION}.linux-${TARGETARCH:-amd64}.tar.gz"
|
||||
|
||||
function build_debian() {
|
||||
curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz
|
||||
echo "${GOLANG_DOWNLOAD_SHA256} golang.tar.gz" | sha256sum -c -
|
||||
/scripts/download-file golang.tar.gz "$GOLANG_DOWNLOAD_URL" $GOLANG_DOWNLOAD_SHA256
|
||||
tar -C /usr/local -xzf golang.tar.gz
|
||||
rm golang.tar.gz
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,9 +6,7 @@ HELM_VERSION=${1}
|
|||
HELM_DOWNLOAD_SHA256=${2}
|
||||
HELM_DOWNLOAD_URL="https://get.helm.sh/helm-v${HELM_VERSION}-linux-${TARGETARCH:-amd64}.tar.gz"
|
||||
|
||||
curl -fsSL "${HELM_DOWNLOAD_URL}" -o helm.tar.gz
|
||||
echo "${HELM_DOWNLOAD_SHA256} helm.tar.gz" | sha256sum -c -
|
||||
|
||||
/scripts/download-file helm.tar.gz "$HELM_DOWNLOAD_URL" $HELM_DOWNLOAD_SHA256
|
||||
|
||||
tar -xzf helm.tar.gz --strip-components=1
|
||||
rm helm.tar.gz
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@ KUBECTL_VERSION=${1}
|
|||
KUBECTL_DOWNLOAD_SHA256=${2}
|
||||
KUBECTL_DOWNLOAD_URL="https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/${TARGETARCH:-amd64}/kubectl"
|
||||
|
||||
curl -fsSL "${KUBECTL_DOWNLOAD_URL}" -o kubectl
|
||||
echo "${KUBECTL_DOWNLOAD_SHA256} kubectl" | sha256sum -c -
|
||||
/scripts/download-file kubectl "$KUBECTL_DOWNLOAD_URL" $KUBECTL_DOWNLOAD_SHA256
|
||||
|
||||
chmod +x kubectl
|
||||
mv kubectl /usr/local/bin/kubectl
|
||||
|
|
|
|||
|
|
@ -5,12 +5,9 @@ IFS=$'\n\t'
|
|||
|
||||
LFS_DOWNLOAD_URL="https://github.com/git-lfs/git-lfs/releases/download/v${LFS_VERSION}/git-lfs-linux-${TARGETARCH:-amd64}-v${LFS_VERSION}.tar.gz"
|
||||
|
||||
mkdir build \
|
||||
&& curl -fsSL "$LFS_DOWNLOAD_URL" -o git-lfs.tar.gz \
|
||||
&& echo "$LFS_DOWNLOAD_SHA256 git-lfs.tar.gz" | sha256sum -c - \
|
||||
&& tar -C build -xzf git-lfs.tar.gz \
|
||||
&& cd build \
|
||||
&& cp git-lfs /usr/local/bin/ \
|
||||
&& cd .. \
|
||||
&& rm -rf build \
|
||||
&& rm git-lfs.tar.gz
|
||||
/scripts/download-file git-lfs.tar.gz "$LFS_DOWNLOAD_URL" $LFS_DOWNLOAD_SHA256
|
||||
|
||||
mkdir build
|
||||
tar -C build -xzf git-lfs.tar.gz
|
||||
cp build/git-lfs /usr/local/bin/
|
||||
rm -rf build git-lfs.tar.gz
|
||||
|
|
|
|||
|
|
@ -5,12 +5,31 @@ IFS=$'\n\t'
|
|||
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||
source "$SCRIPT_DIR/custom-docker.sh"
|
||||
|
||||
function get_base_image_reference() {
|
||||
if [[ $1 =~ ^debian ]]; then
|
||||
echo "$1"
|
||||
elif [[ $1 =~ ^ubi:8 ]]; then
|
||||
echo "registry.access.redhat.com/ubi8/$1"
|
||||
fi
|
||||
function fail() {
|
||||
echo "$@" 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function print_image_args() {
|
||||
declare -A CUSTOM_BASE_IMAGE
|
||||
declare -A BUILD_OS
|
||||
|
||||
case "$1:$2" in
|
||||
debian:*)
|
||||
CUSTOM_BASE_IMAGE="$1:$2"
|
||||
BUILD_OS=debian
|
||||
;;
|
||||
|
||||
ubi:8.*)
|
||||
CUSTOM_BASE_IMAGE="registry.access.redhat.com/ubi8/ubi:$2"
|
||||
BUILD_OS=ubi
|
||||
;;
|
||||
|
||||
*) fail "Unknown image version $1:$2" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg CUSTOM_BASE_IMAGE=%s " "$CUSTOM_BASE_IMAGE"
|
||||
printf -- "--build-arg BUILD_OS=%s " "$BUILD_OS"
|
||||
}
|
||||
|
||||
function print_golang_args() {
|
||||
|
|
@ -30,13 +49,13 @@ function print_golang_args() {
|
|||
1.19)
|
||||
INSTALL_GOLANG_VERSION=1.19.2
|
||||
GOLANG_DOWNLOAD_SHA256[amd64]=5e8c5a74fe6470dd7e055a461acda8bb4050ead8c2df70f227e3ff7d8eb7eeb6
|
||||
GOLANG_DOWNLOAD_SHA256[arm64]=62a8d9654436c67c14a0c91e931d50440541f09eb991a987536cb982903126d
|
||||
GOLANG_DOWNLOAD_SHA256[arm64]=b62a8d9654436c67c14a0c91e931d50440541f09eb991a987536cb982903126d
|
||||
;;
|
||||
*) echo "Unknown golang version $1"; exit 1;
|
||||
*) fail "Unknown golang version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg INSTALL_GOLANG_VERSION=%s " "$INSTALL_GOLANG_VERSION"
|
||||
printf -- "--build-arg GOLANG_DOWNLOAD_SHA256=%s " "${GOLANG_DOWNLOAD_SHA256[$TARGETARCH]}"
|
||||
printf -- "--build-arg GOLANG_DOWNLOAD_SHA256=%q " "${GOLANG_DOWNLOAD_SHA256[*]}"
|
||||
}
|
||||
|
||||
# If you add a new minor version here, be sure to check that the
|
||||
|
|
@ -54,7 +73,7 @@ function print_chrome_args() {
|
|||
106|106.0)
|
||||
CHROME_VERSION=106.0.5249.91-1
|
||||
;;
|
||||
*) echo "Unknown chrome version $1"; exit 1;
|
||||
*) fail "Unknown chrome version $1" ;;
|
||||
esac
|
||||
printf -- "--build-arg CHROME_VERSION=%s " "$CHROME_VERSION"
|
||||
}
|
||||
|
|
@ -70,7 +89,7 @@ function print_git_args() {
|
|||
GIT_VERSION=2.36.1
|
||||
GIT_DOWNLOAD_SHA256=37d936fd17c81aa9ddd3dba4e56e88a45fa534ad0ba946454e8ce818760c6a2c
|
||||
;;
|
||||
*) echo "Unknown git version $1"; exit 1;
|
||||
*) fail "Unknown git version $1" ;;
|
||||
esac
|
||||
|
||||
case "$GIT_VERSION" in
|
||||
|
|
@ -95,11 +114,11 @@ function print_lfs_args() {
|
|||
LFS_DOWNLOAD_SHA256[amd64]=2a8e60cf51ec45aa0f4332aa0521d60ec75c76e485d13ebaeea915b9d70ea466
|
||||
LFS_DOWNLOAD_SHA256[arm64]=ff2f8472a5ac0e808108bad0cc6be5ca1849eb970228b1aa3d627bcbc8228ad9
|
||||
;;
|
||||
*) echo "Unknown Git LFS version $1"; exit 1;
|
||||
*) fail "Unknown Git LFS version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg LFS_VERSION=%s " "$LFS_VERSION"
|
||||
printf -- "--build-arg LFS_DOWNLOAD_SHA256=%s " "${LFS_DOWNLOAD_SHA256[$TARGETARCH]}"
|
||||
printf -- "--build-arg LFS_DOWNLOAD_SHA256=%q " "${LFS_DOWNLOAD_SHA256[*]}"
|
||||
}
|
||||
|
||||
function print_node_args() {
|
||||
|
|
@ -107,7 +126,7 @@ function print_node_args() {
|
|||
14.15) NODE_INSTALL_VERSION=14.15.4 ;;
|
||||
14|14.16) NODE_INSTALL_VERSION=14.16.0 ;;
|
||||
16|16.14) NODE_INSTALL_VERSION=16.14.2 ;;
|
||||
*) echo "Unknown node version $1"; exit 1;
|
||||
*) fail "Unknown node version $1" ;;
|
||||
esac
|
||||
printf -- "--build-arg NODE_INSTALL_VERSION=%s " "$NODE_INSTALL_VERSION"
|
||||
}
|
||||
|
|
@ -118,7 +137,7 @@ function print_yarn_args() {
|
|||
1.16) YARN_INSTALL_VERSION=1.16.0 ;;
|
||||
1.21) YARN_INSTALL_VERSION=1.21.1 ;;
|
||||
1.22) YARN_INSTALL_VERSION=1.22.17 ;;
|
||||
*) echo "Unknown yarn version $1"; exit 1;
|
||||
*) fail "Unknown yarn version $1" ;;
|
||||
esac
|
||||
printf -- "--build-arg YARN_INSTALL_VERSION=%s " "$YARN_INSTALL_VERSION"
|
||||
}
|
||||
|
|
@ -140,11 +159,11 @@ function print_buildx_args() {
|
|||
BUILDX_DOWNLOAD_SHA256[amd64]=c64de4f3c30f7a73ff9db637660c7aa0f00234368105b0a09fa8e24eebe910c3
|
||||
BUILDX_DOWNLOAD_SHA256[arm64]=304d3d9822c75f98ad9cf57f0c234bcf326bbb96d791d551728cadd72a7a377f
|
||||
;;
|
||||
*) echo "Unknown buildx version $1"; exit 1;
|
||||
*) fail "Unknown buildx version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg BUILDX_VERSION=%s " "$BUILDX_VERSION"
|
||||
printf -- "--build-arg BUILDX_DOWNLOAD_SHA256=%s " "${BUILDX_DOWNLOAD_SHA256[$TARGETARCH]}"
|
||||
printf -- "--build-arg BUILDX_DOWNLOAD_SHA256=%q " "${BUILDX_DOWNLOAD_SHA256[*]}"
|
||||
}
|
||||
|
||||
function print_graphicsmagick_args() {
|
||||
|
|
@ -165,7 +184,7 @@ function print_graphicsmagick_args() {
|
|||
GRAPHISMAGICK_VERSION=1.3.36
|
||||
GRAPHISMAGICK_DOWNLOAD_SHA256=1e6723c48c4abbb31197fadf8396b2d579d97e197123edc70a4f057f0533d563
|
||||
;;
|
||||
*) echo "Unknown graphicsmagick version $1"; exit 1;
|
||||
*) fail "Unknown graphicsmagick version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg GRAPHISMAGICK_VERSION=%s " "$GRAPHISMAGICK_VERSION"
|
||||
|
|
@ -178,7 +197,7 @@ function print_bazelisk_args() {
|
|||
BAZELISK_VERSION=1.9.0
|
||||
BAZELISK_DOWNLOAD_SHA256=b8c7f2a1b07ad64a2f27f8f19a202f90d044de7b5b6ccc387a6fe5d4a8ec4937
|
||||
;;
|
||||
*) echo "Unknown bazelisk version $1"; exit 1;
|
||||
*) fail "Unknown bazelisk version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg BAZELISK_VERSION=%s " "$BAZELISK_VERSION"
|
||||
|
|
@ -209,7 +228,7 @@ function print_ruby_args() {
|
|||
RUBY_DOWNLOAD_SHA256="70b47c207af04bce9acea262308fb42893d3e244f39a4abc586920a1c723722b"
|
||||
;;
|
||||
|
||||
*) echo "Unknown ruby version $1"; exit 1;
|
||||
*) fail "Unknown ruby version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg RUBY_VERSION=%s " "$RUBY_VERSION"
|
||||
|
|
@ -224,7 +243,7 @@ function print_bundler_args() {
|
|||
2.3)
|
||||
BUNDLER_VERSION=2.3.15
|
||||
;;
|
||||
*) echo "Unknown bundler version $1"; exit 1;
|
||||
*) fail "Unknown bundler version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg BUNDLER_VERSION=%s " "$BUNDLER_VERSION"
|
||||
|
|
@ -238,7 +257,7 @@ function print_rubygems_args() {
|
|||
3.2)
|
||||
RUBYGEMS_VERSION=3.2.33
|
||||
;;
|
||||
*) echo "Unknown rubygems version $1"; exit 1;
|
||||
*) fail "Unknown rubygems version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg RUBYGEMS_VERSION=%s " "$RUBYGEMS_VERSION"
|
||||
|
|
@ -249,7 +268,7 @@ function print_gcloud_args() {
|
|||
383)
|
||||
GCLOUD_VERSION=383.0.1
|
||||
;;
|
||||
*) echo "Unknown gcloud version $1"; exit 1;
|
||||
*) fail "Unknown gcloud version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg GCLOUD_VERSION=%s " "$GCLOUD_VERSION"
|
||||
|
|
@ -264,11 +283,11 @@ function print_kubectl_args() {
|
|||
KUBECTL_DOWNLOAD_SHA256[amd64]=2d0f5ba6faa787878b642c151ccb2c3390ce4c1e6c8e2b59568b3869ba407c4f
|
||||
KUBECTL_DOWNLOAD_SHA256[arm64]=1d77d6027fc8dfed772609ad9bd68f611b7e4ce73afa949f27084ad3a92b15fe
|
||||
;;
|
||||
*) echo "Unknown kubectl version $1"; exit 1;
|
||||
*) fail "Unknown kubectl version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg KUBECTL_VERSION=%s " "$KUBECTL_VERSION"
|
||||
printf -- "--build-arg KUBECTL_DOWNLOAD_SHA256=%s " "${KUBECTL_DOWNLOAD_SHA256[$TARGETARCH]}"
|
||||
printf -- "--build-arg KUBECTL_DOWNLOAD_SHA256=%q " "${KUBECTL_DOWNLOAD_SHA256[*]}"
|
||||
}
|
||||
|
||||
function print_helm_args() {
|
||||
|
|
@ -280,11 +299,11 @@ function print_helm_args() {
|
|||
HELM_DOWNLOAD_SHA256[amd64]=2170a1a644a9e0b863f00c17b761ce33d4323da64fc74562a3a6df2abbf6cd70
|
||||
HELM_DOWNLOAD_SHA256[arm64]=e1348d94ce4caace43689ee2dfa5f8bcd8687c12053d9c13d79875b65d6b72aa
|
||||
;;
|
||||
*) echo "Unknown helm version $1"; exit 1;
|
||||
*) fail "Unknown helm version $1" ;;
|
||||
esac
|
||||
|
||||
printf -- "--build-arg HELM_VERSION=%s " "$HELM_VERSION"
|
||||
printf -- "--build-arg HELM_DOWNLOAD_SHA256=%s " "${HELM_DOWNLOAD_SHA256[$TARGETARCH]}"
|
||||
printf -- "--build-arg HELM_DOWNLOAD_SHA256=%q " "${HELM_DOWNLOAD_SHA256[*]}"
|
||||
}
|
||||
|
||||
function parse_arguments() {
|
||||
|
|
@ -307,7 +326,10 @@ function parse_arguments() {
|
|||
if [ -n "${!tool}" ]; then
|
||||
version="${!tool}"
|
||||
case "$tool" in
|
||||
OS) CUSTOM_BASE_IMAGE=$(get_base_image_reference $version) ;;
|
||||
# explode debian:version into `print_image_args debian version`
|
||||
OS) print_image_args ${version%:*} ${version##*:} ;;
|
||||
DEBIAN) print_image_args debian $version ;;
|
||||
UBI) print_image_args ubi $version ;;
|
||||
RUBY) print_ruby_args $version ;;
|
||||
BUNDLER) print_bundler_args $version ;;
|
||||
RUBYGEMS) print_rubygems_args $version ;;
|
||||
|
|
@ -325,30 +347,17 @@ function parse_arguments() {
|
|||
GCLOUD) print_gcloud_args $version ;;
|
||||
KUBECTL) print_kubectl_args $version ;;
|
||||
HELM) print_helm_args $version ;;
|
||||
*) echo "unknown tool $tool"; exit 1;;
|
||||
*) fail "Unknown tool $tool" ;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
|
||||
CUSTOM_BASE_IMAGE=${CUSTOM_BASE_IMAGE:-"debian:buster"}
|
||||
BUILD_OS=${OS:-"debian:buster"}
|
||||
|
||||
printf -- "--build-arg CUSTOM_BASE_IMAGE=%s " "$CUSTOM_BASE_IMAGE"
|
||||
printf -- "--build-arg BUILD_OS=%s " "$BUILD_OS"
|
||||
printf -- "--platform=linux/%s " "${TARGETARCH}"
|
||||
printf -- "--platform=%s " "${TARGETARCH}"
|
||||
}
|
||||
|
||||
function generate_command() {
|
||||
printf -- "docker buildx build "
|
||||
parse_arguments
|
||||
|
||||
for i in "$@"
|
||||
do
|
||||
printf -- "%s " "$i"
|
||||
done
|
||||
|
||||
printf -- "--push=${PUSH_CUSTOM_IMAGE:-false} "
|
||||
printf -- ".\\n"
|
||||
function run_command() {
|
||||
printf "\t%s\n" "$@"
|
||||
eval "$@"
|
||||
}
|
||||
|
||||
function build_custom_if_needed() {
|
||||
|
|
@ -357,11 +366,30 @@ function build_custom_if_needed() {
|
|||
full_image_name="$build_image_path:$build_image_tag"
|
||||
echo "Building image $full_image_name"
|
||||
|
||||
docker_command=$(generate_command $@ --cache-to=type=inline --cache-from="$full_image_name" -t "$full_image_name")
|
||||
echo "Docker command:"
|
||||
printf "\t%s\n" "$docker_command"
|
||||
eval $docker_command
|
||||
docker_build_command=$(parse_arguments)
|
||||
docker_build_command="${docker_build_command} $@"
|
||||
docker_build_command="${docker_build_command} --cache-from=\"$full_image_name\""
|
||||
docker_build_command="${docker_build_command} --tag=\"$full_image_name\""
|
||||
|
||||
echo "Docker build command:"
|
||||
|
||||
# Prefer using `docker buildx` as it is more flexible,
|
||||
# or use regular `docker build` if not available on older systems
|
||||
if docker buildx version &> /dev/null; then
|
||||
docker_build_command="${docker_build_command} --cache-to=type=inline"
|
||||
docker_build_command="${docker_build_command} --push=${PUSH_CUSTOM_IMAGE:-false}"
|
||||
run_command docker buildx build $docker_build_command .
|
||||
else
|
||||
docker_build_command="${docker_build_command} --build-arg TARGETARCH=${ARCH}"
|
||||
run_command docker build $docker_build_command .
|
||||
if [[ "$PUSH_CUSTOM_IMAGE" == "true" ]]; then
|
||||
run_command docker push "$full_image_name"
|
||||
fi
|
||||
fi
|
||||
printf "\n\nSUCCESS - Successfully built:\n\t%s\n" "$full_image_name"
|
||||
}
|
||||
|
||||
# Use DEBIAN by default unless specified otherwise
|
||||
DEBIAN=${DEBIAN:-bullseye}
|
||||
|
||||
build_custom_if_needed $@
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Note: Check out https://wiki.bash-hackers.org/syntax/pe for documentation on
|
||||
# various variable operations used in this script.
|
||||
|
||||
PATH_TOOLS=(OS RUBY GOLANG NODE POSTGRESQL)
|
||||
PATH_TOOLS=(DEBIAN OS UBI RUBY GOLANG NODE POSTGRESQL)
|
||||
TAG_TOOLS=(BUNDLER RUBYGEMS GIT LFS CHROME YARN GRAPHICSMAGICK BAZELISK DOCKER BUILDX GCLOUD KUBECTL HELM)
|
||||
|
||||
# Generate the docker image path using the components that were specified via
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue