Cloud Build API でビルドステップを指定して実行する
ブツ
実装
これぐらいでできる、簡単
code:index.ts
import { CloudBuildClient } from '@google-cloud/cloudbuild';
const projectId = 'pokutuna-playground';
const build = {
steps: [
{
name: 'alpine:latest',
entrypoint: '/bin/echo',
},
{
name: 'gcr.io/cloud-builders/gcloud',
args: [
'functions',
'deploy',
'hello',
'--runtime=nodejs10',
'--entry-point=app',
'--trigger-http',
--source=gs://${projectId}/gomi/function.zip,
],
},
],
timeout: { seconds: 600 },
// timeout: '600s',
};
(async () => {
const client = new CloudBuildClient();
const res = await client.createBuild({
projectId,
build,
});
console.log(res);
})();
権限
権限あげる
https://gyazo.com/ba5e9e122dff0655b2e7fd9407960dab
ここから権限つけるのが簡単
CLI からも付与できるがデプロイ対象(roles/cloudfunctions.developer)だけでなく、サービスアカウントユーザー(roles/iam.serviceAccountUser)も必要
これ気づかなくてしばらくハマった
YAML をロードして投げつける
普通に書く cloudbuild.yml を投げつけたい 👉 むりそう
createBuild の引数の google.devtools.cloudbuild.v1.Build
互換性ありそう? に思えるが TypeScript の型だと少なくとも timeout が一致してない
YAML では "300s" みたいな文字列
ts の補完では{ "seconds": 300 } みたいなオブジェクト
google.protobuf.IDuration
実行時に怒られる
メリデメ
このぐらいの例なら直接 API 叩いてもいいけど
まあ普通やらない...
API を使うことで
定期実行しやすい
プログラマブルになる(必要以上にやる必要はない)
メリット
Cloud Build にログが残る
普段の gcloud CLI の雰囲気で書ける
API より CLI のほうがユーザに近い
その他に任意の Docker イメージを使って処理を差し込みやすい
デメ
Cloud Build サービスアカウントの権限付与などが手間