-
Notifications
You must be signed in to change notification settings - Fork 0
/
simulate_releases.sh
executable file
·80 lines (67 loc) · 1.77 KB
/
simulate_releases.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/bash
SOURCE_DIR=/usr/src/app
RELEASE_ROOT=/usr/src/releases
PUMA_MASTER_PIDFILE=/usr/src/app/puma.pid
create_release_directory ()
{
mkdir -p "${RELEASE_ROOT}"
}
cd_to_current_release ()
{
cd "${RELEASE_ROOT}/current" || exit
}
create_release_and_update_current_symlink ()
{
local release_name=$(date '+%s%N')
local release_path="${RELEASE_ROOT}/${release_name}"
echo "Creating release at ${release_path}"
cp -R "${SOURCE_DIR}" "${release_path}"
cd "${release_path}" || exit
bundle config set path '.bundle'
bundle install --local
ln -fsn "${release_path}" "${RELEASE_ROOT}/current"
}
start_puma_master ()
{
echo "Starting puma master"
cd_to_current_release
bundle exec puma --pidfile "${PUMA_MASTER_PIDFILE}" &
}
start_phased_restart ()
{
echo "Starting phased restart"
cd_to_current_release
bundle exec pumactl -P "${PUMA_MASTER_PIDFILE}" phased-restart || exit
}
delete_old_releases ()
{
echo "Deleting old releases"
local current_release=$(readlink -f "${RELEASE_ROOT}"/current)
while IFS= read -r -d '' release_dir; do
if [[ ${release_dir} != "${current_release}" ]] && ! [[ -h ${release_dir} ]]; then
echo "Removing ${release_dir}"
rm -r "${release_dir}"
fi
done < <(find "${RELEASE_ROOT}" -mindepth 1 -maxdepth 1 -print0)
}
test_connection ()
{
sleep 10
echo "Testing connection to puma master"
curl -4 --retry 5 --retry-connrefused --silent --show-error http://localhost:3000 > /dev/null || exit
}
main ()
{
create_release_directory
create_release_and_update_current_symlink
start_puma_master
test_connection
create_release_and_update_current_symlink
start_phased_restart
delete_old_releases
test_connection
create_release_and_update_current_symlink
start_phased_restart
test_connection
}
main