From badd042aa13432d5ccbea0ba77568dbd830d285f Mon Sep 17 00:00:00 2001 From: Florent BENOIT Date: Tue, 14 Nov 2017 11:27:42 +0100 Subject: [PATCH] Allow to build all Dockerfile that are in a given directory. for example for che-server, there is a Dockerfile and Dockerfile.centos file using : ./build.sh will build both files resulting in Dockerfile ---> eclipse/che-server:nightly Dockerfile.centos --> eclipse/che-server:nightly-centos if there is another file named Dockerfile.xyz it will result in a new image named : eclipse/che-server:nightly-xyz We can specify only one Dockerfile to use by using --dockerfile:Dockerfile.centos argument for example Change-Id: I0b36e975af5af085e34a72863bdca4f424d7fed4 Signed-off-by: Florent BENOIT --- dockerfiles/build.include | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/dockerfiles/build.include b/dockerfiles/build.include index 2cb5ea4a83..43b59bf818 100755 --- a/dockerfiles/build.include +++ b/dockerfiles/build.include @@ -38,6 +38,7 @@ init() { NAME="che" ARGS="" OPTIONS="" + DOCKERFILE="" while [ $# -gt 0 ]; do case $1 in @@ -65,6 +66,9 @@ init() { --skip-tests) SKIP_TESTS=true shift ;; + --dockerfile:*) + DOCKERFILE="${1#*:}" + shift ;; --*) printf "${RED}Unknown parameter: $1${NC}\n"; exit 2 ;; *) @@ -76,12 +80,42 @@ init() { } build() { + + # Compute directory if [ -z $DIR ]; then DIR=$(cd "$(dirname "$0")"; pwd) fi + + # If Dockerfile is empty, build all Dockerfiles + if [ -z ${DOCKERFILE} ]; then + DOCKERFILES_TO_BUILD="$(ls ${DIR}/Dockerfile*)" + ORIGINAL_TAG=${TAG} + # Build image for each Dockerfile + for dockerfile in ${DOCKERFILES_TO_BUILD}; do + dockerfile=$(basename $dockerfile) + # extract TAG from Dockerfile + if [ ${dockerfile} != "Dockerfile" ]; then + TAG=${ORIGINAL_TAG}-$(echo ${dockerfile} | sed -e "s/^Dockerfile.//") + fi + IMAGE_NAME="$ORGANIZATION/$PREFIX-$NAME:$TAG" + DOCKERFILE=${dockerfile} + build_image + done + + # restore variables + TAG=${ORIGINAL_TAG} + IMAGE_NAME="$ORGANIZATION/$PREFIX-$NAME:$TAG" + else + # else if specified, build only the one specified + build_image + fi + +} + +build_image() { printf "${BOLD}Building Docker Image ${IMAGE_NAME} from $DIR directory with tag $TAG${NC}\n" # Replace macros in Dockerfiles - cat ${DIR}/Dockerfile | sed s/\$\{BUILD_ORGANIZATION\}/${ORGANIZATION}/ | sed s/\$\{BUILD_PREFIX\}/${PREFIX}/ | sed s/\$\{BUILD_TAG\}/${TAG}/ > ${DIR}/.Dockerfile + cat ${DIR}/${DOCKERFILE} | sed s/\$\{BUILD_ORGANIZATION\}/${ORGANIZATION}/ | sed s/\$\{BUILD_PREFIX\}/${PREFIX}/ | sed s/\$\{BUILD_TAG\}/${TAG}/ > ${DIR}/.Dockerfile cd "${DIR}" && docker build -f ${DIR}/.Dockerfile -t ${IMAGE_NAME} . rm ${DIR}/.Dockerfile if [ $? -eq 0 ]; then