diff --git a/build.Dockerfile b/build.Dockerfile index 0d7d8e6666cf924e8ee7aaf8ad52ae0dc0903fc7..39f8fb4f17530b15e5cb3cd4409e142c70c2bf3b 100644 --- a/build.Dockerfile +++ b/build.Dockerfile @@ -1,13 +1,6 @@ -# Build the containers with: -# docker run --privileged --rm -v "$(pwd)":/workspace -v /var/run/docker.sock:/var/run/docker.sock -w /workspace container_build_container ./build.sh <some_tag> --latest --push --login --no-cache - -FROM docker:24.0 +FROM docker:27 RUN apk update && \ - apk add --no-cache jq curl git bash nodejs npm - -RUN docker buildx version + apk add --no-cache bash curl jq nodejs npm WORKDIR /workspace - -CMD ["/bin/bash"] \ No newline at end of file diff --git a/build.sh b/build.sh index 41e36dd59fa7932b4ba4a3fd0165fe382d2e9156..6a259fc5697136d7c5de7bd1d58d65acbbbc6cbc 100755 --- a/build.sh +++ b/build.sh @@ -9,6 +9,8 @@ REGISTRY=registry.gitlab.tugraz.at/oop1ws/container NO_CACHE=false LOGIN=false +BUILD_WITH_CONTAINER=false + print_usage() { echo " $SCRIPT v$VERSION @@ -26,18 +28,20 @@ print_usage() { yourself with your GitLab username and a personal access token using the 'docker login registry.gitlab.tugraz.at' command. - -h, --help This help text - --latest Tag the containers additionally with the 'latest' tag - --push Push the build result to the registry - --registry Use a custom container registry - --no-cache Do not use cache when building the images - --login Use the environment variables 'DOCKER_USERNAME' - and 'DOCKER_PASSWORD' to automatically login to the - registry + -h, --help This help text + --latest Tag the containers additionally with the 'latest' tag + --push Push the build result to the registry + --registry Use a custom container registry + --no-cache Do not use cache when building the images + --login Use the environment variables 'DOCKER_USERNAME' and + 'DOCKER_PASSWORD' to automatically login to the registry + --use-container Perform the building steps within a dedicated container + that already has all required build dependencies installed " } ARGS=() +ALL_ARGS="$@" while [[ $# -gt 0 ]]; do case $1 in @@ -61,6 +65,9 @@ while [[ $# -gt 0 ]]; do --login) LOGIN=true ;; + --use-container) + BUILD_WITH_CONTAINER=true + ;; -*|--*) echo "ERROR: Unknown option $1" exit 1 @@ -92,26 +99,38 @@ check_command() { } check_command "docker" "Docker" -check_command "npx" "Node.js" -check_command "jq" "jq" -docker buildx version &>/dev/null -if [ $? -ne 0 ]; then - echo "ERROR: The Docker CLI plugin 'buildx' is not installed" - exit 1 +if $BUILD_WITH_CONTAINER; then + WORKSPACE=$(dirname "$0") + BUILD_IMAGE="$REGISTRY/builder" + BUILD_ARGS=${ALL_ARGS//"--use-container "/} + + docker build --tag "$BUILD_IMAGE" -f build.Dockerfile . + docker run --rm -e DOCKER_USERNAME -e DOCKER_PASSWORD -v /var/run/docker.sock:/var/run/docker.sock:ro -v "$WORKSPACE":/workspace "$REGISTRY/builder" ./build.sh $BUILD_ARGS + exit $? +else + check_command "npx" "Node.js" + check_command "jq" "jq" + + docker buildx version &>/dev/null + if [ $? -ne 0 ]; then + echo "ERROR: The Docker CLI plugin 'buildx' is not installed" + exit 1 + fi fi + # ============================= # prepare environment # ============================= if $LOGIN; then - if [ -v $DOCKER_PASSWORD ]; then - echo "ERROR: Variable 'DOCKER_PASSWORD' not set" - exit 1 - elif [ -v $DOCKER_USERNAME ]; then + if [ -z $DOCKER_USERNAME ]; then echo "ERROR: Variable 'DOCKER_USERNAME' not set" exit 1 + elif [ -z $DOCKER_PASSWORD ]; then + echo "ERROR: Variable 'DOCKER_PASSWORD' not set" + exit 1 fi echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin $REGISTRY