From a38767488e8a80655548b9ca26c7e5822321de59 Mon Sep 17 00:00:00 2001 From: Christoph Burgmer Date: Tue, 26 Jun 2018 21:32:27 +0200 Subject: [PATCH] Experimental GoCD in a Docker container --- .gitignore | 1 + .../agent/scripts/with_test_results.sh | 49 ++++++++++ examples/gocd_experimental/docker-compose.yml | 18 ++++ examples/gocd_experimental/run.sh | 96 +++++++++++++++++++ .../server/cruise-config.xml | 25 +++++ 5 files changed, 189 insertions(+) create mode 100755 examples/gocd_experimental/agent/scripts/with_test_results.sh create mode 100644 examples/gocd_experimental/docker-compose.yml create mode 100755 examples/gocd_experimental/run.sh create mode 100644 examples/gocd_experimental/server/cruise-config.xml diff --git a/.gitignore b/.gitignore index 72f78917..9029ba9c 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ ubuntu-xenial-16.04-cloudimg-console.log /examples/aws/deploy/terraform.tfstate* /data/ /log/ +/examples/gocd_experimental/server/config/ diff --git a/examples/gocd_experimental/agent/scripts/with_test_results.sh b/examples/gocd_experimental/agent/scripts/with_test_results.sh new file mode 100755 index 00000000..a92413f7 --- /dev/null +++ b/examples/gocd_experimental/agent/scripts/with_test_results.sh @@ -0,0 +1,49 @@ +#!/bin/bash +set -eo pipefail + +is_successful() { + local outcome="$1" + test "$outcome" -ne 0 +} + +test_results() { + local outcome="$1" + local failure="" + local error="" + + if ! is_successful "$outcome"; then + failure="Meh" + error="Argh" + fi + + cat < + + + + + ${failure} + + + ${error} + + + + + + + + + +EOF +} + +main() { + local outcome + outcome=$((GO_PIPELINE_COUNTER % 3)) + + test_results "$outcome" > results.xml + is_successful "$outcome" +} + +main "$@" diff --git a/examples/gocd_experimental/docker-compose.yml b/examples/gocd_experimental/docker-compose.yml new file mode 100644 index 00000000..7cf34b5e --- /dev/null +++ b/examples/gocd_experimental/docker-compose.yml @@ -0,0 +1,18 @@ +version: "2.4" + +services: + server: + image: gocd/gocd-server:v18.6.0 + volumes: + - ./server/config:/godata/config + ports: + - "8153:8153" + + agent: + image: gocd/gocd-agent-alpine-3.7:v18.6.0 + restart: always + volumes: + - ./agent/scripts:/scripts + environment: + GO_SERVER_URL: "https://server:8154/go" + AGENT_AUTO_REGISTER_KEY: "ab455494-52a3-4ce7-b0cc-d38fbdc0aea9" diff --git a/examples/gocd_experimental/run.sh b/examples/gocd_experimental/run.sh new file mode 100755 index 00000000..aebb4c37 --- /dev/null +++ b/examples/gocd_experimental/run.sh @@ -0,0 +1,96 @@ +#!/bin/bash +set -eo pipefail + +readonly SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +readonly TMP_LOG="/tmp/run.$$.log" +readonly BASE_URL="http://localhost:8153/go" + +wait_for_server() { + local url=$1 + echo -n " waiting for ${url}" + until curl --output /dev/null --silent --head --fail "$url"; do + printf '.' + sleep 5 + done +} + +announce() { + local text="$1" + echo -ne "\033[1;30m" + echo -n "$text" + echo -ne "\033[0m" +} + +hint_at_logs() { + # shellcheck disable=SC2181 + if [[ "$?" -ne 0 ]]; then + echo + echo "Logs are in ${TMP_LOG}" + fi +} + +container_exists() { + if [[ -z $(docker-compose ps -q) ]]; then + return 1 + else + return 0 + fi +} + +goal_start() { + if ! container_exists; then + announce "Provisioning docker image" + echo + + # Wonky workaround for trying to boot up server image with minimal config, but no agent registration + mkdir -p server/config + cp server/*.xml server/config + + docker-compose up --no-start + + echo "done" + fi + + announce "Starting docker image" + docker-compose up -d &> "$TMP_LOG" + + wait_for_server "$BASE_URL" + echo " done" + rm "$TMP_LOG" +} + + +goal_stop() { + announce "Stopping docker image" + docker-compose stop &> "$TMP_LOG" + echo " done" + rm "$TMP_LOG" +} + +goal_destroy() { + announce "Destroying docker container" + docker-compose down &> "$TMP_LOG" + echo " done" + rm "$TMP_LOG" +} + +goal_purge() { + announce "Purging docker images" + docker rmi gocd/gocd-server:v18.6.0 >> "$TMP_LOG" + docker rmi gocd/gocd-agent-alpine-3.7:v18.6.0 >> "$TMP_LOG" + echo " done" + rm "$TMP_LOG" +} + +main() { + trap hint_at_logs EXIT + + if type -t "goal_$1" &>/dev/null; then + "goal_$1" + else + echo "usage: $0 (start|stop|destroy|purge)" + fi +} + +main "$@" diff --git a/examples/gocd_experimental/server/cruise-config.xml b/examples/gocd_experimental/server/cruise-config.xml new file mode 100644 index 00000000..f3567193 --- /dev/null +++ b/examples/gocd_experimental/server/cruise-config.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + +