概要
CircleCIでVAddyのPrivatenetを使用してみようと思ったのですが、意外とハマったのとあまり説明している記事がなかったので備忘録的に記事を書いてみようと思います。
本記事で説明すること
- VAddyをCircleCI上で使用する時に必要な設定関連
本記事で説明しないこと
- VAddyの契約方法やPrivateNetの事前設定について
- VAddyでのシナリオ作成方法
- VAddyの機能説明
- CircleCIのFingerprint設定とか細かい話
手順
- 1. シナリオの作成
- 2. .circleci/config.yml の生成
- 2.1. containerの種類を定義
- 2.2. VAddy依存パッケージのインストールを定義
- 2.3. 環境変数の設定を定義
- 2.4. アプリケーションの依存パッケージ準備を定義
- 2.5. SSHの事前準備設定を定義
- 2.6. アプリケーションのビルド、および起動を定義
- 2.7. VAddyとの接続、およびスキャンの実行を定義
1. シナリオの作成
事前にシナリオを作成しておいてください。
2. .circleci/config.yml の生成
jobをconfigに記載しましょう。
以降は.circleci/config.yml
に記述する定義内容と説明です。
2.1. containerの種類
今回はVMではなくdocker containerを使用します。
jobs:
penetration-check:
docker:
- image: circleci/node:lts
working_directory: ~/workspace
steps:
- checkout
2.2. VAddy依存パッケージのインストール
VAddyのPrivatenetツールはJAVAで動作するプログラムらしいので、openjdkが必要になります。
また、使用しているcontainerはdebian(ubuntu)なのでaptコマンドでパッケージの更新、およびインストールを行います。
- run:
name: VAddy依存パッケージのインストール
command: sudo apt-get update && sudo apt-get install openjdk-8-jre
2.3. 環境変数の設定
Node.jsのyarnを使っていたりglobalにnpmのライブラリを入れている(pm2とか)場合など、環境変数の設定は以下のように設定します。
もちろんですがsourceコマンドで再読み込みするなどの作業は不要。
ローカルマシンのように .bash_profile
や .bashrc
には直接書き込まず$BASH_ENV
に対してechoで設定してあげる必要があるといった感じ。
- run:
name: 環境変数の設定
command: |
echo "export PATH=/usr/local/lib/node_modules:/usr/local/bin:$PATH" >> $BASH_ENV
2.4. アプリケーションの依存パッケージ準備
ここまでの工程ですでに依存パッケージをインストール、キャッシュしている場合は本作業は不要です。
- run:
name: パッケージインストール
command: yarn install
2.5. SSHの事前準備設定
VAddyのPrivateNetによるスキャンはポートフォワーディングによって実現しており、sshをスクリプト内で実施しているようです。
ただ、通常SSHの初回接続ではknown_hostsへの書き込み時に確認が表示されますが、CircleCIは対話型のツールではありませんので "Yes“ができません。
また、こういった自動化でよく使われるYesコマンドは機能しません。(できないと知らずにハマりました)
そのため、sshで本来行われるHostKeyCheckを無効化する必要があります。
- run:
name: SSH settings
command: mkdir ~/.ssh/ && echo -e "Host pfd.vaddy.net\n\tStrictHostKeyChecking no\n" > ~/.ssh/config
2.6. アプリケーションのビルド、および起動
もしコンパイルやトランスパイルが必要なアプリの場合、ここでビルドするようにしてください。
- run:
name: アプリのビルド
command: |
yarn build
また、今回webアプリケーションをテストするわけですが、WEBアプリは性質上、実行結果は永遠に返ってきません。
そのためbackgroundで実行する必要がありますが、よく使われる&
コマンドやnohup
コマンドはCircleCIでは使用できないようなので アプリケーション起動コマンドにbackground
設定を付与します。
- run:
name: アプリの起動
command: yarn start
background: true
また、backgroundオプションでは実行結果が返らないので、ウェイト処理を入れないとアプリケーションが立ち上がる前に次のタスクが走ってしまいます。
そのため、以下のようにsleepコマンドを実行する必要があります。
- run:
name: スリープ
command: sleep 5
2.7. VAddyとの接続、およびスキャンの実行
最後にスキャンを実行。
- run:
name: VAddyとの接続、及びスキャン
command: curl localhost:3000/health && cd go-vaddy-master/privatenet && ./vaddy_privatenet.sh connect && ./vaddy_privatenet.sh scan
実行結果で異常が見つかった場合はステータスコードが1で返ってきますのでジョブはエラーとして処理されます。
最後に
設定内容、説明に誤りがある場合は是非コメントでお知らせいただけると嬉しいです。
仲間を募集しています!
ZEROBILLBANKでは一緒に働く仲間を募集中です。