OPAのテストをCircleCIに乗せる
OPAのPolicyをテストする方法について前回は紹介しました!
OPAのバイナリさえあれば opa test
コマンドで簡単にテストが実行できます。
ということでOPAのPolicyをCIに乗せて継続的にPolicyのテストができるようにしてみます。
どんなCIでもできますが、今回はCircleCIで試してみたのでその方法を共有します。
リポジトリの準備
Policyを書いたRegoファイルは 前回 のものをそのまま使います。
ファイルの構成は以下のとおり。これがGitHubのリポジトリに置いてあることを前提にします。
. ├── iam.rego └── iam_test.rego
ここに .circleci/config.yml
を作ります。
mkdir .circleci # エディタで編集 vim .circleci/config.yml
YAMLの中身は↓
version: 2 jobs: build: docker: - image: circleci/buildpack-deps:jessie steps: - checkout - run: name: Setup Environment Variables and Version file command: | echo 'export OPA_VERSION="0.10.6"' >> $BASH_ENV echo "${OPA_VERSION}" > _opa_version_ - restore_cache: keys: - opa-cache-{{ checksum "_opa_version_" }} - run: name: Download OPA command: | if [ ! -f .bin/opa ]; then mkdir .bin wget -O .bin/opa https://github.com/open-policy-agent/opa/releases/download/v${OPA_VERSION}/opa_linux_amd64 sudo chmod +x .bin/opa fi - run: name: Test Policies command: .bin/opa test . - save_cache: key: opa-cache-{{ checksum "_opa_version_" }} paths: - .bin
これで概ね準備完了です!
書いてる内容はちょっと多いのですがやってることは下の通り。
- リポジトリのチェックアウト
- ダウンロードするOPAのバージョンを環境変数に設定
- OPAバイナリのキャッシュがあれば復元する
- キャッシュが無ければダウンロードして実行権限与える
- Policyを
opa test
でテストする - 次から再利用できるようにOPAバイナリをキャッシュしておく
CircleCIを設定
以下の公式ドキュメントにもありますが、CircleCIに対象となるリポジトリを追加します。
下の画面に表示されている「Start building」をクリックすることでCIが走ります!
正常にCIが走ればテストも通るはずなので、下のように成功画面になります。
では、わざとテストが失敗するように下のように iam_test.rego
を編集しましょう!
新しいbranchで変更し、pushしてからPRを作ってみます。
pushした時点でCIが走るのでPRをGitHub上で作るころには失敗して、下のような画面になっているはずです!
このように、CIに乗せて継続的にPolicyのテストも実行していくことができます。
テスト好きにはたまらないですね!僕はテスト大好きなのでワクワクしてしまいます。
今回のコードは以下リポジトリに置いてますので、参考になればと思います!
おまけ
バッジもREADMEに載せてちょっと今風にしてみました!
CircleCIでプロジェクトの Settings に行って、Status Badgesに移動します。
すると、README.mdとかに貼り付けられるCircleCIのステータスバッジが下図のように記載されています。
これを貼り付ければ、下のようにCIの状況が表示されるバッジを載せることができます!
こういう取り組みも地味にモチベーションに繋がったりするので大事にしたいです。