Only build/tag/push images once

Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
Rémy Coutable 2020-02-25 19:06:49 +01:00
parent cc680155e8
commit 611204c382
No known key found for this signature in database
GPG key ID: 98DFFD1C0C62B70B
4 changed files with 73 additions and 8 deletions

25
scripts/build-helpers.sh Normal file
View file

@ -0,0 +1,25 @@
function image_already_exists() {
image=$1
$(docker pull $image > /dev/null)
}
function build_if_needed() {
image=$1
if ! image_already_exists $image; then
docker build -t "$image" -f "Dockerfile.$image" .
else
echo "$image already exists, skipping build."
fi
}
function push_if_needed() {
image=$1
if ! image_already_exists $image; then
docker push "$image"
else
echo "$image already exists, skipping push."
fi
}

View file

@ -3,6 +3,8 @@
set -e
IFS=$'\n\t'
source scripts/build-helpers.sh
function print_golang_args() {
case "$1" in
@ -198,10 +200,10 @@ function parse_arguments() {
}
function generate_command() {
buildimage_name=$1; shift;
build_image_name=$1; shift;
printf -- "docker build "
echo $buildimage_name | tr '-' '\n' | parse_arguments
echo $build_image_name | tr '-' '\n' | parse_arguments
for i in "$@"
do
@ -210,6 +212,21 @@ function generate_command() {
printf -- ".\\n"
}
docker_command=$(generate_command $@)
echo "$1: executing $docker_command"
eval $docker_command
function build_custom_if_needed() {
build_image_name=$1
full_image_name="$CI_REGISTRY_IMAGE:$build_image_name"
if [[ "$FORCE_BUILD" == "true" ]] || ! image_already_exists $full_image_name; then
docker_command=$(generate_command $@)
if [[ "$FORCE_BUILD" == "true" ]]; then
echo "Force building $build_image_name due to `\$FORCE_BUILD=true` with $docker_command"
else
echo "Building $build_image_name with $docker_command"
fi
eval $docker_command
else
echo "$build_image_name already exists, skipping build."
fi
}
build_custom_if_needed $@