123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #!/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'"
- }
|