こんにちは、KIYONOインターン生です。
本日はGCP(Google Cloud Platform)で簡単にCI/CDを組む方法を解説していきます。
最近よく耳にするCI/CDという言葉、よく理解せず利用している方も多いのではないでしょうか?
そんな方のために、今回CI/CDの基礎から実践を含めてご紹介していきたいと思います!
1. CI/CDとは
CI/CDとは、「Continuous Integration/Continuous Delivery」の略であり、日本語では継続的インティグレーション/継続的デリバリーと呼ばれています。CI/CDを開発プロセスに導入することにより、コードの品質チェックはもちろん、バグの発見、テストの自動化、自動化デリバリー、デプロイメントが実現し、開発者やチーム全体の生産性の向上にも非常に効果があると知られている開発手法です。
1.1 CI/CDのメリット
現在、アプリケーションの開発ではアジャイル開発が非常に注目されています。アジャイル開発は基本的に開発リリースのサイクルが短期間のため、コード変更やテストの回数が増加してしまうのが現実です。そこで、「CI/CD」による自動化を開発プロセスの一種として取り入れることで、サービスやアプリの変化に対する対応や管理、コミットからリリース作業にかかる時間の短縮と変更に応じたテストの実施を容易にできるようになるなど、開発チーム全体の生産性向上に効果があります。
1.2 CI/CDのフロー
- 開発者がソースコードを変更し、リポジトリ(GitHubなど)にコミットする
- コミットをトリガーとして、CIサーバー(Cloud Buildなど)が自動的にビルドプロセスを実行
- ビルドに成功したら、自動的に単体テスト・統合テストを実行
- テストに成功した場合、CD(継続的デリバリー)では成果物をリリース用のアーティファクトとして保管
- CD(継続的デプロイメント)ではさらにアーティファクトを自動的に本番環境にデプロイ
- デプロイ結果は開発者に通知され、必要に応じて監視・ロールバックを実施
- 以上のプロセスを繰り返し、頻繁なインテグレーションとデリバリーを実現
2. 今回使用するクラウドサービス
2.1 Cloud Build
Google Cloudでビルドを実行するサーバレスかつマネージドなサービスです。Githubなどのリポジトリサービスと連携しビルドを実行したりできます。Cloud RunやGKE、Cloud FunctionsへのデプロイにもCloud Buildが用いられます。Cloud Buildはビルドトリガーを使用してビルドを実行することが可能です。ビルドトリガーとは、GithubなどのソースリポジトリとCloud Buildを連携しておくことで、ソースリポジトリに変更があった際、Cloud Buildを実行してビルドを自動化できる機能です。
https://cloud.google.com/build?hl=ja
2.2 Cloud Functions
GCPが提供するサーバレスのクラウドサービスの一つです。指定したイベントをきっかけに関数 を実行するフルマネージドなサービスで、FaaSに分類されます。サーバーレスでアプリケーションを実行できるため、サーバーの構築や保守、スケールアップやスケールダウンなどの管理・メンテナンスが不要となり、コードの記述に集中できることが大きなメリットです。
https://cloud.google.com/functions?hl=ja
2.3 成果物
今回は、Cloud Functionsのコード管理をGithub上で行い、Githubの更新をトリガーにCloud Functionsへデプロイを自動化してくれる仕組みを構築したいと思います。
3. 構築
3.1 Cloud Functions
まずはCloud Functionsを新規作成します。
検索バーでCloud Functionsと検索し、関数の作成を押します。関数名を「build-demo」として、認証は「未認証の呼び出しを許可」にして、保存を押します。
ランタイムを「Python 3.9」にし、デプロイを押します。
コードに変更を加えるため、Cloud Functionsのmain.pyとrequirements.txtをGithubのリポジトリに作成しておきます。
3.2 Cloud Build
名前を「build-demo」とし、ソースのリポジトリを選択します。「新しいリポジトリに接続」を選択します。Githubの認証を通すと、Githubの「アカウント」と「リポジトリ」を選択できるので、対象のリポジトリを選択します。
- 権限の付与
Cloud Buildの設定からCloud Functionsのステータスを「有効にする」に変更し、「すべてのサービスアカウントにアクセス権を付与」を選択します。これにより、Cloud BuildのサービスアカウントにCloud Functions開発者の権限が付与されます。
3.3 リポジトリの内容を変更
Cloud FunctionsのデプロイはgcloudのCLIを使用してデプロイできるので、Cloud BuildからCLIを実行するように構成ファイルのビルドステップを作成します。
今回の構成ファイルは、main.pyと同階層に、ファイル名を「cloudbuild.yaml」として作成します。
steps:
- name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
args:
- gcloud
- functions
- deploy
- build-demo
- --region=us-central1
- --source=.
- --trigger-http
- --runtime=python39
また、変更箇所がわかるようにmain.pyの一部を変更しましょう。
def hello_world(request):
"""Responds to any HTTP request.
Args:
request (flask.Request): HTTP request object.
Returns:
The response text or any set of values that can be turned into a
Response object using
`make_response <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>`.
"""
request_json = request.get_json()
if request.args and "message" in request.args:
return request.args.get("message")
elif request_json and "message" in request_json:
return request_json["message"]
else:
#この部分変更
return f"Hello World clear setup!"
行った変更をcommit、pushします。
Cloud Buildのログを見てみると、以下のようにbuildが実行されています。
完了後、以下のようになり、Cloud Functionsの画面で「build-demo」のソースを確認すると変更箇所がコードに適用されています!
4. まとめ
今回は、Cloud BuildとCloud Functionsを使用して、簡単なCI/CDを構築してみました。初歩的な実装ですが、これらを活用することで、より実践的なCI/CDを組むことができると思います。
コメント