Cloud Foundry 三日坊主2日目

これは Cloud Foundry Advent Calendar 2017 8日目の記事です。三日坊主な人でも Cloud Foundry を楽しもうという企画です。昨日は Pivotal Web Services (PWS) に Java の Spring アプリケーションを配備しました。

本日は、引き続き PWS を活用して……とすると、Pivotal 社の回し者みたいになってくるので、別なことを始めたいと思います。PWS の活用に興味のある方は、公式ドキュメントを参照しながら、いろいろと試してみるとよいでしょう。また、Spring アプリケーションの開発自体は、有益な情報が世の中にいろいろとありますので、そちらにお任せしたいと思います。


1日目は Cloud Foundry をアプリケーション基盤として利用することにより、素早くアプリケーションを配備できることを実感できたと思います。データベースもコマンドラインから簡単に利用できました。一方、アプリケーションの開発自体を支援する機能は備えていないことに気づいたと思います。それを補完する継続的インテグレーション環境があると、効率よくアプリケーション開発できるようになるでしょう。Cloud Foundry と組み合わせのいい継続的インテグレーションツールとして Concourse というものがあります。残念なことにサービス提供されておらず、ソフトウェア提供になっていますので、本日は Concourse の導入から利用までを進めていきたいと思います。


まず、どこかに Concourse を導入するためのサーバーを用意します。そして、手っ取り早く構築するために Docker Compose によるインストール手順にしたがって導入します。始めに最新の Docker CEDocker Compose をインストールします。上述のインストール手順どおりdocker-composeを実行すると、サーバ起動時に自動起動しない設定になりますので、docker-compose.ymlファイルにあるサービスごとにrestart: alwaysと追記するとよいでしょう。

Concourse が起動してきたら、お約束により Hello, world! を実行します。手順に従ってflyコマンドを実行したコンソールにHello, world!と表示されたと思います。ジョブの正常終了後、Concourse のダッシュボードにログインすると以下のような画面になっています。緑色が正常終了したジョブを表しています。

Concourse dashboard

さて、これで正常に継続的インテグレーション環境を導入できました。2日目は、アプリケーション実行環境に続けて、継続的インテグレーションを実現しました……いや、何もインテグレーションしてねぇ。ということで、もう少し続けたいと思います。

さて、昨日配備した Spring アプリケーションですが、きちんとテストが付属しています。これをそのまま利用したいと思います。まず、サンプルアプリケーションを自由に更新できるよう、GitHub で自分のところにフォークします。次に、Concourse のパイプラインとして、以下のような設定ファイルを作成します。設定項目の詳細な説明は Concourse の公式ドキュメントを参照してください。

---
resources:
- name: pong_matcher_spring
type: git
source:
uri: https://github.com/****/pong_matcher_spring
jobs:
- name: pong_matcher_spring-job
plan:
- get: pong_matcher_spring
trigger: true
- task: package
config:
platform: linux
image_resource:
type: docker-image
source:
repository: nitram509/debian-openjdk8-maven-cmake-gcc
tag: latest
inputs:
- name: pong_matcher_spring
run:
path: mvn
args: ["-f", "pong_matcher_spring/pom.xml", "package"]

さきほどと同じようにパイプラインを設定して実行します。設定ファイルを見ると何となく理解できると思いますが、JDK8 と Maven の入っている Docker イメージをダウンロードして、そこに GitHub にあるソースコードを取り込み、ビルドしています。途中trigger: trueと設定しているため、ソースリポジトリを変更すると、自動的にビルドされるように設定されています。お使いの GitHub リポジトリを何か更新してお試しください。

Concourse pong_matcher_spring pipeline

今回のアプリケーションは、ビルドの流れからテストまで一気に実行していますが、それぞれ別に設定したり、他のタスクを追加するなど自由に設定できます。Concourse から Cloud Foundry にそのまま配備する方法もありますが、本日はここまでにしたいと思います。