-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdeploy.sh
executable file
·64 lines (53 loc) · 1.49 KB
/
deploy.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
restore_db() {
echo "Restore from catalog.sql (y/N)"
read restore_confirm
if [[ "$restore_confirm" == [yY] || "$restore_confirm" == [yY][eE][sS] ]]; then
django_service_id=$(docker service ps catalog_django -q)
django_container_id=$(docker ps --filter label=com.docker.swarm.service.name=catalog_django -q)
echo "Copying catalog.sql to container"
docker cp catalog.sql ${django_container_id}:/code
echo "Restoring database and reindexing"
docker exec -i ${django_container_id} bash <<-EOF
inv restore-from-dump
EOF
fi
}
tag_app() {
git describe --tags --always >| release-version.txt
}
down_app() {
# Ensure catalog stack is down before deploying again
if [[ $(docker service ls -q --filter label="com.docker.stack.namespace=catalog" | wc -l) == 0 ]]; then
echo "Catalog already torn down"
else
echo "Catalog is being torn down"
docker stack rm catalog
sleep 12
echo "Catalog successfully torn down"
fi
}
deploy_app() {
tag_app
# Setup shared folders
mkdir -p docker/shared/catalog/logs
mkdir -p docker/shared/nginx/logs
down_app
# Deploy catalog
local environment="$1"
echo "Deploying catalog"
./compose $environment
docker-compose build --pull
docker-compose pull db nginx redis
docker stack deploy -c docker-compose.yml catalog
}
case "${1:-deploy}" in
'deploy') deploy_app "${2:-prod}";;
'down') down_app;;
'restore') restore_db;;
'tag') tag_app;;
*) echo "Invalid option choose on of deploy, down, restore" 1>&2; exit 1;;
esac