HoteKanの開発担当者です。
cloud buildを使うとfirebaseへのデプロイも非常に簡単にできます。
また、無料枠も大きく、GitHubとの連携も可能なので、かなり低コストに運用可能です。
Cloud Buildの使い方
cloud buildの使い方は「Google Cloud Build で CI/CD! ~ Firebase Hosting 編 ~」が参考になります。
以下では上記記事に記載のないGitHubとの連携と、ファイルの暗号化について説明します。
Cloud BuildとGitHubとの連携
Cloud BuildではGitHub上のリポジトリへのコミットやタグづけをトリガーにしてビルド、デプロイを自動実行することができます。
GitHubへ該当するコミットやタグをプッシュすると自動で該当ソースを読み込んでビルドステップを実行してくれます。
やり方は公式ガイドに書いてある通りです。
Cloud Platform Consoleのページで指示に従って入力するだけで簡単にトリガーを設定できます。
Cloud Buildでのファイルの暗号化と復号化
リポジトリに含めるファイル内にトークンなどの機密情報を含める場合の暗号化、復号化の方法は上記記事に詳しく説明されています。
一方でファイルをまるごと暗号化して、リポジトリに含め、ビルド実行時に復号化したいケースもあります。
例えばenvファイルに機密情報を入れていたり、firebase functionsでkeyファイルを含める場合などです。
以下がその手順です。
1.暗号鍵の作成とCloud Buildへの復号権限の付与
キーの作成、Cloud Buildサービスアカウントへのキーへのアクセス権の付与は上記記事と同じ手順です。
Cloud KMS の API を有効にするのを忘れないようにしましょう。
2.ファイルの暗号化
暗号化したいファイルは当然gitの管理対象には含めません。かわりに下記コマンドで暗号化したファイルを含めます。下記は.env
を暗号化する例です。
gcloud kms encrypt \
--plaintext-file=.env \
--ciphertext-file=.env.enc \
--location=global \
--keyring=[KEYRING-NAME] \
--key=[KEY-NAME]
[KEYRING-NAME]
と[KEY-NAME]
は事前に作成したキーリングとキーの名前を指定します。
.env
ファイルの内容が変わるたびに手動で暗号化するのは面倒です。script化してpre-push hookに登録するか、またはgit-configのfilterを使って透過的に暗号化、復号化することもできます。
3.ファイルの復号化
暗号化したファイルはCloud Buildの実行時に復号化される必要があります。
cloudbuild.yamlに当該ファイルを使うステップより前のステップに以下を記載します。
steps:
- name: gcr.io/cloud-builders/gcloud
args:
- kms
- decrypt
- --ciphertext-file=.env.enc
- --plaintext-file=.env
- --location=global
- --keyring=[KEYRING-NAME]
- --key=[KEY-NAME]
# more steps here