Edited at

Google Cloud Functions(Python)からCloud Buildでビルド実行してみる


概要

Google Cloud Next ’18で発表されたCI/CDサービスのGoogle Cloud Buildですが、現状、トリガーは以下のgitリポジトリへのpushのみとなります。(2018/10/01時点)


  • Cloud Source Repositories

  • Bitbucket

  • GitHub

ソースとしてCloud Storageにある圧縮ファイル(zip、tar.gz)を指定することができるので、Cloud Storageとも連携できるよね?と思ったので試してみました。

Google Cloud Buildについては以下をご参考ください。

Google Cloud Build

https://cloud.google.com/cloud-build/?hl=ja

Google Cloud Buildとは一体何者なのか

https://swet.dena.com/entry/2018/08/20/170836


実装

Cloud Functionsにビルドするソースは以下のような感じです。

Google API Clientが利用できるようにrequirements.txt に含めておきます。


requirements.txt

google-api-python-client


Cloud Build APIでビルドリクエストの送信をする場合、JSONまたはYAML形式でパラメータを設定する必要があります。今回はJSON形式を利用しています。

詳しくは下記をご参考ください。

REST Resource: projects.builds

https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds

今回はJSON形式で、source.storageSource でCloud Storageから読み込むソースを指定して、steps で、ls -l を指定して、ソースが解凍されて展開されたかを確認しています。

PythonのCloud Build API Clientについては下記ページからドキュメントやAPIのお試しができるAPIs Explorerへのリンクが用意されていました。

Cloud Build API Client Library for Python

https://developers.google.com/api-client-library/python/apis/cloudbuild/v1


main.py

from googleapiclient import discovery

import json

def cloud_build_create_test(event, context):
requestBody = '''
{
"source": {
"storageSource": {
"bucket": "任意のバケット名",
"object": "任意のファイル名(zip か tar.gz)"
}
},
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"entrypoint": "bash",
"args": [
"-c",
"ls -l"
]
}
]
}
'''

cloudBuild = discovery.build('cloudbuild', 'v1')
request = cloudBuild.projects().builds().create(
body=json.load(requestBody), projectId='[GCPのプロジェクトID]')
response = request.execute()


とりあえず、API叩けば、Cloud Build実行できることが確認できました。

ちょっとしたバッチ処理なんかであれば、Cloud Buildを利用するのもありかもしれません。


参考

Google Cloud Build

https://cloud.google.com/cloud-build/?hl=ja

Google Cloud Buildとは一体何者なのか

https://swet.dena.com/entry/2018/08/20/170836

REST Resource: projects.builds

https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.builds

Cloud Build API Client Library for Python

https://developers.google.com/api-client-library/python/apis/cloudbuild/v1