85 lines
2.3 KiB
Bash
85 lines
2.3 KiB
Bash
#!/bin/bash
|
|
|
|
# check dependencies
|
|
(
|
|
type docker &>/dev/null || ( echo "docker is not available"; exit 1 )
|
|
type curl &>/dev/null || ( echo "curl is not available"; exit 1 )
|
|
)>&2
|
|
|
|
# Assert that $1 is the outputof a command $2
|
|
function assert {
|
|
local expected_output=$1
|
|
shift
|
|
local actual_output
|
|
actual_output=$("$@")
|
|
actual_output="${actual_output//[$'\t\r\n']}" # remove newlines
|
|
if ! [ "$actual_output" = "$expected_output" ]; then
|
|
echo "expected: \"$expected_output\""
|
|
echo "actual: \"$actual_output\""
|
|
false
|
|
fi
|
|
}
|
|
|
|
# Retry a command $1 times until it succeeds. Wait $2 seconds between retries.
|
|
function retry {
|
|
local attempts=$1
|
|
shift
|
|
local delay=$1
|
|
shift
|
|
local i
|
|
|
|
for ((i=0; i < attempts; i++)); do
|
|
run "$@"
|
|
if [ "$status" -eq 0 ]; then
|
|
return 0
|
|
fi
|
|
sleep $delay
|
|
done
|
|
|
|
echo "Command \"$*\" failed $attempts times. Status: $status. Output: $output" >&2
|
|
false
|
|
}
|
|
|
|
function docker_build {
|
|
if [ -n "$JENKINS_VERSION" ]; then
|
|
docker build --build-arg JENKINS_VERSION=$JENKINS_VERSION --build-arg JENKINS_SHA=$JENKINS_SHA "$@"
|
|
else
|
|
docker build "$@"
|
|
fi
|
|
}
|
|
|
|
function get_jenkins_url {
|
|
if [ -z "${DOCKER_HOST}" ]; then
|
|
DOCKER_IP=localhost
|
|
else
|
|
DOCKER_IP=$(echo "$DOCKER_HOST" | sed -e 's|tcp://\(.*\):[0-9]*|\1|')
|
|
fi
|
|
echo "http://$DOCKER_IP:$(docker port "$SUT_CONTAINER" 8080 | cut -d: -f2)"
|
|
}
|
|
|
|
function get_jenkins_password {
|
|
docker logs "$SUT_CONTAINER" 2>&1 | grep -A 2 "Please use the following password to proceed to installation" | tail -n 1
|
|
}
|
|
|
|
function test_url {
|
|
run curl --user "admin:$(get_jenkins_password)" --output /dev/null --silent --head --fail --connect-timeout 30 --max-time 60 "$(get_jenkins_url)$1"
|
|
if [ "$status" -eq 0 ]; then
|
|
true
|
|
else
|
|
echo "URL $(get_jenkins_url)$1 failed" >&2
|
|
echo "output: $output" >&2
|
|
false
|
|
fi
|
|
}
|
|
|
|
function cleanup {
|
|
docker kill "$1" &>/dev/null ||:
|
|
docker rm -fv "$1" &>/dev/null ||:
|
|
}
|
|
|
|
function unzip_manifest {
|
|
local plugin=$1
|
|
local work=$2
|
|
bash -c "docker run --rm -v $work:/var/jenkins_home --entrypoint unzip $SUT_IMAGE -p /var/jenkins_home/plugins/$plugin META-INF/MANIFEST.MF | tr -d '\r'"
|
|
}
|