feat: use docker buildx in order to build a multi-arch docker image
Note: this also automagically pushes the images using buildx as they are not imported to the actual docker system anymore. Signed-off-by: Matthias Riegler <matthias.riegler@traefik.io>
This commit is contained in:
parent
b2d26d9dce
commit
84191b4983
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
push_image_to_registry() {
|
|
||||||
local target_tag=$1
|
|
||||||
echo "⏫ Pushing '${target_tag}'"
|
|
||||||
$DRY docker push "${target_tag}"
|
|
||||||
echo "✅ Finished pushing the Docker image '${target_tag}'."
|
|
||||||
}
|
|
37
build.sh
37
build.sh
|
@ -6,10 +6,9 @@ echo "▶️ $0 $*"
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ "${1}x" == "x" ] || [ "${1}" == "--help" ] || [ "${1}" == "-h" ]; then
|
if [ "${1}x" == "x" ] || [ "${1}" == "--help" ] || [ "${1}" == "-h" ]; then
|
||||||
echo "Usage: ${0} <branch> [--push|--push-only]"
|
echo "Usage: ${0} <branch> [--push]"
|
||||||
echo " branch The branch or tag to build. Required."
|
echo " branch The branch or tag to build. Required."
|
||||||
echo " --push Pushes the built Docker image to the registry."
|
echo " --push Pushes the built Docker image to the registry."
|
||||||
echo " --push-only Only pushes the Docker image to the registry, but does not build it."
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "You can use the following ENV variables to customize the build:"
|
echo "You can use the following ENV variables to customize the build:"
|
||||||
echo " SRC_ORG Which fork of netbox to use (i.e. github.com/\${SRC_ORG}/\${SRC_REPO})."
|
echo " SRC_ORG Which fork of netbox to use (i.e. github.com/\${SRC_ORG}/\${SRC_REPO})."
|
||||||
|
@ -30,6 +29,9 @@ if [ "${1}x" == "x" ] || [ "${1}" == "--help" ] || [ "${1}" == "-h" ]; then
|
||||||
echo " When <branch>=master: latest"
|
echo " When <branch>=master: latest"
|
||||||
echo " When <branch>=develop: snapshot"
|
echo " When <branch>=develop: snapshot"
|
||||||
echo " Else: same as <branch>"
|
echo " Else: same as <branch>"
|
||||||
|
echo " DOCKER_BUILD_PLATFORMS platforms the docker buildx will build the image for"
|
||||||
|
echo " Used for specifying multiple arches."
|
||||||
|
echo " Default: linux/amd64,linux/arm64"
|
||||||
echo " DOCKER_REGISTRY The Docker repository's registry (i.e. '\${DOCKER_REGISTRY}/\${DOCKER_ORG}/\${DOCKER_REPO}'')"
|
echo " DOCKER_REGISTRY The Docker repository's registry (i.e. '\${DOCKER_REGISTRY}/\${DOCKER_ORG}/\${DOCKER_REPO}'')"
|
||||||
echo " Used for tagging the image."
|
echo " Used for tagging the image."
|
||||||
echo " Default: docker.io"
|
echo " Default: docker.io"
|
||||||
|
@ -95,8 +97,6 @@ if [ "${1}x" == "x" ] || [ "${1}" == "--help" ] || [ "${1}" == "-h" ]; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
source ./build-functions/gh-functions.sh
|
|
||||||
|
|
||||||
###
|
###
|
||||||
# Enabling dry-run mode
|
# Enabling dry-run mode
|
||||||
###
|
###
|
||||||
|
@ -201,6 +201,12 @@ if [ -d "${NETBOX_PATH}/.git" ]; then
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
# Variables for arch target
|
||||||
|
###
|
||||||
|
DOCKER_BUILD_PLATFORMS="${DOCKER_BUILD_PLATFORMS-linux/amd64,linux/arm64}"
|
||||||
|
|
||||||
###
|
###
|
||||||
# Variables for tagging the docker image
|
# Variables for tagging the docker image
|
||||||
###
|
###
|
||||||
|
@ -375,6 +381,9 @@ for DOCKER_TARGET in "${DOCKER_TARGETS[@]}"; do
|
||||||
if [ -n "${NO_PROXY}" ]; then
|
if [ -n "${NO_PROXY}" ]; then
|
||||||
DOCKER_BUILD_ARGS+=(--build-arg "no_proxy=${NO_PROXY}")
|
DOCKER_BUILD_ARGS+=(--build-arg "no_proxy=${NO_PROXY}")
|
||||||
fi
|
fi
|
||||||
|
if [ "${2}" == "--push" ]; then
|
||||||
|
DOCKER_BUILD_ARGS+=(--push)
|
||||||
|
fi
|
||||||
|
|
||||||
###
|
###
|
||||||
# Building the docker image
|
# Building the docker image
|
||||||
|
@ -382,31 +391,13 @@ for DOCKER_TARGET in "${DOCKER_TARGETS[@]}"; do
|
||||||
if [ "${SHOULD_BUILD}" == "true" ]; then
|
if [ "${SHOULD_BUILD}" == "true" ]; then
|
||||||
echo "🐳 Building the Docker image '${TARGET_DOCKER_TAG_PROJECT}'."
|
echo "🐳 Building the Docker image '${TARGET_DOCKER_TAG_PROJECT}'."
|
||||||
echo " Build reason set to: ${BUILD_REASON}"
|
echo " Build reason set to: ${BUILD_REASON}"
|
||||||
$DRY docker build "${DOCKER_BUILD_ARGS[@]}" .
|
$DRY docker buildx build --platform ${DOCKER_BUILD_PLATFORMS} "${DOCKER_BUILD_ARGS[@]}" .
|
||||||
echo "✅ Finished building the Docker images '${TARGET_DOCKER_TAG_PROJECT}'"
|
echo "✅ Finished building the Docker images '${TARGET_DOCKER_TAG_PROJECT}'"
|
||||||
echo "🔎 Inspecting labels on '${TARGET_DOCKER_TAG_PROJECT}'"
|
|
||||||
$DRY docker inspect "${TARGET_DOCKER_TAG_PROJECT}" --format "{{json .Config.Labels}}"
|
|
||||||
else
|
else
|
||||||
echo "Build skipped because sources didn't change"
|
echo "Build skipped because sources didn't change"
|
||||||
echo "::set-output name=skipped::true"
|
echo "::set-output name=skipped::true"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
###
|
|
||||||
# Pushing the docker images if either `--push` or `--push-only` are passed
|
|
||||||
###
|
|
||||||
if [ "${2}" == "--push" ] || [ "${2}" == "--push-only" ]; then
|
|
||||||
source ./build-functions/docker-functions.sh
|
|
||||||
push_image_to_registry "${TARGET_DOCKER_TAG}"
|
|
||||||
push_image_to_registry "${TARGET_DOCKER_TAG_PROJECT}"
|
|
||||||
|
|
||||||
if [ -n "${TARGET_DOCKER_SHORT_TAG}" ]; then
|
|
||||||
push_image_to_registry "${TARGET_DOCKER_SHORT_TAG}"
|
|
||||||
push_image_to_registry "${TARGET_DOCKER_SHORT_TAG_PROJECT}"
|
|
||||||
push_image_to_registry "${TARGET_DOCKER_LATEST_TAG}"
|
|
||||||
push_image_to_registry "${TARGET_DOCKER_LATEST_TAG_PROJECT}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
gh_echo "::endgroup::"
|
gh_echo "::endgroup::"
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in New Issue