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のアカウント。
注:PWSにデプロイしていない場合は、以下のコマンドのapi.run.pivotal.io URLをCFインスタンスのAPI URLに置き換える必要があります。

プロジェクトの作成

Spring Bootアプリケーションを作成するには、新しいプロジェクトを作成するときにGitLabのSpringテンプレートを使います:

New Project From Template

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_USERNAMECF_PASSWORD という名前を付け、正しい値を設定します。

Variable Settings in GitLab

一度設定すると、GitLab CI/CD はリポジトリのデフォルトブランチにプッシュするたびにアプリを CF にデプロイします。 ビルドログを見たり、ビルドがライブで実行されているのを見るには、CI/CD >パイプラインに移動します。

注意:セキュリティ上のベストプラクティスとして、開発者の認証情報を使うのではなく、アプリケーション用に別のデプロイユーザーを作成し、その認証情報を GitLab に追加するようにしましょう。

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!”というメッセージが表示されるはずです。