1
|
#!/bin/bash -x
|
2
|
|
3
|
# Requirements:
|
4
|
# 1) for the commands executed by this script on the remote server the user jenkins
|
5
|
# (requires to be member of the group 'cdm' ?still true?) and needs the following permissions in
|
6
|
# sudoers:
|
7
|
#
|
8
|
# | # User alias specification
|
9
|
# | User_Alias CDMUSERS = jenkins
|
10
|
# |
|
11
|
# | #Cmnd alias specification
|
12
|
# | Cmnd_Alias CDMSERVER = /bin/cp -f cdm-server*.jar /opt/cdmserver/, /etc/init.d/cdmserver *, /bin/rm -f /opt/cdmserver/cdm-server.jar, /bin/ln -s cdm-server*.jar cdm-server.jar, /bin/rm -rf /var/lib/cdmserver/*, /bin/mv /var/lib/cdmserver/*, /bin/chmod -R 775 /var/lib/cdmserver/*, /bin/chown -R * /var/lib/cdmserver/*
|
13
|
# | # User privilege specification
|
14
|
# | CDMUSERS ALL=(ALL)NOPASSWD: CDMSERVER
|
15
|
#
|
16
|
# 2) the user executing this script (e.g. jenkins) must be allowed to ssh into the $REMOTE_SERVER
|
17
|
# via public key authentication
|
18
|
#
|
19
|
# 3) /opt/cdmserver/.cdmLibrary/remote-webapp/index must be a symlink to the REMOTE_INDEX_CONTAINER
|
20
|
#
|
21
|
# 4) the REMOTE_INDEX_CONTAINER folder must have the permissions 775 for cdm:cdm
|
22
|
# fix this:
|
23
|
# sudo chown -R cdm:cdm $REMOTE_INDEX_CONTAINER
|
24
|
# sudo chmod -R 775 $REMOTE_INDEX_CONTAINER
|
25
|
|
26
|
if [ -z "${REMOTE_INDEX_CONTAINER}" ]; then
|
27
|
REMOTE_INDEX_CONTAINER=/var/lib/cdmserver/
|
28
|
fi
|
29
|
|
30
|
if [ -z "${LOCAL_INDEX_CONTAINER}" ]; then
|
31
|
LOCAL_INDEX_CONTAINER=/var/lib/cdmserver/
|
32
|
fi
|
33
|
|
34
|
if [ -z "${REMOTE_SERVER_DO_RESTART}" ]; then
|
35
|
REMOTE_SERVER_DO_RESTART="restart"
|
36
|
fi
|
37
|
if [ -z "${REMOTE_SERVER}" ]; then
|
38
|
echo '$REMOTE_SERVER missing'
|
39
|
exit 1
|
40
|
fi
|
41
|
if [ -z "${INSTANCE_NAMES}" ]; then
|
42
|
echo '$INSTANCE_NAMES missing'
|
43
|
exit 1
|
44
|
fi
|
45
|
|
46
|
echo "cdmserver-delpoy-index:"
|
47
|
echo " REMOTE_SERVER = ${REMOTE_SERVER}"
|
48
|
echo " LOCAL_INDEX_CONTAINER = ${LOCAL_INDEX_CONTAINER}"
|
49
|
echo " REMOTE_INDEX_CONTAINER = ${REMOTE_INDEX_CONTAINER}"
|
50
|
echo " REMOTE_SERVER_DO_RESTART = ${REMOTE_SERVER_DO_RESTART}"
|
51
|
echo " INSTANCE_NAMES = ${INSTANCE_NAMES}"
|
52
|
echo " "
|
53
|
|
54
|
# parse INSTANCE_NAMES by whitespace
|
55
|
TMP_IFS=$IFS
|
56
|
IFS=' '
|
57
|
names=($INSTANCE_NAMES)
|
58
|
IFS=$TMP_IFS
|
59
|
|
60
|
echo "transferring index to "${REMOTE_SERVER}
|
61
|
ssh ${REMOTE_SERVER} "sudo rm -rf ${REMOTE_INDEX_CONTAINER}tmp; mkdir -p ${REMOTE_INDEX_CONTAINER}tmp"
|
62
|
cd ${LOCAL_INDEX_CONTAINER}
|
63
|
tar czf - index | ssh ${REMOTE_SERVER} "cd ${REMOTE_INDEX_CONTAINER}tmp ; tar xzf -"
|
64
|
# fixing owner and permissions
|
65
|
ssh ${REMOTE_SERVER} chmod -R 775 ${REMOTE_INDEX_CONTAINER}tmp
|
66
|
ssh ${REMOTE_SERVER} sudo chown -R cdm:cdm ${REMOTE_INDEX_CONTAINER}tmp
|
67
|
|
68
|
STATUS=$(ssh ${REMOTE_SERVER} "sudo /etc/init.d/cdmserver status")
|
69
|
NOT_RUNNING=$(echo "${STATUS}" | grep "not running")
|
70
|
if [ -z "${NOT_RUNNING}" ]; then
|
71
|
echo "stopping $REMOTE_SERVER ..."
|
72
|
ssh ${REMOTE_SERVER} sudo /etc/init.d/cdmserver stop
|
73
|
echo "waiting 20 seconds for server shutting down ..."
|
74
|
sleep 20
|
75
|
else
|
76
|
echo "server is not running"
|
77
|
fi
|
78
|
|
79
|
echo "switching to new index"
|
80
|
for name in "${names[@]}"
|
81
|
do
|
82
|
echo " - $name"
|
83
|
ssh ${REMOTE_SERVER} sudo rm -rf ${REMOTE_INDEX_CONTAINER}index/$name
|
84
|
ssh ${REMOTE_SERVER} sudo mv ${REMOTE_INDEX_CONTAINER}tmp/index/$name ${REMOTE_INDEX_CONTAINER}index/$name
|
85
|
ssh ${REMOTE_SERVER} sudo rm -rf ${REMOTE_INDEX_CONTAINER}tmp
|
86
|
done
|
87
|
|
88
|
if [ "${REMOTE_SERVER_DO_RESTART}" == "restart" ]; then
|
89
|
echo "restarting server"
|
90
|
ssh ${REMOTE_SERVER} sudo /etc/init.d/cdmserver start
|
91
|
fi
|