Deploy to Cloud Foundry
In this how-to guide, you will learn how to configure CircleCI to deploy to Cloud Foundry.
Introduction
Cloud Foundry deployments require the Cloud Foundry CLI. Be sure to match the architecture to your Docker image (the commands below assume you are using a Debian-based image). This example pattern implements "Blue-Green" deployments using Cloud Foundry’s map-route/unmap-route commands, which is an optional feature above and beyond a basic cf push.
1. Install the CLI
- run:
name: Setup CF CLI
command: |
curl -v -L -o cf-cli_amd64.deb "https://cli.run.pivotal.io/stable?release=debian64&source=github"
sudo dpkg -i cf-cli_amd64.deb
cf -v
cf api https://api.run.pivotal.io # alternately target your private Cloud Foundry deployment
cf auth "$CF_USER" "$CF_PASSWORD"
cf target -o "$CF_ORG" -s "$CF_SPACE"
2. Dark deployment
This example is the first step in a Blue-Green deployment, pushing the application to non-production routes.
- run:
name: CF Deploy
command: |
# push artifacts on "dark" subdomain, and set environment variables before running `cf start`.
cf push --no-start <app-name-dark> -f manifest.yml -p application.jar -n dark -d <example.com>
# Pass CircleCI variables to Cloud Foundry (optional)
cf set-env <app-name-dark> circle_build_num ${CIRCLE_BUILD_NUM}
cf set-env <app-name-dark> circle_commit ${CIRCLE_SHA1}
cf set-env <app-name-dark> circle_workflow_guid ${CIRCLE_WORKFLOW_ID}
cf set-env <app-name-dark> circle_user ${CIRCLE_PROJECT_USERNAME}
cf set-env <app-name-dark> circle_repo ${CIRCLE_PROJECT_REPONAME}
# Start the application
cf start <app-name-dark>
# Ensure dark route is exclusive to dark app
cf unmap-route <app-name> <example.com> -n dark || echo "Dark Route Already exclusive"
3. Live deployment
Until now, the previously pushed "app-name" has not changed. The final step is to route the production URL to our dark application, stop traffic to the previous version, and rename the applications.
- run:
name: Re-route live Domain to latest
command: |
# Send "real" url to new version
cf map-route app-name-dark example.com -n www
# Stop sending traffic to previous version
cf unmap-route app-name example.com -n www
# stop previous version
cf stop app-name
# delete previous version
cf delete app-name -f
# Switch name of "dark" version to claim correct name
cf rename app-name-dark app-name
4. Manual approval (optional)
For additional control or validation, you can add a manual "hold" step between the dark and live steps as shown in the sample workflow below.
workflows:
build-deploy:
jobs:
- test
- dark-deploy:
requires:
- test
filters:
branches:
only: main
- hold:
type: approval
requires:
- dark-deploy
filters:
branches:
only: main
- live-deploy:
requires:
- hold # manual approval required via the CircleCI UI to run the live-deploy job
filters:
branches:
only: main
Track your deployments with deploy markers
Deploy markers provide a way to track and manage your Cloud Foundry deployments in the CircleCI web app. When you add deploy markers to your deployment job, you can view a timeline of all deployments, track their status, and enable rollback and deploy pipelines.
You have two options for setting up deploy markers:
-
In-app setup: Use the guided setup in the CircleCI web app when configuring a Rollback Pipeline or Deploy Pipeline. The setup will walk you through adding deploy markers to your configuration. If you are using GitHub and have the CircleCI GitHub App installed, you can use AI to generate the deploy marker configuration automatically.
-
Manual setup: Add deploy marker commands directly to your
.circleci/config.ymlfile by following the Configure Deploy Markers guide.
Both approaches will enable you to track deployment history and manage rollbacks directly from the CircleCI web app.