From 49db5035a82a7ae055d9da8bb19aa65b30f77bcf Mon Sep 17 00:00:00 2001 From: verhoek <30193551+verhoek@users.noreply.github.com> Date: Mon, 2 Dec 2019 21:30:37 +0100 Subject: Imported duplicatipipeline scripts Added bash scripts to run the dockerized build and test environment --- pipeline/docker-run/docker-run | 91 ++++++++++++++++++++++++++++ pipeline/docker-run/error_handling.sh | 17 ++++++ pipeline/docker-run/markers.sh | 11 ++++ pipeline/docker-run/runner.sh | 109 ++++++++++++++++++++++++++++++++++ 4 files changed, 228 insertions(+) create mode 100755 pipeline/docker-run/docker-run create mode 100644 pipeline/docker-run/error_handling.sh create mode 100644 pipeline/docker-run/markers.sh create mode 100755 pipeline/docker-run/runner.sh (limited to 'pipeline/docker-run') diff --git a/pipeline/docker-run/docker-run b/pipeline/docker-run/docker-run new file mode 100755 index 000000000..8e1cf78a9 --- /dev/null +++ b/pipeline/docker-run/docker-run @@ -0,0 +1,91 @@ +#!/bin/bash +. "$( cd "$(dirname "$0")" ; pwd -P )/error_handling.sh" +. "$( cd "$(dirname "$0")" ; pwd -P )/markers.sh" + +function pull_docker_image () { + travis_mark_begin "PULL MINIMAL DOCKER IMAGE" + docker pull $DOCKER_IMAGE + travis_mark_end "PULL MINIMAL DOCKER IMAGE" +} + +function add_option () { + FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1" + FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$2" +} + +function add_volumes () { + volume_args=() + + volume_args[${#volume_args[@]}]="-v /var/run/docker.sock:/var/run/docker.sock \ + -v ${TARGET_DIR}:/application \ + ${DOCKER_VOLUME} \ + -v $( cd "$(dirname "$0")" ; pwd -P )/../:/pipeline ${DOCKER_SHARED_MEM}" + + for (( i=1; i<${#SOURCE_DIR[@]}+1; i++ )); do + volume_args[${#volume_args[@]}]="-v ${SOURCE_DIR[$i-1]}:/source_$i" + done +} + +function run_with_docker () { + if [ -z ${TARGET_DIR} ]; then + echo "no target cache specified" + exit 1 + fi + + add_volumes + + docker run ${volume_args[@]} \ + --privileged $DOCKER_AS_ROOT --rm $DOCKER_IMAGE "/pipeline/docker-run/runner.sh" "${FORWARD_OPTS[@]}" +} + +function parse_options () { + FORWARD_OPTS=() + SOURCE_DIR=() + + while true ; do + case "$1" in + --image) + DOCKER_IMAGE="$2" + ;; + --sourcedir) + SOURCE_DIR[${#SOURCE_DIR[@]}]="$2" + ;; + --targetdir) + TARGET_DIR="$2" + ;; + --asroot) + DOCKER_AS_ROOT="-u 0" + ;; + --volume) + DOCKER_VOLUME="-v $2" + ;; + --sharedmem) + DOCKER_SHARED_MEM="-v /dev/shm:/dev/shm" + ;; + --*) + if [[ $2 =~ ^--.* || -z $2 ]]; then + FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1" + else + FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1" + FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$2" + fi + ;; + esac + + if [[ -z $1 ]]; then + break + elif [[ $2 =~ ^--.* || -z $2 ]]; then + shift + else + shift + shift + fi + done + + add_option "--workingdir" "$TARGET_DIR" + add_option "--sourcedirnum" ${#SOURCE_DIR[@]} +} + +parse_options "$@" +pull_docker_image +run_with_docker \ No newline at end of file diff --git a/pipeline/docker-run/error_handling.sh b/pipeline/docker-run/error_handling.sh new file mode 100644 index 000000000..baab6e68b --- /dev/null +++ b/pipeline/docker-run/error_handling.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +function quit_on_error() { + local parent_lineno="$1" + local message="$2" + local code="${3:-1}" + if [[ -n "$message" ]] ; then + echo "Error in $0 line ${parent_lineno}: ${message}; exiting with status ${code}" + else + echo "Error in $0 line ${parent_lineno}; exiting with status ${code}" + fi + exit "${code}" +} + +set -eE +trap 'quit_on_error $LINENO' ERR +set -o pipefail diff --git a/pipeline/docker-run/markers.sh b/pipeline/docker-run/markers.sh new file mode 100644 index 000000000..f27571163 --- /dev/null +++ b/pipeline/docker-run/markers.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +function travis_mark_begin () { + echo "travis_fold:start:$1" + echo "+ START $1" +} + +function travis_mark_end () { + echo "travis_fold:end:$1" + echo "+ DONE $1" +} diff --git a/pipeline/docker-run/runner.sh b/pipeline/docker-run/runner.sh new file mode 100755 index 000000000..b7f299c11 --- /dev/null +++ b/pipeline/docker-run/runner.sh @@ -0,0 +1,109 @@ +#!/bin/bash +. "$( cd "$(dirname "$0")" ; pwd -P )/error_handling.sh" +. "$( cd "$(dirname "$0")" ; pwd -P )/markers.sh" + +function sync_dirs () { + rsync_delete_option="--delete" + for (( i=1; i<$SOURCE_DIR_NUM+1; i++ )); do + travis_mark_begin "SYNCING DIR source_${i}" + rsync -a $rsync_delete_option "/source_${i}/" "/application/" + unset rsync_delete_option + travis_mark_end "SYNCING DIR source_${i}" + done +} + +function setup () { + if [ -f /sbin/apk ]; then + apk --update add $DOCKER_PACKAGES + return + fi + + if [ -f /usr/bin/apt-get ]; then + export DEBIAN_FRONTEND=noninteractive + apt-get update && apt-get install -y $DOCKER_PACKAGES + return + fi +} + +function clean_up () { + if [[ -z $KEEP_TARGET_FILTER ]]; then + return + fi + + cd /application + find . -type f ! -regex "${KEEP_TARGET_FILTER}" -delete + find . -type d -empty -delete + + for (( i=1; i<${#KEEP_SOURCE_FILTER[@]}+1; i++ )); do + cd /source_${i} + find . -type f ! -regex "${KEEP_SOURCE_FILTER[$i-1]}" -delete + find . -type d -empty -delete + done +} + +function parse_options () { + KEEP_SOURCE_FILTER=() + + while true ; do + case "$1" in + --command) + DOCKER_COMMAND="$2" + ;; + --packages) + DOCKER_PACKAGES="$2" + ;; + --sourcedirnum) + SOURCE_DIR_NUM="$2" + ;; + --keeptargetfilter) + KEEP_TARGET_FILTER="$2" + ;; + --keepsourcefilter) + KEEP_SOURCE_FILTER[${#KEEP_SOURCE_FILTER[@]}]="$2" + ;; + --*) + if [[ $2 =~ ^--.* || -z $2 ]]; then + FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1" + else + FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$1" + FORWARD_OPTS[${#FORWARD_OPTS[@]}]="$2" + fi + ;; + esac + + if [[ -z $1 ]]; then + break + elif [[ $2 =~ ^--.* || -z $2 ]]; then + shift + else + shift + shift + fi + done +} + +function set_user_script_vars () { + option_found=false + for arg in ${FORWARD_OPTS[@]}; do + if [[ $option_found == true ]]; then + eval $option=$arg + export $option + option_found=false + elif [[ $arg =~ ^--.* ]]; then + option_found=true + option=${arg#"--"} + elif [[ $arg =~ ^-.* ]]; then + flag=${arg#"-"} + eval $flag=true + export $flag + fi + done +} + +parse_options "$@" +setup +sync_dirs +cd /application +set_user_script_vars +$DOCKER_COMMAND "${FORWARD_OPTS[@]}" +clean_up \ No newline at end of file -- cgit v1.2.3