使用 Google Cloud Scheduler 定期触发 Google Cloud Build

Trigger Google Cloud Build with Google Cloud Scheduler periodically

是否有可能以某种方式定期触发 Google Cloud Build with Google Cloud Scheduler

我在 Internet 上找不到任何相关内容。

您可以通过请求正文将 Cloud Scheduler 作业作为目标 Cloud Build projects.builds.create API to manually start your builds. With this you can pass a Build instance 来指定您的构建。

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

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

我们使用服务帐户进行身份验证。

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

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 是分支名称(development、master 等)。两者都可以从您的云构建管道中获得。 TRIGGER_ID 可以使用以下命令获取:

gcloud beta builds triggers list --format json

除了branchName,您还可以在邮件正文中指定其他属性,给您更多的灵活性:

  • commitSha
  • 目录
  • 反转正则表达式
  • 项目编号
  • repoName
  • 替补
  • 标签名

第二个选项是按计划提交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"
    }
}