概要
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
に含めておきます。
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
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