jenkins-pipelines/scripts/build-docker-images.sh
Davlet Panech 8014360154 Rename env function to avoid conflicts
lib/job_utils.sh: function "require_env" conflicts with the like-named
function in utils.sh. Rename it to "require_job_env".

Signed-off-by: Davlet Panech <davlet.panech@windriver.com>
Change-Id: I557cf14c4a3df000be245471cef5663e49badb06
2022-09-02 14:11:28 -04:00

118 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (c) 2022 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
set -e
source $(dirname "$0")/lib/job_utils.sh
require_job_env BUILD_HOME
require_job_env DRY_RUN
require_job_env USE_DOCKER_CACHE
require_job_env BUILD_DOCKER_BASE_IMAGE
require_job_env BUILD_STREAM stable
require_job_env PUSH_DOCKER_IMAGES
declare_job_env DOCKER_IMAGE_LIST
declare_job_env DOCKER_BASE_IMAGE
load_build_env
require_job_env DOCKER_BASE_OS
require_job_env DOCKER_OS_LIST
wheels_file="std/build-wheels-$DOCKER_BASE_OS-$BUILD_STREAM/stx-$DOCKER_BASE_OS-$BUILD_STREAM-wheels.tar"
#require_file "$HOST_WORKSPACE/$wheels_file"
declare -a cmd=(
"./build-stx-images.sh"
"--os-label=$DOCKER_BASE_OS"
"--attempts=$DOCKER_BUILD_RETRY_COUNT"
"--stream=$BUILD_STREAM"
"--no-pull-base"
"--version=$TIMESTAMP"
"--prefix=$BUILD_BRANCH"
"--user=$DOCKER_REGISTRY_ORG"
"--latest"
)
# Base image provided by build parameter
if [[ -n "$DOCKER_BASE_IMAGE" ]] ; then
cmd+=("--base=$DOCKER_BASE_IMAGE")
elif $BUILD_DOCKER_BASE_IMAGE ; then
base_image_tag="$BUILD_BRANCH-$BUILD_STREAM-$TIMESTAMP"
docker_base_image="$DOCKER_REGISTRY_ORG/stx-$DOCKER_BASE_OS:$base_image_tag"
if [[ -n "$DOCKER_REGISTRY" ]] ; then
docker_base_image="$DOCKER_REGISTRY/$docker_base_image"
fi
cmd+=("--base=$docker_base_image")
fi
if [[ -n "$DOCKER_REGISTRY" ]] ; then
cmd+=("--registry=$DOCKER_REGISTRY")
fi
if [[ -f "$WORKSPACE_ROOT/$wheels_file" ]] ; then
cmd+=("--wheels=\$MY_WORKSPACE/$wheels_file")
fi
if [[ "$USE_DOCKER_CACHE" == true ]] ; then
cmd+=("--cache")
fi
# add --only if $DOCKER_IMAGE_LIST contains anything
if [[ -n "$DOCKER_IMAGE_LIST" ]] ; then
comma=
only=
for img in $(echo "$DOCKER_IMAGE_LIST" | sed 's/[,;]+/ /g') ; do
[[ -n "$img" ]] || continue
only+="${only}${comma}${img}"
comma=","
done
if [[ -n "$only" ]] ; then
cmd+=("--only=$only")
fi
fi
# build-stx-base.sh can only push to one repo. We will push to any
# additional repos manually.
if $PUSH_DOCKER_IMAGES ; then
cmd+=("--push")
fi
# Usage: retag_and_push $IMAGE_LIST_FILE
retag_and_push() {
if [[ -n "$EXTRA_REGISTRY_PREFIX_LIST" ]] ; then
local list_file="$1"
local src_img
for src_img in $(grep -E -v '^\s*(#.*)?$' $list_file) ; do
local reg_prefix base_img
base_img="${src_img#$DOCKER_REGISTRY/$DOCKER_REGISTRY_ORG}"
if [[ "$base_img" == "$src_img" ]] ; then
die "$list_file: unexpected image \"$src_img\""
fi
for reg_prefix in $EXTRA_REGISTRY_PREFIX_LIST ; do
local dst_img="$(echo "${reg_prefix}/$base_img" | sed 's!//*!/!g')"
stx_docker_cmd $DRY_RUN_ARG "docker tag $src_img $dst_img"
stx_docker_cmd $DRY_RUN_ARG "docker push $dst_img"
done
done
fi
}
# build them
lists_dir="$HOST_WORKSPACE/std/build-images"
for os in $(echo $DOCKER_OS_LIST | sed 's/,/ /g') ; do
list_file="$lists_dir/images-$os-$BUILD_STREAM-versioned.lst"
notice "building $BUILD_STREAM $os images"
$DRY_RUN || rm -f "$list_file"
stx_docker_cmd $DRY_RUN_ARG "cd \$MY_REPO/build-tools/build-docker-images && ${cmd[*]} --os=$os"
if $PUSH_DOCKER_IMAGES && [[ -f "$list_file" ]] ; then
retag_and_push "$list_file"
fi
done