Spinnakerのコードを手元で修正して動作確認する方法(その1)
mizzy
こんにちは。業務委託で開発支援Gのお手伝いをしているmizzyです。
お手伝いの一環として、現在Spinnakerの動作検証をしています。検証中に不具合に遭遇し、調査や修正のためにコードを変更して動作確認する機会がありました。Architecture - Spinnakerが示す通り、Spinnakerはマイクロサービス化されており、10個以上のコンポーネントが協調して動作しているため、構成が若干複雑です。そのため、手元でコードを修正して動作確認するのに多少苦労しました。
この記事では、みなさん(将来の自分含む)が同じ苦労をしなくて済むよう、得られた知見について共有します。内容は、Spinnakerをある程度触ったことがある人向けになっています。
なお、遭遇した不具合についてはここでは詳しく説明しません。興味ある方は、以下のイシューとプルリクエストをご参照ください。
- AWS settings configured by halyard to be picked up in settings.js · Issue #3271 · spinnaker/spinnaker
- feat(halconfig): Have AWS settings configured by halyard to be picked up in settings.js by mizzy · Pull Request #5681 · spinnaker/deck
- feat(deploy): Add default AWS settings to deck by mizzy · Pull Request #1024 · spinnaker/halyard
Spinnakerとは?
Spinnakerが何かについては、オフィシャルサイトのこの言葉に集約されています。
Spinnaker is an open source, multi-cloud continuous delivery platform for releasing software changes with high velocity and confidence
要約すると、オープンソースでマルチクラウド対応な継続的デリバリ(CD)のためのプラットフォーム、ということになります。
Spinnakerそのものに関する解説はこの記事の趣旨ではないので、詳細は他の記事に譲ります。
- SpinnakerによるContinuous Delivery - Mercari Engineering Blog
- 「継続的デリバリ」(CD)を実現できるコンテナクラスタ管理ツール「Spinnaker」 | さくらのナレッジ
- Kubernetesで安全にアプリケーションをデプロイするCDツール"Spinnaker"とは | Think IT(シンクイット)
セットアップ済みSpinnakerの特定のコンポーネントのみ修正して動作確認する方法
ここから本題に入ります。
Spinnakerは複数のコンポーネントから構成されていますが、セットアップされたSpinnakerの特定のコンポーネントのみコードを修正して動作確認する方法について、ClouddriverとDeckを例にして説明します。
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コマンドでaccessKeyId
とsecretAccessKey
を設定している場合、~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や他のコンポーネントを使ってセットアッププロセスを実行し、動作確認する方法については、次回に説明します。