Skip to content

Instantly share code, notes, and snippets.

@shinji62
Created February 11, 2016 09:44
Show Gist options
  • Save shinji62/e3a658779d542bf2bacf to your computer and use it in GitHub Desktop.
Save shinji62/e3a658779d542bf2bacf to your computer and use it in GitHub Desktop.
Simple deployment script java App
cf login -a https://api.$CF_SYSTEM_DOMAIN -u $CF_USER -p $CF_USER_PASS -o $CF_ORG -s $CF_SPACE --skip-ssl-validation
VERSION_TODO_APP=$VERSION_TEST
CF_APPS_DOMAIN=$CF_SYSTEM_DOMAIN
DEPLOYED_VERSION_CMD=$(CF_COLOR=false cf apps | grep "${FINAL_ROUTE_SUBDOMAIN}.${CF_APP_DOMAIN}" | grep started | awk '{print $1}')
DEPLOYED_VERSION=$(echo "${DEPLOYED_VERSION_CMD}")
ROUTE_VERSION=$(echo "${VERSION_TODO_APP}" | cut -d"." -f1-3 | tr '.' '-')
echo "Deployed Version: $DEPLOYED_VERSION"
echo "Route Version: $ROUTE_VERSION"
if [ "${DEPLOYED_VERSION}" == "${CF_APP_NAME}-${VERSION_TODO_APP}" ];
then
"This version is already running and mapped"
exit 1
fi
# push a new version and map the route
cf push "${CF_APP_NAME}-${VERSION_TODO_APP}" \
-n "${CF_APP_NAME}-${ROUTE_VERSION}" \
-d ${CF_APP_DOMAIN} \
-b "java_buildpack_offline" \
-p "${JAR_FILE}" \
--no-start
cf start "${CF_APP_NAME}-${VERSION_TODO_APP}"
#Wait 30 sec that the application show up
for i in {1..30}
do
sleep 1
curlTest=$(curl -X GET -s -o /dev/null -I -w "%{http_code}" http://${CF_APP_NAME}-${ROUTE_VERSION}.${CF_APP_DOMAIN}/greeting)
if [ "${curlTest}" != "200" ]
then
if [ $i == 30 ]
then
exit 1
else
echo "$i Could not join the route: ${curlTest} http://${CF_APP_NAME}-${ROUTE_VERSION}.${CF_APP_DOMAIN}/greeting"
fi
else
echo "Route respond : ${CF_APP_NAME}-${ROUTE_VERSION}.${CF_APP_DOMAIN}/greeting"
break
fi
done
cf map-route "${CF_APP_NAME}-${VERSION_TODO_APP}" $CF_APP_DOMAIN -n "${FINAL_ROUTE_SUBDOMAIN}"
if [ ! -z "$DEPLOYED_VERSION" -a "$DEPLOYED_VERSION" != " " -a "$DEPLOYED_VERSION" != "$CF_APP-${VERSION_TODO_APP}" ]; then
echo "Performing zero-downtime cutover to ${VERSION_TODO_APP}"
echo "$DEPLOYED_VERSION" | while read line
do
if [ ! -z "$line" -a "$line" != " " -a "$line" != "${CF_APP_NAME}-${VERSION_TODO_APP}" ]; then
echo "Scaling down, unmapping and removing $line"
# Unmap the route and delete
cf unmap-route "$line" $CF_APP_DOMAIN -n "${FINAL_ROUTE_SUBDOMAIN}"
cf stop "$line"
else
echo "Skipping $line"
fi
done
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment