From 094b2f6dca2cb36bfc423ee9b56fcfaa63bdb57d Mon Sep 17 00:00:00 2001 From: Paul Schulze Date: Fri, 8 Mar 2013 14:09:52 +0100 Subject: [PATCH] automatic testserver deployment beta --- .gitignore | 1 + pom.xml | 26 +++++- scripts/minecraft.sh | 160 +++++++++++++++++++++++++++++++++++++ scripts/test-deployment.sh | 19 +++++ 4 files changed, 205 insertions(+), 1 deletion(-) create mode 100755 scripts/minecraft.sh create mode 100755 scripts/test-deployment.sh diff --git a/.gitignore b/.gitignore index b728ec1..5050018 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ lib/ target/ *.iml .idea/ +bukkit-testserver/ diff --git a/pom.xml b/pom.xml index f317f7f..e93a545 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,23 @@ + + exec-maven-plugin + org.codehaus.mojo + 1.2.1 + + + Run Test Bukkit Server + package + + exec + + + ${basedir}/scripts/test-deployment.sh + + + + @@ -40,7 +57,14 @@ org.bukkit bukkit - RELEASE + 1.4.7-R1.0 + jar + compile + + + org.bukkit + craftbukkit + 1.4.7-R1.0 jar compile diff --git a/scripts/minecraft.sh b/scripts/minecraft.sh new file mode 100755 index 0000000..756ad10 --- /dev/null +++ b/scripts/minecraft.sh @@ -0,0 +1,160 @@ +#!/bin/bash + +SCRIPT_DIR=$(readlink -f $(dirname "$0")) +SERVICE='craftbukkit*.jar' +#USERNAME="minecraft" +CPU_COUNT=2 +BUKKIT="$SCRIPT_DIR/../target/lib/$SERVICE" +INVOCATION="java -Xmx1000M -Xms300M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $BUKKIT nogui" +MCPATH="$SCRIPT_DIR/../bukkit-testserver" + +if [ ! -d "$MCPATH" ]; then + mkdir -p "$MCPATH" +fi + +ME=$(whoami) +as_user() { + #if [ $ME == $USERNAME ] ; then + bash -c "$1" + #else + #su - $USERNAME -c "$1" + #fi +} + +mc_start() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "Tried to start but $SERVICE was already running!" + else + echo "$SERVICE was not running... starting." + cd "$MCPATH" + as_user "cd "$MCPATH" && screen -dmS minecraft $INVOCATION" + sleep 7 + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "$SERVICE is now running." + else + echo "Could not start $SERVICE." + fi + fi +} + +mc_stop() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "$SERVICE is running... stopping." + as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'" + sleep 2 + as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'" + sleep 6 + else + echo "$SERVICE was not running." + fi + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "$SERVICE could not be shut down... still running." + else + echo "$SERVICE is shut down." + fi +} + +mc_save() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "$SERVICE is running... saving." + as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'" + else + echo "$SERVICE was not running." + fi +} + +mc_reload() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "$SERVICE is running... reloading." + as_user "screen -p 0 -S minecraft -X eval 'stuff \"reload\"\015'" + else + echo "$SERVICE was not running." + fi +} + +mc_reload_or_start() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "$SERVICE was already running! Doing a reload now!" + mc_reload + else + echo "$SERVICE was not running... starting." + cd "$MCPATH" + as_user "cd \"$MCPATH\" && screen -dmS minecraft $INVOCATION" + sleep 7 + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "$SERVICE is now running." + else + echo "Could not start $SERVICE." + fi + fi +} + +mc_ddidderr_admin() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "$SERVICE is running... making ddidder to admin and reloading permissions." + as_user "screen -p 0 -S minecraft -X eval 'stuff \"pex user ddidderr group set admin\"\015'" + as_user "screen -p 0 -S minecraft -X eval 'stuff \"pex reload\"\015'" + else + echo "$SERVICE was not running." + fi +} + +case "$1" in + start) + echo "Starting Minecraft..." + mc_start + echo "DONE" + ;; + stop) + echo "Stopping Minecraft..." + as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN!\"\015'" + mc_stop + echo "DONE" + ;; + restart) + as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER REBOOT IN 10 SECONDS.\"\015'" + $0 stop + sleep 1 + $0 start + ;; + reload) + mc_reload + ;; + reload_or_start) + echo "Starting or reloading Minecraft..." + mc_reload_or_start + echo "DONE" + ;; + ddidderr_admin) + mc_ddidderr_admin + ;; + connected) + as_user "screen -p 0 -S minecraft -X eval 'stuff \"who\"\015'" + sleep 2s + tac "$MCPATH"/server.log | grep -m 1 "Connected" + ;; + status) + if ps ax | grep -v grep | grep -v -i SCREEN | grep "craftbukkit" > /dev/null + then + echo "$SERVICE is running." + else + echo "$SERVICE is not running." + fi + ;; + save) + mc_save + ;; + *) + echo "Usage: /etc/init.d/minecraft {start|stop|restart|connected|status}" + exit 1 + ;; +esac diff --git a/scripts/test-deployment.sh b/scripts/test-deployment.sh new file mode 100755 index 0000000..696b903 --- /dev/null +++ b/scripts/test-deployment.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +SCRIPT_DIR=$(readlink -f $(dirname "$0")) + +BUKKIT_DIR="$SCRIPT_DIR/../bukkit-testserver" +PLUGIN_DIR="$SCRIPT_DIR/../bukkit-testserver/plugins" + +# TODO: This is a bad solution! Maven should write necessary information into an extra file. +ARTIFACT_ID="$(grep -C3 'de.craftinc' "$SCRIPT_DIR/../pom.xml" | grep '' | sed 's/\s*//g' | sed 's/<\/artifactId>\s*//g')" + +# TODO: This is a bad solution! Maven should write necessary information into an extra file. +VERSION="$(grep -C3 'de.craftinc' "$SCRIPT_DIR/../pom.xml" | grep '' | sed 's/\s*//g' | sed 's/<\/version>\s*//g')" + + +mkdir -p "$PLUGIN_DIR" + +cp "$SCRIPT_DIR/../target/$ARTIFACT_ID-$VERSION".jar "$PLUGIN_DIR/$ARTIFACT_ID".jar + +"$SCRIPT_DIR/minecraft.sh" reload_or_start