Spinnakerのコードを手元で修正して動作確認する方法(その1)

こんにちは。業務委託で開発支援Gのお手伝いをしているmizzyです。

お手伝いの一環として、現在Spinnakerの動作検証をしています。検証中に不具合に遭遇し、調査や修正のためにコードを変更して動作確認する機会がありました。Architecture - Spinnakerが示す通り、Spinnakerはマイクロサービス化されており、10個以上のコンポーネントが協調して動作しているため、構成が若干複雑です。そのため、手元でコードを修正して動作確認するのに多少苦労しました。

この記事では、みなさん(将来の自分含む)が同じ苦労をしなくて済むよう、得られた知見について共有します。内容は、Spinnakerをある程度触ったことがある人向けになっています。

なお、遭遇した不具合についてはここでは詳しく説明しません。興味ある方は、以下のイシューとプルリクエストをご参照ください。

Spinnakerとは?

Spinnakerが何かについては、オフィシャルサイトのこの言葉に集約されています。

Spinnaker is an open source, multi-cloud continuous delivery platform for releasing software changes with high velocity and confidence

要約すると、オープンソースでマルチクラウド対応な継続的デリバリ(CD)のためのプラットフォーム、ということになります。

Spinnakerそのものに関する解説はこの記事の趣旨ではないので、詳細は他の記事に譲ります。

セットアップ済みSpinnakerの特定のコンポーネントのみ修正して動作確認する方法

ここから本題に入ります。

Spinnakerは複数のコンポーネントから構成されていますが、セットアップされたSpinnakerの特定のコンポーネントのみコードを修正して動作確認する方法について、ClouddriverDeckを例にして説明します。

Spinnakerのセットアップ

Install and Configure Spinnaker - Spinnakerにしたがい、Spinnakerのセットアップを行います。Halyardで行う必要がある設定はすべてこの段階で済ませておきます1)Halyardは、Spinnakerの設定、インストール、アップデートなどを行う管理用のCLIツールです

以降は、1. Install Halyard - Spinnakerの「Install on Debian/Ubuntu and macOS」セクションやそれ以降の説明に従い、Ubuntu 16.04上にセットアップ済みであることを前提として進めます。

Clouddriverの修正版への差し替え

Clouddriverとは、Spinnakerと各種クラウドサービスの連携を行うためのコンポーネントです。ここでは、HalyardによってセットアップされたClouddriverを、GitHubから取得したコードのものに差し替えて動かすための手順を説明します。

Clouddriverの停止

まず、HalyarでセットアップされたClouddriverを停止します。

sudo systemctl stop clouddriver

必要なパッケージのインストール

あらかじめ必要となるパッケージをインストールしておきます。ClouddriverはJavaでつくられているので、JDKが必要となります。

sudo apt-get update
sudo apt-get install -y openjdk-8-jdk

ソースコード取得

GitHubからClouddriverのソースコードを取得します。

git clone https://github.com/spinnaker/clouddriver.git
cd clouddriver

設定ファイルのコピー

Halyardによるセットアップで生成された設定ファイルをコピーします。

cp /opt/spinnaker/config/clouddriver.yml \
  ./clouddriver-web/config/clouddriver.yml

AWSと連携するするために、hal config provider awsコマンドでaccessKeyIdsecretAccessKeyを設定している場合、~spinnaker/.aws/credentialsに設定が保存されているので、ファイルをコピーしておきます。

sudo cp -r ~spinnaker/.aws/ ~/
sudo chown -R $USER  ~/.aws

Clouddriverのビルドと起動

GitHubから取得したソースコードに含まれるgradlewを実行して、Clouddriverをビルドし、起動します。

./gradlew

動作確認

SpinnakerのWeb UIにアクセスし、差し替え前と同様に動作するかどうか、確認します。

これで、HalyardでセットアップされたClouddriverの代わりに、GitHubからコードを取得したClouddriverを動かすことができました。ここまで来れば、Clouddriverのコードを好きなように変更して、動作確認することができます。

他のコンポーネントもほとんどが、Clouddriver同様Javaでつくられており、似たような手順で差し替えることができるはずです2)筆者は未検証ですが

Deckの修正版への差し替え

DeckとはSpinnakerのWeb UIを担うコンポーネントです。DeckはJavaではなくJavaScript(Node.js)でつくられているため、Clouddriverとは差し替える手順が異なります。ここでは、HalyardによってセットアップされたDeckを、GitHubから取得したコードのものに差し替える手順を説明します。

Deckの停止

Deckはapache2でサーブされているので、apache2を停止します。

sudo systemctl stop apache2

必要なパッケージのインストール

あらかじめ必要となるパッケージをインストールしておきます。DeckはNode.jsでつくられているので、Node.js関連パッケージが必要となります。

sudo apt-get install -y nodejs npm
sudo npm cache clean
sudo npm install n -g
sudo n v9
sudo ln -sf /usr/local/bin/node /usr/bin/node
sudo apt-get purge -y nodejs npm
sudo npm i yarn -g
sudo chown -R $USER ~/.config/

ソースコード取得

GitHubからDeckのソースコードを取得します。

git clone https://github.com/spinnaker/deck.git
cd deck

設定ファイルのコピー

Halyardによるセットアップで生成された設定ファイルをコピーします。

cp /opt/deck/html/settings.js ./settings.js 

Deckのビルドと起動

yarnを実行して、Deckをビルドし、起動します。

yarn
yarn run start

何も指定しないと、127.0.0.1でリッスンします。リッスンするIPアドレスを変更したい場合は、環境変数DECK_HOSTで指定します。

DECK_HOST=0.0.0.0 yarn run start

動作確認

SpinnakerのWeb UIにアクセスし、差し替え前と同様に動作するかどうか、確認します。

これで、HalyardでセットアップされたDeckの代わりに、GitHubからコードを取得したDeckを動かすことができました。ここまで来れば、Deckのコードを好きなように変更して、動作確認することができます。

以上、Java製のClouddriverと、JavaScript製のDeckを例に、セットアップ済みSpinnakerの特定のコンポーネントのみを修正して、動作確認する方法について説明しました。

コード修正したコンポーネントをセットアップの段階から動作確認する方法

Halyardのコードを修正したり、他のコンポーネントのセットアップに関連する部分のコードを修正したりした場合には、これまで説明してきたようなセットアップ済みの一部のコンポーネントを差し替える方法では動作確認することができません。

コードを修正したHalyardや他のコンポーネントを使ってセットアッププロセスを実行し、動作確認する方法については、次回に説明します。

脚注

脚注
1 Halyardは、Spinnakerの設定、インストール、アップデートなどを行う管理用のCLIツールです
2 筆者は未検証ですが