Blog

Kontinuierliche Bereitstellung für Artifact Registry Container-Images

Laurens Knoll

Aktualisiert Oktober 16, 2025
3 Minuten

Die kontinuierliche Bereitstellung in Cloud Run funktioniert sofort, wenn Sie den Anwendungscode besitzen. Sie sind jedoch nicht immer Eigentümer des Anwendungscodes. Möglicherweise verwenden Sie Anbieter, die Container-Images in Ihrer Artifact Registry veröffentlichen. In diesem Blog erfahren Sie daher, wie Sie eine kontinuierliche Bereitstellungspipeline für Container-Images konfigurieren.

Ziel Implementierung

Anbieter veröffentlichen Container-Images, um die Bereitstellung von Anwendungen auszulösen. Um Änderungen zu verfolgen, werden die Anwendungen mit Terraform bereitgestellt und von einem Git-Repository verfolgt. Der Prozess ist unten dargestellt:

Implementierung

Holen Sie sich den Beispielcode auf GitHub.

Benachrichtigungen des Artefaktregisters

Artifact Registry (und Container Registry) veröffentlichen Benachrichtigungen an das Thema gcr Pub/Sub. Diese Benachrichtigungen umfassen die (Einfügen/Löschen) und die / des Container-Images. Wir sind an den Insert-Ereignissen und den Image Digests interessiert, um die Anwendungsinfrastruktur zu aktualisieren.

Cloud Build Auslöser

Pub/Sub lässt sich problemlos mit Cloud Build integrieren. Es reicht aus, einen Auslöser für Pub/Sub-Ereignisse zu konfigurieren. Der nächste Auslöser ist so konfiguriert, dass er auf Artifact Registry insert-Ereignisse für bestimmte Anwendungsimages reagiert:

resource "google_cloudbuild_trigger" "gitops_application_update" {

  ...

  pubsub_config {
    topic = google_pubsub_topic.gcr.id
  }

  substitutions = {
    _ACTION       = "$(body.message.data.action)"
    _IMAGE_DIGEST = "$(body.message.data.digest)"
  }

  filter = "_ACTION.matches('INSERT') && _IMAGE_DIGEST.startsWith('xxx-docker.pkg.dev/my-project/my-repo/my-app@')"
}

Einsatz von Anwendungen

Die Anwendung (und die zugehörige Infrastruktur) wird mit Terraform bereitgestellt. Die Terraform-Konfiguration wird von Git verfolgt, um sicherzustellen, dass der Terraform-Status nicht abdriftet. Um die Terraform-Konfiguration auf dem neuesten Stand zu halten, überträgt die Bereitstellungspipeline die neue Anwendungsversion. Um die Anwendungsinfrastruktur auf dem neuesten Stand zu halten, wendet die Bereitstellungspipeline die Terraform-Konfiguration an.

resource "google_cloudbuild_trigger" "gitops_application_update" {

  ...

  build {
    source {
      repo_source {
        project_id = var.project_id
        repo_name  = google_sourcerepo_repository.gitops.name
        branch_name = "main"
      }
    }

    step {
        name = "gcr.io/cloud-builders/git"
        entrypoint = "bash"
        args = [
            "-c",
            <<-EOT

            ...

            echo "${each.value.variable_name} = "$${_IMAGE_DIGEST}"" > variables.${each.key}.auto.tfvars

            git add variables.${each.key}.auto.tfvars
            git commit -m "Set ${each.key} version to $${_IMAGE_DIGEST}"
            git push
            EOT
        ]
    }

    step {
      name = "hashicorp/terraform:1.2.9"
      args = ["init", "-no-color"]
    }

    step {
      name = "hashicorp/terraform:1.2.9"
      args = ["apply", "-no-color", "-lock-timeout=300s", "-auto-approve"]
    }
  }

Diskussion

Auch wenn die kontinuierliche Bereitstellung großartig ist, sind Kontrollen und Abgleiche notwendig. In diesem Beispiel wird die Anwendung blindlings für die Produktion freigegeben. In Wirklichkeit wird dies Ihre Produktionsumgebung zerstören. Für eine bequeme Freigabe für die Produktion erweitern Sie die Bereitstellungspipeline um Qualitätsprüfungen, die das Container-Image testen.

Dieses Beispiel verwendet Cloud Build, um den Bereitstellungsprozess zu automatisieren. Der demonstrierte Prozess hat zwei Ausgaben: ein aktualisiertes GitOps-Repository und eine aktualisierte Anwendungsinfrastruktur. Für den Produktionseinsatz wäre es sinnvoll, die beiden Outputs in separate Prozesse aufzuteilen. Um den Prozess zu steuern, könnte der Prozess mit Cloud Workflows implementiert werden.

Fazit

Die kontinuierliche Bereitstellung von Container-Images wird durch Artifact Registry-Benachrichtigungen ermöglicht. Indem Sie Cloud Build-Trigger für diese Benachrichtigungen abonnieren, geben Sie Anwendungsaktualisierungen automatisch frei. In diesem Blog wird eine Terraform-basierte GitOps-Bereitstellung verwendet, aber Sie können jeden Bereitstellungsprozess mit Cloud Build implementieren.

Bild von Pexels 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.