LinuxでGoogle Cloud Storageをマウント — NetDriveでCIパイプライン構築
NetDriveでUbuntu上のGoogle Cloud StorageバケットをローカルパスとしてマウントしCIランナーやビルドエージェント向けにGCSアクセスを設定する方法を解説します。
Ubuntuで動くビルドエージェントが、Google Cloud Storageバケットに保存されたビルド済みコンテナレイヤーや参照用データセットを読む必要があるとき、現在のパイプラインステップは gsutil cp を実行してから待つだけになっていることが多い。実際のテストスイートが始まる前に、ジョブごとに何ギガバイトもダウンロードしていて、しかもその固定データの半分は実行のたびに変わらない。そのGCSバケットをランナー上のパスとしてマウントすれば、このコピー手順自体が不要になる。パイプラインはディスク上の他のディレクトリと同じように、バケットを直接読み込めるようになる。

UbuntuでGCSをマウント — ダウンロード手順を省略
NetDrive を使えば Google Drive、OneDrive、S3、SFTP、WebDAV などが Windows と macOS でネイティブドライブとして表示されます — 同期も、まるごとダウンロードも不要です。
- クライアントライブラリを変更せずに、バケット内のオブジェクトを通常のファイルパスとして読み取れる
- CIランナーで既に使っているUbuntu 16.04以降のビルド環境でそのまま動作する
- 自動マウントにより、ジョブ開始前にパスが準備完了状態になる
無料トライアル。永久ライセンスとサブスクリプションプランあり。
GCSサポートとLinuxにおける「実験的」の意味
NetDriveは初期リリースからGoogle Cloud Storageに対応しており、バージョン3.15.450で追加されたMIMEタイプ処理も含まれる。この部分についてはWindows、macOS、Linuxのすべてで同一だ。GCS接続ロジックもバケットの閲覧方法も変わらない。
一方、Linuxビルド自体は事情が異なる。NetDriveのLinuxリリースはgithub.com/NetDrive/installerから配布されており、安定した本番グレードのリリースではなく実験的なものと位置づけられている。動作対象はUbuntu 16.04以降だ。この違いはCI用途では重要になる。LinuxランナーでのGCSマウントは、ビルドエージェントやステージングジョブ、社内ツール向けとして扱い、顧客向け本番サービスのストレージ層としては使わないほうがよい。安定した完全サポートの体験がチームに必要なら、WindowsまたはmacOSが推奨環境となる。

バケットをマウントポイントとして設定する
使用しているUbuntuバージョン向けのGitHubリリースからNetDriveをインストールしたら、GCSバケットの追加は他のプロバイダーと同じ手順で行える。
- Open NetDrive → + Add Drive をクリックし、プロバイダー一覧から Google Cloud Storage を選択する。
- 対象プロジェクトとバケットの所有権(または読み書き権限)を持つGoogleアカウントでサインインする。
- マウントしたいバケットを選び、マウントポイントを割り当てる。Windowsのドライブレターではなく、
/mnt/gcs-fixturesのようなディレクトリパスになる。 - 起動時にドライブを自動マウントするかどうかを選択する。これは、誰もログインしていない状態でジョブの合間に再起動されうるCIランナーにとって重要な設定だ。
マウントが完了すると、バケットは他のディレクトリと同じようにファイルシステム上に現れる。/mnt/gcs-fixtures/snapshots/ を参照するテストランナーは、そのファイルが実際にはCloud Storage上にあることを意識する必要すらない。

ジョブが依存する前にマウントを検証する
マウントが成功したと決めつけてテスト実行の途中で失敗するCIジョブは、セットアップの段階で失敗するジョブよりも厄介だ。パイプラインを先に進める前にマウント状態を確認しよう。マウントポイントに対する単純な ls や、NetDriveの nd3cmd コマンドラインツールによるチェックで、バケットが実際に接続され読み取り可能であることを、下流の処理が使い始める前に確かめられる。

マウントが空のまま表示される、あるいはジョブがそこで止まってしまう場合は、Add Drive の手順をやり直し、認証情報を再確認してほしい。この段階で起きる失敗のほとんどは、バケット自体の問題ではなく、期限切れまたは失効したGoogleアカウントのトークンに起因している。
まとめ
Ubuntu上のビルドエージェントや社内ツールにとって、NetDriveでGCSバケットをマウントすることは、オブジェクトストレージを通常のパスに変え、多くのCI設定がデフォルトとする「ダウンロードしてから実行する」パターンを排除することを意味する。パイプラインがGoogle Cloud Storageの代わりにAmazon S3から読み込む場合は、Mount Amazon S3 on Linux with NetDriveで同等のセットアップ手順を確認できる。また、NetDrive on Ubuntu Linuxでは、どのプロバイダーを接続する場合にも当てはまるインストールの詳細を扱っている。すでにS3テストフィクスチャでこれを行っているチームには、S3 Test Fixtures for CI Teamsもより広いパターンの参考になるだろう。
— Kai, NetDrive