CI / CD
継続的インテグレーションと継続的デプロイ(CI / CD)パイプラインにより、ローカルと Google Cloud 上のテスト環境で関数を動かすことができます。
ローカルでの開発を完了したら、Cloud Build などの CI / CD プラットフォームを構成し、既存の Cloud Functions のテストを継続的に行うことができます。継続的にテストを行うことで、コードが引き続き正常に機能することと、依存関係が最新の状態に保たれていることを確認できます。Cloud Functions は自動的に更新されません。GitHub、Bitbucket、Cloud Source Repositories などのソース リポジトリから関数を自動的にテストし、再デプロイするように、CI / CD パイプラインと Cloud Build で作成したビルドを構成することもできます。
始める前に
このガイドを始める前に環境を設定してください。
テスト フレームワーク
テスト フレームワークは自動テストの実行環境を提供します。デプロイあたりのテスト量を最小限に抑え、十分にテストされたビルドを本番環境にデプロイできます。Mocking フレームワークを使用すると、外部依存関係を再現できます。 外部依存関係とは、関数がその関数に含まれていないコード部分に依存している関係を意味します。
Node.js
このガイドの例では、テスト用のフレームワークとして Mocha を使用します。また、外部依存関係を疑似的に再現するため、モックアップ フレームワークとして Sinon を使用します。外部依存関係とは、関数がその関数に含まれていないコード部分に依存している関係を意味します。外部依存の一般的な例としては、npm、PyPI、Maven などのパッケージ マネージャーを使用してインストールされた Google Cloud サービスやライブラリなどがあります。
Python
このガイドの例では、テスト用のフレームワークとして Pytest を使用します。また、外部依存関係を疑似的に再現するため、モックアップ フレームワークとして unittest を使用します。
外部依存関係とは、関数がその関数に含まれていないコード部分に依存している関係を意味します。外部依存の一般的な例としては、pip などのパッケージ マネージャーを使用してインストールされた Google Cloud サービスやライブラリなどがあります。
Go
このガイドの例では、標準ライブラリのtesting
パッケージを使用してテストを実行します。ただし、システムテストには外部依存関係があります。
外部依存関係とは、関数がその関数に含まれていないコード部分に依存している関係を意味します。外部依存関係の一般的な例としては、他の Google Cloud サービスやダウンロードした他のパッケージなどがあります。
Java
このガイドの例では、テストの実行に JUnit ライブラリを使用します。また、外部依存関係を疑似的に再現するため、モック フレームワークとして Mockito を使用します。外部依存関係とは、関数がその関数に含まれていないコード部分に依存している関係を意味します。
Cloud Build の設定
以下の cloudbuild.yaml
ビルド構成ファイルを使用して、ビルドトリガーを使用したビルドの自動化の説明に従うことで、関数を自動的にテストしてデプロイするように Cloud Build を構成できます。
Node.js
Python
Go
Java
次のように置き換えます。
[YOUR_DEPLOYED_FUNCTION_NAME]
は、Google Cloud Console、Google Cloud CLI、URL で使用する Cloud Functions の関数の名前で置き換えます。[YOUR_FUNCTION_TRIGGER]
は、適切なトリガー値(--trigger-http
など)で置き換えます。[YOUR_RUNTIME]
は、ランタイム ID(nodejs10
など)で置き換えます。[YOUR_FUNCTION_NAME_IN_CODE]
は、コード内に記述されている関数名で置き換えます。--entry-point
は、[YOUR_DEPLOYED_FUNCTION_NAME]
以外の値を使用する場合にのみ必要です。function/dir/from/repo/root
は、関数と依存関係のリストを含むディレクトリのパスで置き換えます。
ビルドとデプロイに必要な権限の付与
Cloud Build を使用して Cloud Functions をデプロイする場合は、Cloud Build サービス アカウント(PROJECT_NUMBER@cloudbuild.gserviceaccount.com
)に権限を付与する必要があります。Cloud Build サービス アカウントは、ユーザーに代わってビルドを実行する場合に使用されます。
プロジェクト番号を確認します。
gcloud projects describe PROJECT_ID
プロジェクトの識別方法について詳しくは、プロジェクトの作成と管理をご覧ください。
Cloud Build サービス アカウントが Cloud Functions ランタイム サービス アカウントとして機能します。
gcloud iam service-accounts add-iam-policy-binding PROJECT_ID@appspot.gserviceaccount.com \ --member serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/iam.serviceAccountUser
Cloud Functions デベロッパーのロールを Cloud Build サービス アカウントに割り当てます。これにより、Cloud Build で Cloud Functions をデプロイできます。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role roles/cloudfunctions.developer
詳細については、Cloud Functions IAM のロールをご覧ください。
Cloud Build が有効になっているリポジトリに push するたびに、cloudbuild.yaml
ファイルの手順が実施されます。