From 3fb617a797f92b6b82624d9e837f0200a4c97a68 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Sat, 5 Jun 2021 08:33:03 +0200 Subject: [PATCH] Support removing a stack before deploying --- README.md | 1 + plugin.sh | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2bf97c3..d1258c1 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ This is meant to be used as a [Drone plugin](http://plugins.drone.io/). - **port** (default: `222`): SSH port to connect to - **user** (default: `drone`): System user to connect via SSH with - **networks** (default:): Try and auto-create these networks first +- **rm**: (default: `false`): Remove the stack before deploying it ### Dangerous options, unwise outside CI diff --git a/plugin.sh b/plugin.sh index 512fbed..0544c5b 100755 --- a/plugin.sh +++ b/plugin.sh @@ -7,6 +7,7 @@ PLUGIN_HOST=${PLUGIN_HOST:-swarm.autonomic.zone} PLUGIN_PORT=${PLUGIN_PORT:-222} PLUGIN_PURGE=${PLUGIN_PURGE:-"false"} PLUGIN_USER=${PLUGIN_USER:-drone} +PLUGIN_RM=${PLUGIN_RM:-"false"} REMOTE_DOCKER_HOST="ssh://$PLUGIN_USER@$PLUGIN_HOST:$PLUGIN_PORT" @@ -67,13 +68,23 @@ run_stack_deploy() { } run_stack_wait() { - export DOCKER_HOST="$REMOTE_DOCKER_HOST" + export DOCKER_HOST="$REMOTE_DOCKER_HOST" docker run --rm vitalets/docker-stack-wait-deploy \ | sed 's/True/true/' \ | bash /dev/stdin "$PLUGIN_STACK" unset DOCKER_HOST } +run_stack_rm() { + echo "--- start stack rm ---" + docker -H "$REMOTE_DOCKER_HOST" stack rm "$PLUGIN_STACK" + + # See https://github.com/moby/moby/issues/30942#issuecomment-540699206 + until [ -z "$(docker -H "$REMOTE_DOCKER_HOST" stack ps "$PLUGIN_STACK" -q)" ]; do sleep 1; done + + echo "--- end stack rm ---" +} + run_purge() { echo "--- start purge ---" docker -H "$REMOTE_DOCKER_HOST" stack rm "$PLUGIN_STACK" @@ -100,7 +111,12 @@ run_plugin() { generate_secrets fi + if [ "$PLUGIN_RM" == "true" ]; then + run_stack_rm + fi + run_stack_deploy + run_stack_wait if [ "$PLUGIN_PURGE" == "true" ]; then