Files
dokku/dokku
Jose Diaz-Gonzalez 16095d0d79 Merge pull request #664 from alexernst/fix/hostname-url
Don't overwrite $APP/URL modified by plugins in post-deploy hook
2014-10-21 10:34:17 -04:00

139 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eo pipefail
export DOKKU_ROOT=${DOKKU_ROOT:="/home/dokku"}
export PLUGIN_PATH=${PLUGIN_PATH:="/var/lib/dokku/plugins"}
[[ -f $DOKKU_ROOT/dokkurc ]] && source $DOKKU_ROOT/dokkurc
[[ $DOKKU_TRACE ]] && set -x
if [[ $(id -un) != "dokku" && $1 != plugins-install* ]]; then
sudo -u dokku -H $0 "$@"
exit
fi
case "$1" in
receive)
APP="$2"; IMAGE="dokku/$APP"
echo "-----> Cleaning up ..."
dokku cleanup
echo "-----> Building $APP ..."
cat | dokku build $APP
echo "-----> Releasing $APP ..."
dokku release $APP
echo "-----> Deploying $APP ..."
dokku deploy $APP
echo "=====> Application deployed:"
echo " $(dokku url $APP)"
echo
;;
build)
APP="$2"; IMAGE="dokku/$APP"; CACHE_DIR="$DOKKU_ROOT/$APP/cache"
id=$(cat | docker run -i -a stdin progrium/buildstep /bin/bash -c "mkdir -p /app && tar -xC /app")
test $(docker wait $id) -eq 0
docker commit $id $IMAGE > /dev/null
[[ -d $CACHE_DIR ]] || mkdir $CACHE_DIR
pluginhook pre-build $APP
id=$(docker run -d -v $CACHE_DIR:/cache $IMAGE /build/builder)
docker attach $id
test $(docker wait $id) -eq 0
docker commit $id $IMAGE > /dev/null
pluginhook post-build $APP
;;
release)
APP="$2"; IMAGE="dokku/$APP"
pluginhook pre-release $APP
if [[ -f "$DOKKU_ROOT/$APP/ENV" ]]; then
id=$(cat "$DOKKU_ROOT/$APP/ENV" | docker run -i -a stdin $IMAGE /bin/bash -c "mkdir -p /app/.profile.d && cat > /app/.profile.d/app-env.sh")
test $(docker wait $id) -eq 0
docker commit $id $IMAGE > /dev/null
fi
pluginhook post-release $APP
;;
deploy)
APP="$2"; IMAGE="dokku/$APP"
pluginhook pre-deploy $APP
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
oldid=$(< "$DOKKU_ROOT/$APP/CONTAINER")
fi
# start the app
DOCKER_ARGS=$(: | pluginhook docker-args $APP)
id=$(docker run -d -p 5000 -e PORT=5000 $DOCKER_ARGS $IMAGE /bin/bash -c "/start web")
port=$(docker port $id 5000 | sed 's/[0-9.]*://')
# if we can't post-deploy successfully, kill new container
function kill_new {
docker inspect $id &> /dev/null && docker kill $id > /dev/null
trap - INT TERM EXIT
kill -9 $$
}
# run checks first, then post-deploy hooks, which switches Nginx traffic
trap kill_new INT TERM EXIT
echo "-----> Running pre-flight checks"
pluginhook check-deploy $id $APP $port
# now using the new container
echo $id > "$DOKKU_ROOT/$APP/CONTAINER"
echo $port > "$DOKKU_ROOT/$APP/PORT"
echo "http://$(< "$DOKKU_ROOT/HOSTNAME"):$port" > "$DOKKU_ROOT/$APP/URL"
echo "-----> Running post-deploy"
pluginhook post-deploy $APP $port
trap - INT TERM EXIT
# kill the old container
if [[ -n "$oldid" ]]; then
docker inspect $oldid &> /dev/null && docker kill $oldid > /dev/null
fi
;;
cleanup)
# delete all non-running container
docker ps -a | grep 'Exit' | awk '{print $1}' | xargs docker rm &> /dev/null &
# delete unused images
docker images | grep '<none>' | awk '{print $3}' | xargs docker rmi &> /dev/null &
;;
plugins)
ls -1 -d $PLUGIN_PATH/*/
;;
plugins-install)
pluginhook install
;;
plugins-install-dependencies)
pluginhook dependencies
;;
# temporary hack for https://github.com/progrium/dokku/issues/82
deploy:all)
for app in $(ls -d $DOKKU_ROOT/*/); do
APP=$(basename $app);
dokku deploy $APP
done
;;
help|'')
cat<<EOF | pluginhook commands help | sort
help Print the list of commands
plugins Print active plugins
plugins-install Install active plugins
EOF
;;
*)
for script in $(ls -d /var/lib/dokku/plugins/*/commands); do
$script "$@"
done
;;
esac