テストkubectlのプラグインを開発していると、ユニットテストだけでなく、本物のKubernetesクラスタを利用したテストが欲しくなります。プラグインの振る舞いが複雑な場合は自動テストがあると安心してリリースできます。本稿では、本物のKubernetesクラスタを利用してkubectlプラグインをテストする方法を考えます。本物のクラスタを利用してプラグインをテストするための構成を下図に示します。必要なのは以下の3つです。テスト対象のプラグインテスト対象が依存するクラスタやリソーステストシナリオテストの流れは以下のようになります。必要なリソースをデプロイする。kubectlを実行する。pluginが実行される。実行結果が期待通りか検証する。このようなテストはプラグインのリリース前に手動でやっていることが多いと思います。Requestの契機で不具合を検出できるクリーンな環境でテストできるので信頼性が高い手動では手間のかかる組合せテストが可能になる(複数のクラスタバージョンなど)といったメリットがあります。kubectl-treeのテストを書いてみるここでは、kubectl-treeというプラグインをテストする例を考えます。これはクラスタにあるリソースを木構造で表示してくれる便利なプラグインです。簡単のため、テストシナリオはMakefileで書くことにします。Makefileをよく知らない方はシェルスクリプトだと思って読んでみてください。クラスタの作成とリソースのデプロイまずは新しいクラスタを作成するターゲットを定義します。Kindを利用すると、Docker上に簡単にクラスタを作成できます。$(KUBECONFIG)これでmakeを実行すると新しいクラスタが作成される仕組みができました。実行にはDockerとKindが必要です。/kubectl-tree-e2e-test/output/kubeconfig.yamlテストを行うにはクラスタだけでなく適当なリソースも必要です。ここではechoserverをデプロイすることにします。applyコマンドを追記します。deployment/echoserverこれで、テストに必要なクラスタとリソースが揃いました。treeコマンドを実行すると以下のような結果が表示されます。46sここでは簡単のため、grepで必要な文字列が表示されているかチェックします。複雑な条件判定が必要な場合はスクリプトを書く方がよいでしょう。$(OUTPUT_DIR)/actualmakeを実行してみましょう。以下のようにテストに合格するはずです。4m55sこれでローカルでのテストは完了です。CIで実行する品質を継続的に向上させるにはCIが不可欠です。Actionsでテストを実行します。18.04にはすでにKindがインストールされていますが、バージョンが古いので改めて最新版をインストールすることにします。CIの最初のステップでは以下のツールをインストールします。Kindkrewkubectl-treeそれからmakeを実行します。最終的に、workflowは以下のようになります。makeここまでの内容は下記のリポジトリにまとめてあります。CIの実行時間や実行結果が気になる方はぜひご覧ください。OPを利用したテストを下図の構成で行っています。pluginのテストを実現できます。2019の13日目です。Requestを作成する2020-01-20アプリケーションの開発フローとGitOpsArchivesSearchはてなブログをはじめよう!int128さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。