8

是否可以通过Google Cloud Scheduler定期触发Google Cloud Build

我在互联网上找不到任何与它相关的东西。

4

3 回答 3

13

第一个选项是创建一个计划来触发构建:

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"
    }
}
于 2020-02-14T11:31:13.943 回答
8

在 Cloud Scheduler 中,我们对项目的构建触发器执行 HTTP 请求:https ://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.triggers/run

对于身份验证,我们使用服务帐户。

于 2019-08-30T14:34:28.127 回答
2

您可以通过使 Cloud Scheduler 作业以Cloud Build projects.builds.create API为目标来手动启动您的构建来做到这一点。有了这个,您可以通过请求正文传递一个Build 实例来指定您的构建。

请记住,您需要对请求进行身份验证,请查看Using authentication with HTTP Targets文档以获取有关如何执行此操作的更多信息。

于 2019-08-28T09:25:05.457 回答