mirror of
https://github.com/certbot/certbot.git
synced 2026-07-27 08:09:10 +02:00
Docker build improvements (#8218)
Fixes https://github.com/certbot/certbot/issues/8208. Fixes https://github.com/certbot/certbot/issues/8198. In addition to those two linked issues, this PR: * Splits both the build and deploy steps based on architecture for performance. The Docker builds should no longer be the bottleneck in any stage of the pipeline. * Skips building Docker images for ARM on `test-` branches like [we do for snaps](https://github.com/certbot/certbot/blob/e8a232297d6faedb3b0bffc197a2e98c2e59edcb/.azure-pipelines/templates/jobs/packaging-jobs.yml#L67-L71). I initially didn't want to do this, but the ARM builds take ~18 minutes which is significantly longer than any other job currently running on our `test-` branches. You can see tests running on my fork at: * [Release pipeline](https://dev.azure.com/bmw0523/bmw/_build/results?buildId=387&view=results) * [Test pipeline](https://dev.azure.com/bmw0523/bmw/_build/results?buildId=388&view=results) * [Nightly pipeline](https://dev.azure.com/bmw0523/bmw/_build/results?buildId=390&view=results) * update script intro * update readme * ParseRequestedArch * build all arch in Azure * Build docker images during testing/packaging. * require global variable? * Error if TAG_BASE is empty. * prepare build job * change variable syntax * Update deploy stage. * remove old dockerTag param * add displayName * fix docker images command * split docker_build by arch * Allow deploying a subset of architectures. * deploy in parallel * Skip ARM builds on test- branches. * fix spacing
This commit is contained in:
+19
-11
@@ -4,8 +4,9 @@ IFS=$'\n\t'
|
||||
|
||||
# This script deploys new versions of Certbot and Certbot plugin docker images.
|
||||
|
||||
# Usage: ./deploy.sh [TAG]
|
||||
# with [TAG] corresponding the base of the tag to give the Docker images.
|
||||
# Usage: ./deploy.sh [TAG] [all|amd64|arm32v6|arm64v8]
|
||||
# with the [TAG] value corresponding the base of the tag to give the Docker
|
||||
# images and the 2nd value being the architecture to build snaps for.
|
||||
# Values should be something like `v0.34.0` or `nightly`. The given value is
|
||||
# only the base of the tag because the things like the CPU architecture are
|
||||
# also added to the full tag.
|
||||
@@ -13,12 +14,18 @@ IFS=$'\n\t'
|
||||
WORK_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
||||
|
||||
TAG_BASE="$1" # Eg. v0.35.0 or nightly
|
||||
if [ -z "$TAG_BASE" ]; then
|
||||
echo "We cannot tag Docker images with an empty string!" >&2
|
||||
exit 1
|
||||
fi
|
||||
source "$WORK_DIR/lib/common"
|
||||
ParseRequestedArch "${2}"
|
||||
|
||||
# Creates and pushes all Docker images aliases for all architectures.
|
||||
# If the value of the global variable TAG_BASE is a version tag such as
|
||||
# v0.35.0, the "latest" tag is also updated. Tags without the architecture part
|
||||
# are also created for the default architecture.
|
||||
# Creates and pushes all Docker images aliases for the requested architectures
|
||||
# set in the environment variable ALL_REQUESTED_ARCH. If the value of the
|
||||
# global variable TAG_BASE is a version tag such as v0.35.0, the "latest" tag
|
||||
# is also updated. Tags without the architecture part are also created for the
|
||||
# default architecture.
|
||||
# As an example, for amd64 (the default architecture) and the tag v0.35.0, the
|
||||
# following tags would be created:
|
||||
# - certbot/certbot:v0.35.0
|
||||
@@ -30,14 +37,15 @@ source "$WORK_DIR/lib/common"
|
||||
# For other tags such as "nightly", aliases are only created for the default
|
||||
# architecture where the tag "nightly" would be used without an architecture
|
||||
# part.
|
||||
# Usage: TagAndPushForAllArch [IMAGE NAME]
|
||||
# Usage: TagAndPushForAllRequestedArch [IMAGE NAME]
|
||||
# where [IMAGE NAME] is the name of the Docker image in the Docker repository
|
||||
# such as "certbot" or "dns-cloudflare".
|
||||
# Read globals:
|
||||
# * TAG_BASE
|
||||
TagAndPushForAllArch() {
|
||||
# * ALL_REQUESTED_ARCH
|
||||
TagAndPushForAllRequestedArch() {
|
||||
DOCKER_REPO="${DOCKER_HUB_ORG}/${1}"
|
||||
for TARGET_ARCH in "${ALL_TARGET_ARCH[@]}"; do
|
||||
for TARGET_ARCH in "${ALL_REQUESTED_ARCH[@]}"; do
|
||||
docker push "${DOCKER_REPO}:${TARGET_ARCH}-${TAG_BASE}"
|
||||
|
||||
if [[ "${TAG_BASE}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
@@ -56,9 +64,9 @@ TagAndPushForAllArch() {
|
||||
}
|
||||
|
||||
# Step 1: Certbot core Docker
|
||||
TagAndPushForAllArch "certbot"
|
||||
TagAndPushForAllRequestedArch "certbot"
|
||||
|
||||
# Step 2: Certbot DNS plugins Docker images
|
||||
for plugin in "${CERTBOT_PLUGINS[@]}"; do
|
||||
TagAndPushForAllArch "${plugin}"
|
||||
TagAndPushForAllRequestedArch "${plugin}"
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user