Blog
Wie man mit Terraform einen geplanten Cloud Build Trigger erstellt

Geplante Builds sind nützlich für wiederkehrende Aufgaben wie nächtliche Tests. Die Planung eines Builds mit Cloud Build erfordert jedoch eine zusätzliche Infrastruktur zum Auslösen des Builds. In diesem Blog zeige ich Ihnen, wie Sie mit Terraform einen manuellen Auslöser konfigurieren und ihn mit Cloud Scheduler auslösen können.
Anmerkung: Leider können wir Terraform nicht für die gesamte Infrastruktur verwenden. Für die Verbindung mit dem Quell-Repository müssen Sie einmalig die GitHub App -oder eine ähnliche- installieren.
Einen geplanten Build erstellen
Ein geplanter Build wird erstellt, indem Sie den Build-Trigger definieren und einen Auftrag zur Ausführung des Build-Triggers konfigurieren. Der erforderliche Code wird im Folgenden gezeigt.
resource "google_cloudbuild_trigger" "example" {
project = "example"
name = "example"
source_to_build {
repo_type = "GITHUB"
uri = "https://github.com/binxio/scheduled-trigger-example"
ref = "refs/heads/main"
}
git_file_source {
path = "cloudbuild.yaml"
repo_type = "GITHUB"
uri = "https://github.com/binxio/scheduled-trigger-example"
revision = "refs/heads/main"
}
}
resource "google_cloud_scheduler_job" "example_nightly" {
project = "example"
region = "europe-west1" # NOTE: Scheduler availability is limited
name = "example-nightly"
schedule = "0 0 * * *"
time_zone = "Europe/Amsterdam"
attempt_deadline = "120s"
http_target {
http_method = "POST"
uri = "https://cloudbuild.googleapis.com/v1/projects/example/triggers/${google_cloudbuild_trigger.example.trigger_id}:run"
oauth_token {
service_account_email = google_service_account.build_runner.email
}
}
}
resource "google_service_account" "build_runner" {
project = "example"
account_id = "build-runner"
}
resource "google_project_iam_member" "build_runner_build_editor" {
project = "example"
role = "roles/cloudbuild.builds.editor"
member = "serviceAccount:${google_service_account.build_runner.email}"
}
Bonus: Reduzieren Sie die Berechtigungen für geplante Aufträge
Sie haben vielleicht bemerkt, dass wir dem Geplanten Job die Berechtigung Cloud Build Editor erteilt haben. Das ist ein Overkill, denn wir benötigen die cloudbuild.builds.create-Berechtigung nur, um einen Trigger auszuführen. Im nächsten Beispiel wird die IAM-Zuweisung durch eine benutzerdefinierte Rolle ersetzt.
resource "google_project_iam_custom_role" "build_runner" {
project = "example"
role_id = "buildRunner"
title = "Build Runner"
description = "Grants permissions to trigger Cloud Builds."
permissions = ["cloudbuild.builds.create"]
}
resource "google_project_iam_member" "build_runner_build_runner" {
project = "example"
role = google_project_iam_custom_role.build_runner.name
member = "serviceAccount:${google_service_account.build_runner.email}"
}
Das ist zwar besser. Wir wenden immer noch nicht das geringste Recht an. Erstens erlaubt die Berechtigung cloudbuild.builds.create mehr als nur die Ausführung eines Auslösers. Ich hoffe auf eine zukünftige cloudbuild.builds.run Berechtigung, die diese ersetzt. Zweitens wird die Rolle auf Projektebene zugewiesen. Sie können also jeden Build auslösen. Auch hier hoffe ich auf eine zukünftige IAM-Berechtigung auf Build-Trigger-Ebene, um dies zu ersetzen.
Fazit
Die Erstellung von geplanten Build-Auslösern ist so einfach wie die Konfiguration einiger Ressourcen. Achten Sie jedoch auf die übermäßigen IAM-Berechtigungen, die zum Auslösen eines Builds erforderlich sind.
Bild von Andreas Lischka aus Pixabay
Verfasst von
Laurens Knoll
As a cloud consultant I enjoy improving what your company does best. I enable your business using cloud technology and enable your engineers by applying software engineering practices to your infrastructure domain.
Unsere Ideen
Weitere Blogs
Contact



