Blog

Wie man mit Terraform einen geplanten Cloud Build Trigger erstellt

Laurens Knoll

Aktualisiert Oktober 16, 2025
2 Minuten

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.

Contact

Let’s discuss how we can support your journey.