97 lines
2.2 KiB
Bash
Executable File
97 lines
2.2 KiB
Bash
Executable File
#!/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
|
|
|
|
|
|
if [ "${TARGET_DIR##${SOURCE_DIR}}" != "${TARGET_DIR}" ]; then
|
|
echo "targetdir $TARGET_DIR is not allowed to be a subdir of sourcedir $SOURCE_DIR"
|
|
fi
|
|
|
|
|
|
add_option "--workingdir" "$TARGET_DIR"
|
|
add_option "--sourcedirnum" ${#SOURCE_DIR[@]}
|
|
}
|
|
|
|
parse_options "$@"
|
|
pull_docker_image
|
|
run_with_docker |