Cloud Foundry へのデプロイ
このノウハウガイドでは、Cloud FoundryにデプロイするためのCircleCIの設定方法について説明します。
はじめに
このページでは、Cloud Foundry にデプロイするための設定について説明します。 CircleCI では、設定ワークフローを簡略化するために Cloud Foundry Orb を開発しました。 Orb レジストリ の Cloud Foundry のページには、Cloud Foundry を使ったタスクの実行方法が分かるサンプルが含まれています。この中には、単一のジョブでブルーグリーンデプロイをビルドして実行する方法を示した以下のサンプルも含まれています。 このサンプルでは、指定する 2 つのサブドメインの domain
に dark
と live
のプレフィックスが自動的に付けられます。 live デプロイを実行するには確認ステップも指定する必要があります。
2.1 の設定を使用した Cloud Foundry へのデプロイ
この例では必ずプレースホルダーのバージョンを置き換えてください。
version: 2.1
orbs:
cloudfoundry: circleci/cloudfoundry@x.y.z # Use the Cloud Foundry orb in your config
workflows:
build_deploy:
jobs:
- cloudfoundry/blue_green:
appname: <your-app-name>
build_steps:
- run: echo 'your build steps'
- run: echo 'you can have more, too'
- run: echo 'or provide a workspace'
context: your-context
domain: your-domain
manifest: null
org: your-org
package: null
space: your-space
validate_steps:
# Call any orbs or custom commands that validate the health of deployed application before letting Green deploy/reroute proceed.
# For example, hitting a /health endpoint with curl and making sure the dark URL returns a 200.
設定で使用できるさまざまな Cloud Foundry Orb の要素については、 CircleCI Orb レジストリ の Cloud Foundry Orb に関するページで詳細を確認できます。
2.0 の設定を使用した Cloud Foundry へのデプロイ
Cloud Foundry へのデプロイには Cloud Foundry CLI が必要です。 アーキテクチャは必ず Docker イメージに一致させてください。以下のコマンドは、Debian ベースのイメージが使用されていることを前提としています。 この例では、Cloud Foundry の map-route/unmap-route コマンドを使用して、"Blue-Green" デプロイを実装しています。これは、基本の cf push
にはないオプションの機能です。
1. 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 デプロイ
これは、 Blue-Green デプロイにおける最初のステップです。アプリケーションを非本番ルートにプッシュします。
- 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 デプロイ
ここまで、前項でプッシュした "app-name" は変更されていません。 最後に、本番 URL を dark アプリケーションにルーティングし、それまでのバージョンへのトラフィックを停止し、アプリケーションの名前を変更します。
- 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. 手動による承認
さらなる制御と検証を行うには、以下のサンプルワークフローに示すように、dark のステップと live のステップの間に手動の "hold" ステップを追加します。
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