Skip to content

Instantly share code, notes, and snippets.

@cdelashmutt-pivotal
Last active July 19, 2018 20:45
Show Gist options
  • Save cdelashmutt-pivotal/3b6714aebef279faf800 to your computer and use it in GitHub Desktop.
Save cdelashmutt-pivotal/3b6714aebef279faf800 to your computer and use it in GitHub Desktop.
Jenkins Zero downtime CF Push
PLATFORM='unknown'
UNAMESTR=`uname`
if [[ "$UNAMESTR" == 'Darwin' ]]; then
platform='Mac'
fi
CF_USER="payment-services"
CF_ORG="payment-services"
CF_SPACE="danger zone"
CF_DOMAIN="apps-np.homedepot.com"
CF_API_ENDPOINT="api.run-np.homedepot.com"
CF_JOB_NAME="$JOB_NAME"
if [[ $platform == 'Mac' ]]; then
curl -L "https://cli.run.pivotal.io/stable?release=macosx64&version=6.10.0&source=pcf1.4" -o "installer-osx-amd64.pkg"
mkdir -p cf-pkg
cd cf-pkg
xar -xf ../installer-osx-amd64.pkg
cd com.cloudfoundry.cli.pkg
cat Payload | gunzip -dc | cpio -i
mv usr/local/bin/cf ../..
cd ../..
else
wget "https://cli.run.pivotal.io/stable?version=6.10.0&source=pcf1.4&release=linux64-binary" -O cf-linux-amd64.tgz
tar -zxvf cf-linux-amd64.tgz
fi
./cf --version
#./cf login -a https://${CF_API_ENDPOINT} -u ${CF_USER} -p ${CF_PASSWORD} -o ${CF_ORG} -s ${CF_SPACE}
#Use this version instead of the above if you need to disable SSL validation
./cf login -a https://${CF_API_ENDPOINT} -u ${CF_USER} -p ${CF_PASSWORD} -o ${CF_ORG} -s "${CF_SPACE}" --skip-ssl-validation
DEPLOYED_VERSION_CMD=$(CF_COLOR=false ./cf apps | grep "${CF_JOB_NAME}-" | cut -d" " -f1)
DEPLOYED_VERSION="$DEPLOYED_VERSION_CMD"
ROUTE_VERSION=$(echo "${BUILD_NUMBER}" | cut -d"." -f1-3 | tr '.' '-')
echo "Deployed Version: $DEPLOYED_VERSION"
echo "Route Version: $ROUTE_VERSION"
./cf push "${CF_JOB_NAME}-$BUILD_NUMBER" -i 1 -m 512M -n "${CF_JOB_NAME}-$ROUTE_VERSION" -d ${CF_DOMAIN} -p build/libs/pg-giftcardservice.jar --no-manifest
./cf map-route "${CF_JOB_NAME}-${BUILD_NUMBER}" ${CF_DOMAIN} -n ${CF_JOB_NAME}
./cf scale ${CF_JOB_NAME}-${BUILD_NUMBER} -i 2
if [ ! -z "$DEPLOYED_VERSION" -a "$DEPLOYED_VERSION" != " " -a "$DEPLOYED_VERSION" != "${CF_JOB_NAME}-${BUILD_NUMBER}" ]; then
echo "Performing zero-downtime cutover to $BUILD_NUMBER"
while read line
do
if [ ! -z "$line" -a "$line" != " " -a "$line" != "${CF_JOB_NAME}-${BUILD_NUMBER}" ]; then
echo "Scaling down, unmapping and removing $line"
./cf scale "$line" -i 1
./cf unmap-route "$line" ${CF_DOMAIN} -n ${CF_JOB_NAME}
./cf delete "$line" -f
else
echo "Skipping $line"
fi
done <<< "$DEPLOYED_VERSION"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment