Make run-deploy.sh do a bit more work to update the rest of the staging
[arvados.git] / jenkins / run-deploy.sh
1 #!/bin/bash
2
3 IDENTIFIER=$1
4 DEPLOY_REPO=$2
5
6 if [[ "$IDENTIFIER" == '' ]]; then
7   echo "Syntax: $0 <identifier> <deploy_repo_name>"
8   exit 1
9 fi
10
11 if [[ "$DEPLOY_REPO" == '' ]]; then
12   echo "Syntax: $0 <identifier> <deploy_repo_name>"
13   exit 1
14 fi
15
16 EXITCODE=0
17
18 COLUMNS=80
19
20 title () {
21   printf "\n%*s\n\n" $(((${#title}+$COLUMNS)/2)) "********** $1 **********"
22 }
23
24 # We only install capistrano in dev mode
25 export RAILS_ENV=development
26
27 source /etc/profile.d/rvm.sh
28 echo $WORKSPACE
29
30 # Weirdly, jenkins/rvm ties itself in a knot.
31 rvm use default
32
33 # Just say what version of ruby we're running
34 ruby --version
35
36 function ensure_symlink() {
37   if [[ ! -L $WORKSPACE/$1 ]]; then
38     ln -s $WORKSPACE/$DEPLOY_REPO/$1 $WORKSPACE/$1
39   fi
40 }
41
42 # Check out/update the $DEPLOY_REPO repository
43 if [[ ! -d $DEPLOY_REPO ]]; then
44   mkdir $DEPLOY_REPO
45   git clone git@git.curoverse.com:$DEPLOY_REPO.git
46 else
47   cd $DEPLOY_REPO
48   git pull
49 fi
50
51 # Make sure the necessary symlinks are in place
52 cd "$WORKSPACE"
53 ensure_symlink "apps/workbench/Capfile.workbench.$IDENTIFIER"
54 ensure_symlink "apps/workbench/config/deploy.common.rb"
55 ensure_symlink "apps/workbench/config/deploy.curoverse.rb"
56 ensure_symlink "apps/workbench/config/deploy.workbench.$IDENTIFIER.rb"
57
58 ensure_symlink "services/api/Capfile.$IDENTIFIER"
59 ensure_symlink "services/api/config/deploy.common.rb"
60 ensure_symlink "services/api/config/deploy.$IDENTIFIER.rb"
61
62 # Deploy API server
63 title "Deploying API server"
64 cd "$WORKSPACE"
65 cd services/api
66
67 bundle install --deployment
68
69 # make sure we do not print the output of config:check
70 sed -i'' -e "s/RAILS_ENV=production #{rake} config:check/RAILS_ENV=production QUIET=true #{rake} config:check/" $WORKSPACE/$DEPLOY_REPO/services/api/config/deploy.common.rb
71
72 bundle exec cap deploy -f Capfile.$IDENTIFIER
73
74 ECODE=$?
75
76 # restore unaltered deploy.common.rb
77 cd $WORKSPACE/$DEPLOY_REPO
78 git checkout services/api/config/deploy.common.rb
79
80 if [[ "$ECODE" != "0" ]]; then
81   title "!!!!!! DEPLOYING API SERVER FAILED !!!!!!"
82   EXITCODE=$(($EXITCODE + $ECODE))
83   exit $EXITCODE
84 fi
85
86 title "Deploying API server complete"
87
88 # Install updated debian packages
89 title "Deploying updated arvados debian packages"
90
91 ssh -p2222 root@$IDENTIFIER.arvadosapi.com -C "apt-get update && apt-get -qqy install arvados-src python-arvados-fuse python-arvados-python-client"
92
93 if [[ "$ECODE" != "0" ]]; then
94   title "!!!!!! DEPLOYING DEBIAN PACKAGES FAILED !!!!!!"
95   EXITCODE=$(($EXITCODE + $ECODE))
96   exit $EXITCODE
97 fi
98
99 title "Deploying updated arvados debian packages complete"
100
101 # Install updated arvados gems
102 title "Deploying updated arvados gems"
103
104 ssh -p2222 root@$IDENTIFIER.arvadosapi.com -C "/usr/local/rvm/bin/rvm default do gem install arvados arvados-cli && /usr/local/rvm/bin/rvm default do gem clean arvados arvados-cli"
105
106 if [[ "$ECODE" != "0" ]]; then
107   title "!!!!!! DEPLOYING ARVADOS GEMS FAILED !!!!!!"
108   EXITCODE=$(($EXITCODE + $ECODE))
109   exit $EXITCODE
110 fi
111
112 title "Deploying updated arvados gems complete"
113
114 # Deploy Workbench
115 title "Deploying workbench"
116 cd "$WORKSPACE"
117 cd apps/workbench
118 bundle install --deployment
119
120 # make sure we do not print the output of config:check
121 sed -i'' -e "s/RAILS_ENV=production #{rake} config:check/RAILS_ENV=production QUIET=true #{rake} config:check/" $WORKSPACE/$DEPLOY_REPO/apps/workbench/config/deploy.common.rb
122
123 bundle exec cap deploy -f Capfile.workbench.$IDENTIFIER
124
125 ECODE=$?
126
127 # restore unaltered deploy.common.rb
128 cd $WORKSPACE/$DEPLOY_REPO
129 git checkout apps/workbench/config/deploy.common.rb
130
131 if [[ "$ECODE" != "0" ]]; then
132   title "!!!!!! DEPLOYING WORKBENCH FAILED !!!!!!"
133   EXITCODE=$(($EXITCODE + $ECODE))
134   exit $EXITCODE
135 fi
136
137 title "Deploying workbench complete"
138
139 # Update compute0
140 title "Update compute0"
141
142 ssh -p2222 root@compute0.$IDENTIFIER -C "/usr/bin/puppet agent -t"
143
144 ECODE=$?
145
146 if [[ "$ECODE" == "2" ]]; then
147   # Puppet exits '2' if there are changes. For real!
148   ECODE=0
149 fi
150
151 if [[ "$ECODE" != "0" ]]; then
152   title "!!!!!! Update compute0 FAILED !!!!!!"
153   EXITCODE=$(($EXITCODE + $ECODE))
154 fi
155
156 title "Update compute0 complete"
157
158 title "Update shell"
159
160 ssh -p2222 root@shell.$IDENTIFIER -C "/usr/bin/puppet agent -t"
161
162 ECODE=$?
163
164 if [[ "$ECODE" == "2" ]]; then
165   # Puppet exits '2' if there are changes. For real!
166   ECODE=0
167 fi
168
169 if [[ "$ECODE" != "0" ]]; then
170   title "!!!!!! Update shell FAILED !!!!!!"
171   EXITCODE=$(($EXITCODE + $ECODE))
172 fi
173
174 title "Update shell complete"
175
176 title "Update keep0"
177
178 ssh -p2222 root@keep0.$IDENTIFIER -C "/usr/bin/puppet agent -t"
179
180 ECODE=$?
181
182 if [[ "$ECODE" == "2" ]]; then
183   # Puppet exits '2' if there are changes. For real!
184   ECODE=0
185 fi
186
187 if [[ "$ECODE" != "0" ]]; then
188   title "!!!!!! Update keep0 FAILED !!!!!!"
189   EXITCODE=$(($EXITCODE + $ECODE))
190 fi
191
192 title "Update keep0 complete"
193
194 exit $EXITCODE