この記事はOpt Technologies Advent Calendar 2016の7日目です。(納品が1日遅れ大変申し訳ございません)
Spinnakerは、Netflixが作っている、オープンソースのマルチクラウド対応継続的デリバリーPlatformです。
LBの下にサーバーを並べるようなクラスタの構成や、ビルド成果物からのマシンイメージの作成 ~> デプロイといったパイプラインの構築が簡単にできるようです。
今回、PlayアプリケーションをGCEにデプロイするパイプラインを構築して、Spinnakerに入門してみました。
必要なもの
- GCPのアカウント
- Spinnakerの起動も、アプリのデプロイもGCP上に行います。
- 手元でgcloudのインストール & authも済ませておきましょう。
- java8の実行環境がインストール済みの
Ubuntu 14.04
GCEマシンイメージ- このイメージに対して、PlayアプリをBakeします。
- イメージ名は
ubuntu-1404-trusty-jdk8
とします。
- プライベートaptリポジトリ
- この記事ではS3を使用します。(GCSでもいけるはずなんですが...)
Playアプリをプライベートaptリポジトリにpublish
Spinnakerは、debianパッケージからマシンイメージを作成(Bakeと呼ばれます)するため、アプリをaptリポジトリに置いておく必要があります。
実際はJenkinsやCIサービスなどを使ってテスト ~> リポジトリへのpublishを行うことになると思いますが、この記事ではAptlyを使って手元でpublishしておきます。
Aptlyの詳しいセットアップ方法については省略します。
$ git clone https://github.com/ocadaruma/play-example.git
$ cd play-example
$ bin/activator debian:packageBin # .debを作成
$ aptly repo create play-example
$ aptly repo add play-example target/play-example_1.0-SNAPSHOT_all.deb
$ aptly --skip-signing --architectures="amd64,i386" --distribution=trusty publish repo play-example s3:main: # ~/.aptly.confにmainという名前でS3の設定がされている前提
Spinnakerのセットアップ
起動
GCPでは、Cloud Launcher
を使ってワンタッチでSpinnakerインスタンスが作れますので、それを使いましょう。
起動したら、このような画面が見えるはずです。
Accessing Spinnaker through SSH Tunnel
に書いてあるコマンドを打って、SSHトンネルを開きます。
すると、localhost:9000
でSpinnaker Consoleが開けるはずです。
プライベートaptリポジトリ用の設定
Bake時に、プライベートaptリポジトリを読めるようにします。
作ったSpinnakerインスタンスにSSHでログインし、/opt/rosco/config/rosco.yml
を開いて以下を追記します。(S3以外をaptリポジトリに使う場合は適宜変更)
debianRepository: s3://your-repo.s3.amazonaws.com/ trusty main
また、S3を使う場合は、aptでs3://
スキームを使えるようにする設定も必要です。
うまいやり方が思いつかなかったため、強引ですが/opt/rosco/config/packer/install_packages.sh
を以下のように編集します。。
#!/bin/bash
〜〜
function provision_deb() {
# install s3 method
sudo wget https://raw.githubusercontent.com/BashtonLtd/apt-transport-s3/master/s3 -O /usr/lib/apt/methods/s3
sudo chmod +x /usr/lib/apt/methods/s3
# setup aws credentials
cat << EOS | sudo tee /etc/apt/s3auth.conf
AccessKeyId = AKIA*********
SecretAccessKey = *********
Token = ''
EOS
〜〜
Spinnakerアプリケーションの設定
ではSpinnaker Consoleを開き、いろいろ作成していきましょう。
Application
ApplicationsタブのActions ~> Create Applicationを開き、このような内容で作成します。
Load Balancers
LOAD BALANCERSタブ ~> Create Load Balancerから、9000番に対するLBを作成します。
Security Groups
SECURITY GROUPSタブ ~> Create Security Groupから、9000番を許可するファイアウォール設定を作成します。
Pipelines
PIPELINESタブ ~> +
から、PlayアプリのBakeとデプロイを行うパイプラインを作成していきます。
Bake Stage
Add stageで、java8インストール済みのtrustyイメージに対してアプリをBakeするStageを作成します。
Deploy Stage
続けてAdd stageで、デプロイを行うStageを作成します。
TypeをDeployにし、Add server group
から、クラスタを構成していきます。
Load Balancers, Security Groupsに、先ほど作成したものを設定します。
Instance TypeはとりあえずMicroにします。
動作確認
作成したBake & Deploy
パイプラインを、Start Manual Execution
で動かしてみます!
無事にパイプラインが終了し、
Load Balancerのエンドポイント:9000にアクセスしてPlayアプリの画面が出ればOKです!
まとめ
- マシンイメージを利用したデプロイパイプラインの構築が簡単にできてよさそう。
- また今回は単純なBake & Deployする例だけでしたが、パイプライン同士に依存関係をつけたり、Blue-Greenデプロイしたりも簡単にできそうです。