GitHub Actions と Google Cloud Deploy が連携
Google Cloud Japan Team
※この投稿は米国時間 2023 年 5 月 10 日に、Google Cloud blog に投稿されたものの抄訳です。
Google Cloud では、Google Cloud Deploy を使用してソフトウェアを本番環境にデプロイできます。このフルマネージドのデプロイ サービスを利用すれば、セルフホスト型プラットフォームのスケーリングやメンテンナンスを繰り返し行う手間が省け、かつ、Cloud Deploy に組み込みの制御や制約によって、パイプラインを確実かつ安全な状態に保ち、信頼性を確保することができます。
Cloud Deploy では通常、デリバリー パイプラインを使用して、テスト環境から本番環境に至るまで、複数のターゲット環境で順番にリリースを進めるため、頻繁かつ手軽に本番環境へのリリースを行えます。また、Cloud Deploy ではデリバリー指標がデフォルトで設定されているので、ソフトウェア デリバリーの成功を評価し、徐々に向上させることができます。
一方、Google Cloud では、ソース管理や、ソフトウェア開発の汎用ハブとして GitHub を併用している場合もあるかもしれません。GitHub では、ソース管理という基本的な用途のほか、GitHub Actions を使って、コードのコンパイルや、アーティファクトのビルド、ソフトウェア デリバリーの主な処理の自動化を行えます。そのため、Google Cloud では GitHub Actions ライブラリを管理して、お客様がこれらを使ってワークフローを自動化できるようにしてきました。
最近、お客様との会話のなかで、ソフトウェアのデプロイ専用ツールとのインテグレーションを求める声が目立つようになりました。現状を鑑み、こうした要望に応えて、このたび GitHub Actions と Google Cloud Deploy の連携を可能にする新しいインテグレーションを追加したことをお知らせいたします。これにより、GitHub Action の継続的インテグレーション(CI) と、Cloud Deploy の継続的デリバリー(CD)という両方の利点を最大限に活かすことが可能となります。
create-cloud-deploy-release は、他の GitHub Actions と同じく、既存のビルド パイプラインに簡単に追加して、Google Cloud に安全に接続できます。
GitHub Actions から Cloud Deploy への引き継ぎを含む典型的なワークフローは、以下に示すステージから構成されます。これらのステージは、アプリケーション コンポーネントの単体テストや、その他の分離したコンポーネント テストが正常に完了した後に実行されます。
アーティファクト ビルド ステージ: 言語に特化したツール(gradle、sbt、npm など)を使用して、アプリケーション アーティファクトをビルドします
パッケージ化ステージ: アプリケーション アーティファクトを、他の必須コンポーネントや依存関係とバンドルします
コンテナ化ステージ: アプリケーション パッケージを含むコンテナ イメージを作成します
リリース作成ステージ: Cloud Deploy GitHub Action を使用して、ビルド済みコンテナ イメージのリリースを作成します
ロールアウト ステージ(1..n): GKE、Cloud Run、Anthos の一連のターゲット環境へのリリースを進めます
リリースの作成が完了すると、Cloud Deploy に制御フローが引き継がれ、最初のターゲット環境(通常、“dev” または “test”)へのロールアウトが実行されます。この環境で追加のテストと検証が行われた後、デリバリー パイプラインの各ターゲット環境、そして本番環境まで、リリースのデプロイが順番に進められます。
では、ワークフローの例を詳しく見ていきましょう。ここで取り上げるワークフローの例の完全版は、Google Cloud GitHub Action のワークフロー サンプル リポジトリにあり、個々のプロジェクトで自由に使うことができます。
まず、checkout と auth の各アクションを使って、リポジトリをチェックアウトし、Google Cloud に対する認証を行います。ここで、OAuth との Workload Identity 連携を使うことで、パワフルな認証情報を Google Cloud 外にエクスポートすることを回避している点にご注意ください。
次に、gcloud-setup という Google GitHub Action を使って、Google Cloud SDK のインストールと構成を行います。続けて、Docker でビルド済みイメージの格納に Google Cloud Artifact Registry が使用されるように構成を行います。
次に、アプリケーションをビルドし、コンテナ イメージを作成して、Google Cloud Artifact Registry に push します。
このワークフロー例では、デリバリー パイプラインのサンプルを作成しましたが、実際には、アプリケーション ビルド パイプラインの外でパイプラインやターゲットを管理することをおすすめします。そのためには、YAML で宣言するか、Terraform などの Infrastructure as Code ツールを、Cloud Deploy に対応している Google Cloud プロバイダ と合わせて使用します。
最後に、create-cloud-deploy-release を使って名前を生成し、リリースを作成します。
上記の例に示されるように、Cloud Deploy のリリースはレジストリ内のコンテナ イメージを参照するだけで作成可能なため、継続的デリバリーを簡単に実現できます。
これで、各ターゲット環境にリリースを順番にデプロイする準備が整いました。デプロイにあたっては、同時デプロイ(プレビュー版)、ロールアウトの承認、デプロイの検証など、デプロイに特化した機能を利用できます。
使い勝手の良い GitHub Action と、継続的デリバリーに特化した Cloud Deploy を組み合わせて使用することで、両者の利点を活かしながら、本番環境に確実にデリバリーできます。Cloud Deploy GitHub Action とそのドキュメントはこちらに公開されています。ここで取り上げたサンプルの全体は、こちらでご覧ください。Cloud Deploy の各種機能のチュートリアルについては、こちらを参照してください。ぜひ今すぐデプロイを開始しましょう。
- Google Cloud、ソリューション アーキテクト Henry Bell
- プロダクト マネージャー S. Bogdan