Blog
Kontinuierliche Bereitstellung für Artifact Registry Container-Images

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:

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
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.
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



