Cloud Build内でCLIツールを使う

Google Cloud Platformのビルドサービス、Cloud Buildは複数のコンテナを連携させてビルドしていくのが特徴です。 各ビルドステップは異なるコンテナで実行され、次のコンテナへ引き継ぐ際にワーキングディレクトリ以外のファイルは破棄されてしまうので、他のビルドサービスのようにビルド事前ステップでパスの通った場所にインストールしておいて、次のステップで使うことはできません。この制約をNode.jsとPythonCLIツールを使う場合に解消する方法です。

大手クラウドCLIツール

三大クラウドCLIツールはそれぞれ公式にDockerイメージが提供されているため、独自にインストールしなくてもそれを使うことができます。

Node.jsベースのツールのインストール

静的Webサイトジェネレータ hexo を例にします。

hexoの公式サイトでは、 npm install hexo-cli -g のようにCLIツールをグローバルインストールして使うように書かれています。

単にローカルにインストールするとCLIを使うときのパスが長くなってしまうので、タスクもpackage.jsonに追記することで npm run hexo ... のように簡潔にhexoのCLIを呼び出せるようにしました。

初めにpackage.jsonに追記して

{
  "name": "Hexo_site",
  "version": "0.0.0",
(略)
  "devDependencies": {
    "hexo-cli": "1.1.0"
  },
  "scripts": {
    "hexo": "hexo"
  }
}

Cloud Build内で npm install --no-progress を実行して、必要なパッケージ群をインストールします。

次のステップで、hexo generateの代わりにnpm run hexo generateを実行すればHTMLファイルが得られます。

Pythonベースのツールのインストール

AWS CLIを例にします。これもNode.jsと同じように、/workspaceにインストールします。 環境変数 PYTHONUSERBASE=/workspace を設定した上で、pip installを実行します。

pip install --user --progress-bar off awscli

こちらは/workspace/bin/aws s3 ...のように実行することができます。

補足: AWS認証情報の保存

AWSのIAMシークレットは安全に保存しておく必要があるので、Cloud KMSを使って暗号化し、Cloud Buildのビルド時に復号して使うようにします。Google Cloudの「Step3. Cloud KMSでトークンを暗号化」の記事を見てください。