Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trigger Google Cloud Build with Google Cloud Scheduler periodically

Is it somehow possible to trigger a Google Cloud Build with Google Cloud Scheduler periodically?

I can't find anything related to it on the Internet.

like image 860
Harold L. Brown Avatar asked Aug 27 '19 19:08

Harold L. Brown


Video Answer


2 Answers

The first option is to create a schedule to trigger a 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

Note that you can almost run this from within a cloud build. PROJECT_ID is the name of the project and BRANCH_NAME is the name of the branch (development, master, etc.). Both are available from within your cloud build pipeline. TRIGGER_ID can be fetched with the following command:

gcloud beta builds triggers list --format json

Additional to branchName, you can also specify other attributes in the message body, giving you more flexibility:

  • commitSha
  • dir
  • invertRegex
  • projectId
  • repoName
  • substitutions
  • tagName

The second option is to submit a cloudbuild on a schedule:

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

Your cloudbuild.json can look something like this:

{
    "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"
    }
}
like image 88
Nebulastic Avatar answered Oct 02 '22 01:10

Nebulastic


In Cloud Scheduler we perform a HTTP request on the project's build trigger: https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.triggers/run

For authentication we use a service account.

like image 23
Harold L. Brown Avatar answered Oct 02 '22 01:10

Harold L. Brown