This sample shows how to configure CloudBuildSources. The CloudBuildSource
fires a new event each time when your build's state changes, such as when your
build is created, when your build transitions to a working state, and when your
build completes.
-
Enable the
Cloud Build APIon your project, this is needed to submit builds via gcloud cli.gcloud services enable cloudbuild.googleapis.com -
Follow the
Receiving build notificationssection in Subscribing to build notifications to set up Cloud Build to emit build notifications.
-
Create a
CloudBuildSource-
If you are in GKE and using Workload Identity, update
serviceAccountNamewith the Kubernetes service account you created in Create a Service Account for the Data Plane, which is bound to the Pub/Sub enabled Google service account. -
If you are using standard Kubernetes secrets, but want to use a non-default one, update
secretwith your own secret which has the permission ofroles/pubsub.subscriber. -
By default, the events will be from Builds running in the same project as your GKE cluster. However, if you are managing multiple projects, then you can specify
spec.project, which is the Google Cloud Project whose Builds you want to get events for.
kubectl apply --filename cloudbuildsource.yaml
-
-
Create a
Servicethat the Build notifications will sink into:kubectl apply --filename event-display.yaml
You can refer to Cloud Build Quick Start: preparing source files to prepare source files. You can refer to Cloud Build Quick Start: build using dockerfile or Cloud Build Quick Start: build using a build config file to trigger a build.
Once the build's state changes, we will verify that the published event was sent by looking at the logs of the service that this CloudBuildSource sinks to.
-
We need to wait for the downstream pods to get started and receive our event, wait up to 60 seconds. You can check the status of the downstream pods with:
kubectl get pods --selector app=event-display
You should see at least one.
-
Inspect the logs of the service:
kubectl logs --selector app=event-display -c user-container --tail=200
You may see multiple events since the
CloudBuildSourcefires a new event each time when your build's state changes. You should see log lines similar to:
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: google.cloud.cloudbuild.build.v1.statusChanged
source: //cloudbuild.googleapis.com/projects/PROJECT_ID/builds/BUILD_ID
subject: SUCCESS
id: 1085069104560583
time: 2020-04-03T23:51:29.811Z
dataschema: https://raw.githubusercontent.com/googleapis/google-cloudevents/master/proto/google/events/cloud/cloudbuild/v1/data.proto
datacontenttype: application/json
Extensions,
buildid: BUILD_ID
knativecemode: binary
status: SUCCESS
traceparent: 01-ab169fd11cf9a5e308f4af4808259efe-675ce05f4k69ea3f-00
Data,
{
"id": "BUILD_ID",
"projectId": "PROJECT_ID",
"status": "SUCCESS",
"source": {
"storageSource": {
"bucket": "PROJECT_ID_cloudbuild",
"object": "source/1585957874.581832-90d126bbd24543ab9e01d5de6f8b9b7c.tgz",
"generation": "1585957875127373"
}
},
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"--network",
"cloudbuild",
"--no-cache",
"-t",
"gcr.io/PROJECT_ID/quickstart-image",
"."
],
"timing": {
"startTime": "2020-04-03T23:51:21.250787950Z",
"endTime": "2020-04-03T23:51:22.931602046Z"
},
"pullTiming": {
"startTime": "2020-04-03T23:51:21.250787950Z",
"endTime": "2020-04-03T23:51:21.258683997Z"
},
"status": "SUCCESS"
}
],
"results": {
"images": [
{
"name": "gcr.io/PROJECT_ID/quickstart-image",
"digest": "sha256:0c7566925d2cd9997a977887b43a9b751a83e7f14301584779f3986eb62c81c6",
"pushTiming": {
"startTime": "2020-04-03T23:51:22.999290127Z",
"endTime": "2020-04-03T23:51:27.955285791Z"
}
},
{
"name": "gcr.io/PROJECT_ID/quickstart-image:latest",
"digest": "sha256:0c7566925d2cd9997a977887b43a9b751a83e7f14301584779f3986eb62c81c6",
"pushTiming": {
"startTime": "2020-04-03T23:51:22.999290127Z",
"endTime": "2020-04-03T23:51:27.955285791Z"
}
}
],
"buildStepImages": [
"sha256:eb8329874ddfcb260f282b471c8205e0b9a10f8d42c45efc8ab32221bce43402"
],
"buildStepOutputs": [
""
]
},
"createTime": "2020-04-03T23:51:15.340709933Z",
"startTime": "2020-04-03T23:51:16.287536045Z",
"finishTime": "2020-04-03T23:51:29.281278Z",
"timeout": "600s",
"images": [
"gcr.io/PROJECT_ID/quickstart-image"
],
"artifacts": {
"images": [
"gcr.io/PROJECT_ID/quickstart-image"
]
},
"logsBucket": "gs://25338030513.cloudbuild-logs.googleusercontent.com",
"sourceProvenance": {
"resolvedStorageSource": {
"bucket": "PROJECT_ID_cloudbuild",
"object": "source/1585957874.581832-90d126bbd24543ab9e01d5de6f8b9b7c.tgz",
"generation": "1585957875127373"
},
"fileHashes": {
"gs://PROJECT_ID_cloudbuild/source/1585957874.581832-90d126bbd24543ab9e01d5de6f8b9b7c.tgz#1585957875127373": {
"fileHash": [
{
"type": "MD5",
"value": "ZUvek7aw2C45ZPcxLh2Vww=="
}
]
}
}
},
"options": {
"logging": "LEGACY"
},
"logUrl": "https://console.cloud.google.com/cloud-build/builds/BUILD_ID?project=25338030513",
"timing": {
"BUILD": {
"startTime": "2020-04-03T23:51:20.489188704Z",
"endTime": "2020-04-03T23:51:22.999129904Z"
},
"FETCHSOURCE": {
"startTime": "2020-04-03T23:51:16.602170521Z",
"endTime": "2020-04-03T23:51:20.489129604Z"
},
"PUSH": {
"startTime": "2020-04-03T23:51:22.999289349Z",
"endTime": "2020-04-03T23:51:27.955320728Z"
}
}
}
You may have issues receiving desired CloudEvent. Please use Authentication Mechanism Troubleshooting to check if it is due to an auth problem.
- For more details on Cloud Pub/Sub formats refer to the Subscriber overview guide.
- For integrating with Cloud Pub/Sub, see the PubSub example.
- For integrating with Cloud Storage see the Storage example.
- For integrating with Cloud Scheduler see the Scheduler example.
- For integrating with Cloud Audit Logs see the Cloud Audit Logs example.
- For more information about CloudEvents, see the HTTP transport bindings documentation.
-
Delete the
CloudBuildSourcekubectl delete -f ./cloudbuildsource.yaml
-
Delete the
Servicekubectl delete -f ./event-display.yaml