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