是否可以通过Google Cloud Scheduler定期触发Google Cloud Build?
我在互联网上找不到任何与它相关的东西。
是否可以通过Google Cloud Scheduler定期触发Google Cloud Build?
我在互联网上找不到任何与它相关的东西。
第一个选项是创建一个计划来触发构建:
gcloud scheduler jobs create http ${PROJECT_ID}-run-trigger \
--schedule='0 12 * * *' \
--uri=https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_ID}:run \
--message-body='{\"branchName\": \"${BRANCH_NAME}\"}' \
--oauth-service-account-email=${PROJECT_ID}@appspot.gserviceaccount.com \
--oauth-token-scope=https://www.googleapis.com/auth/cloud-platform
请注意,您几乎可以在云构建中运行它。PROJECT_ID 是项目的名称,BRANCH_NAME 是分支的名称(开发、主等)。两者都可以在您的云构建管道中使用。可以使用以下命令获取 TRIGGER_ID:
gcloud beta builds triggers list --format json
除了branchName
,您还可以在消息正文中指定其他属性,从而为您提供更大的灵活性:
第二种选择是按计划提交 cloudbuild:
gcloud scheduler jobs create http ${PROJECT_ID}-run-build \
--schedule='0 12 * * *' \
--uri=https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/builds \
--message-body-from-file=cloudbuild.json \
--message-body="{\"branchName\": \"${BRANCH_NAME}\"} \
--oauth-service-account-email=${PROJECT_ID}@appspot.gserviceaccount.com \
--oauth-token-scope=https://www.googleapis.com/auth/cloud-platform
您的 cloudbuild.json 可能如下所示:
{
"timeout": "60s",
"steps": [
{
"name": "gcr.io/cloud-builders/gcloud",
"entrypoint": "bash",
"args": [
"-c",
"echo "Hello"
]
},
{
"name": "gcr.io/cloud-builders/gcloud",
"entrypoint": "bash",
"args": [
"-c",
"echo "World"
]
}
],
"substitutions": {
"BRANCH_NAME": "$BRANCH_NAME"
}
}
在 Cloud Scheduler 中,我们对项目的构建触发器执行 HTTP 请求:https ://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.triggers/run
对于身份验证,我们使用服务帐户。
您可以通过使 Cloud Scheduler 作业以Cloud Build projects.builds.create API为目标来手动启动您的构建来做到这一点。有了这个,您可以通过请求正文传递一个Build 实例来指定您的构建。
请记住,您需要对请求进行身份验证,请查看Using authentication with HTTP Targets文档以获取有关如何执行此操作的更多信息。