この記事は セゾンテクノロジー Advent Calendar 2024 シリーズ2 24日目の記事です。
シリーズ2は HULFT10 のエンジニアによる投稿をお届けします。
どんなテスト
- テストモジュールからAPI ServerにリクエストすることでAPI Serverから各種の対向サーバにリクエストするe2eテストです。
現行のテスト構成
- Windows環境しか動作できないAPI Server(テスト対象)とテストモジュール
- Windowsの対向サーバx2
- Linuxの対向サーバx1
今の課題
テスト対象の不具合によってテストが中断される場合がある。そしてテストが中断することで対向サーバの状態をテスト前に戻すことができなくなってしまう。CIとして動作するテストなので、対向サーバの整理作業を行う前に自動にテストが走った場合、必ず失敗することになる。
なんでコンテナ化に対応できる
- 対向サーバをコンテナ化することで毎回のテストは新たなコンテナとして立ち上がるので、前回のテストによる影響が解消できる
コンテナ化にするための課題
- WindowsコンテナとLinuxコンテナの混合運用による課題
- 同時運用するのにLinux環境かWindows環境のどっちが可能なのか
- Docker Desktopを利用せず、Windows環境でdockerの運用方法
同時運用するのにLinux環境かWindows環境のどっちが可能なのか
結論から言うとWindows環境のほうが対応しやすい。
理由はWindowsにはWSLがあるからです。
WSLを有効化することでWindows環境でも簡単にdockerを利用することができる。
Docker Desktopを利用せず、Windows環境でdockerの運用方法
- Hyper-Vを有効化する
Enable-WindowsOptionalFeature -Online -FeatureName containers -All Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
- dockerをCLIで運用するためのバイナリファイルをダウンロードすること
- サービス登録
dockerd --register-service Start-Service docker
これでwindowsでもコンテナを運用することができた。
WSLの運用方法
こちらはネット上に大量記事があったため、割愛します。
結果
github actionsでCIが動くたびにwindows runnerで対向サーバのWindowsコンテナとLinuxコンテナが立ち上がるとこができた。テストモジュールとテスト対象API Serverはコンテナ実行ではなく直接実行するして各コンテナに設定したポート経由でリクエストする。
テストモジュールをコンテナ化できていないが、一旦困った問題が対応できたので、ここで区切りして残る対応を残課題として継続に調査する。
残課題
- WSL上のLinuxコンテナとホストのWindowsコンテナ間の通信はできない
- 原因:異なるネットワークインターフェース
残課題に向けてどうアプローチしていくか
- 解決案1
- docker swarmを利用することで異なるdocker engineの間のネットワークを確立することができる
- 懸念点
- WSLとホストのswarm設定がうまくできなくて調査中