GitLab CI/CDでSpring BootアプリケーションをCloud Foundryにデプロイする。
導入
この記事では、GitLab CI/CDを使ってSpring BootアプリケーションをCloud Foundry(CF)に継続デプロイする方法を紹介します。
このプロジェクトのコードはすべてGitLabのリポジトリにあります。
GitLab CI/CDを使ってSpring BootアプリケーションをKubernetesにデプロイすることに興味がある場合は、ブログポストContinuous Delivery of a Spring Boot application with GitLab CI and Kubernetesを読んでください。
要件
このチュートリアルは、Java、GitLab、Cloud Foundry、GitLab CI/CDに精通していることを前提としています。
必要なもの
- Pivotal Web Services(PWS)またはその他の Cloud Foundry(CF) インスタンスのアカウント。
- GitLabのアカウント。
api.run.pivotal.io
URLをCFインスタンスのAPI URLに置き換える必要があります。プロジェクトの作成
Spring Bootアプリケーションを作成するには、新しいプロジェクトを作成するときにGitLabのSpringテンプレートを使います:
Cloud Foundryへのデプロイ設定
Cloud Foundry にデプロイするには、manifest.yml
ファイルを追加する必要があります。これは、アプリケーションのデプロイに使用する CF CLI 用の設定です。プロジェクトのルートディレクトリに以下の内容で作成します:
---
applications:
- name: gitlab-hello-world
random-route: true
memory: 1G
path: target/demo-0.0.1-SNAPSHOT.jar
GitLab CI/CDを設定してアプリケーションをデプロイします。
ここで、GitLab CI/CD 設定ファイル (.gitlab-ci.yml
) をプロジェクトのルートに追加する必要があります。これは、リポジトリにコードがプッシュされたときに実行する必要があるコマンドを GitLab が判断するためのものです。リポジトリのルートディレクトリに次の.gitlab-ci.yml
ファイルを追加します。コードをプッシュすると、GitLab が自動的にそれを検知して定義されたステップを実行します:
image: java:8
stages:
- build
- deploy
before_script:
- chmod +x mvnw
build:
stage: build
script: ./mvnw package
artifacts:
paths:
- target/demo-0.0.1-SNAPSHOT.jar
production:
stage: deploy
script:
- curl --location "https://cli.run.pivotal.io/stable?release=linux64-binary&source=github" | tar zx
- ./cf login -u $CF_USERNAME -p $CF_PASSWORD -a api.run.pivotal.io
- ./cf push
only:
- master
Docker Hubで最新のJava 8 JDKが提供されているため、アプリケーションのビルドにはjava:8
Dockerイメージを使用しました。また、only
節を追加して、masterブランチにプッシュしたときだけデプロイが行われるようにしました。
.gitlab-ci.yml
で定義したステップでは CF にログインするための認証情報が必要なので、GitLab CI/CD で CF の認証情報を環境変数として追加する必要があります。環境変数を設定するには、プロジェクトのSettings > CI/CDに移動し、Variables を展開します。変数にCF_USERNAME
とCF_PASSWORD
という名前を付け、正しい値を設定します。
一度設定すると、GitLab CI/CD はリポジトリのデフォルトブランチにプッシュするたびにアプリを CF にデプロイします。 ビルドログを見たり、ビルドがライブで実行されているのを見るには、CI/CD >パイプラインに移動します。
GitLab で手動デプロイを開始するには、CI/CD >パイプラインに移動し、パイプラインの実行をクリックします。 アプリのデプロイが完了すると、production
ジョブのログにアプリの URL が表示されます:
requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: gitlab-hello-world-undissembling-hotchpot.cfapps.io
last uploaded: Mon Nov 6 10:02:25 UTC 2017
stack: cflinuxfs2
buildpack: client-certificate-mapper=1.2.0_RELEASE container-security-provider=1.8.0_RELEASE java-buildpack=v4.5-offline-https://github.com/cloudfoundry/java-buildpack.git#ffeefb9 java-main java-opts jvmkill-agent=1.10.0_RELEASE open-jdk-like-jre=1.8.0_1...
state since cpu memory disk details
#0 running 2017-11-06 09:03:22 PM 120.4% 291.9M of 1G 137.6M of 1G
デプロイしたアプリケーション(この例ではhttps://gitlab-hello-world-undissembling-hotchpot.cfapps.io/
)にアクセスすると、”Spring is here!”というメッセージが表示されるはずです。