blob: eb67f454c6bd4da784af589d49ceeed2358d919c [file] [log] [blame]
Carlos Sanchez8cb67a02016-04-20 13:40:44 +02001#!/bin/bash
Thomas LEVEIL58695bb2015-09-04 21:51:10 +00002
3# check dependencies
4(
5 type docker &>/dev/null || ( echo "docker is not available"; exit 1 )
6 type curl &>/dev/null || ( echo "curl is not available"; exit 1 )
7)>&2
8
9# Assert that $1 is the outputof a command $2
10function assert {
11 local expected_output=$1
12 shift
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020013 local actual_output
14 actual_output=$("$@")
Carlos Sanchez2d68b192016-04-20 13:26:59 +020015 actual_output="${actual_output//[$'\t\r\n']}" # remove newlines
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000016 if ! [ "$actual_output" = "$expected_output" ]; then
Carlos Sanchezc24ef822016-02-29 12:10:31 +010017 echo "expected: \"$expected_output\""
18 echo "actual: \"$actual_output\""
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000019 false
20 fi
21}
22
23# Retry a command $1 times until it succeeds. Wait $2 seconds between retries.
24function retry {
25 local attempts=$1
26 shift
27 local delay=$1
28 shift
29 local i
30
31 for ((i=0; i < attempts; i++)); do
32 run "$@"
33 if [ "$status" -eq 0 ]; then
34 return 0
35 fi
36 sleep $delay
37 done
38
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020039 echo "Command \"$*\" failed $attempts times. Status: $status. Output: $output" >&2
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000040 false
41}
42
Carlos Sanchez59d9ef62016-11-09 13:08:41 +010043function docker_build {
44 if [ -n "$JENKINS_VERSION" ]; then
45 docker build --build-arg JENKINS_VERSION=$JENKINS_VERSION --build-arg JENKINS_SHA=$JENKINS_SHA "$@"
46 else
47 docker build "$@"
48 fi
49}
50
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000051function get_jenkins_url {
Carlos Sanchezc24ef822016-02-29 12:10:31 +010052 if [ -z "${DOCKER_HOST}" ]; then
Carlos Sanchez758cd602016-05-02 11:57:04 -070053 DOCKER_IP=localhost
Carlos Sanchezd1f26652015-09-11 18:54:47 +020054 else
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020055 DOCKER_IP=$(echo "$DOCKER_HOST" | sed -e 's|tcp://\(.*\):[0-9]*|\1|')
Carlos Sanchezd1f26652015-09-11 18:54:47 +020056 fi
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020057 echo "http://$DOCKER_IP:$(docker port "$SUT_CONTAINER" 8080 | cut -d: -f2)"
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000058}
59
Carlos Sanchez5a51d0a2016-04-21 13:50:25 +020060function get_jenkins_password {
61 docker logs "$SUT_CONTAINER" 2>&1 | grep -A 2 "Please use the following password to proceed to installation" | tail -n 1
62}
63
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000064function test_url {
Carlos Sanchez5a51d0a2016-04-21 13:50:25 +020065 run curl --user "admin:$(get_jenkins_password)" --output /dev/null --silent --head --fail --connect-timeout 30 --max-time 60 "$(get_jenkins_url)$1"
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000066 if [ "$status" -eq 0 ]; then
67 true
68 else
69 echo "URL $(get_jenkins_url)$1 failed" >&2
70 echo "output: $output" >&2
71 false
72 fi
73}
Carlos Sanchez5fc9cd02016-02-28 15:25:18 +010074
75function cleanup {
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020076 docker kill "$1" &>/dev/null ||:
77 docker rm -fv "$1" &>/dev/null ||:
Carlos Sanchez5fc9cd02016-02-28 15:25:18 +010078}
Carlos Sanchez6c3d4042016-12-26 12:37:37 +010079
80function unzip_manifest {
81 local plugin=$1
82 local work=$2
83 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'"
84}