Blog
So erstellen Sie serverlose CI/CD-Pipelines in der Google Cloud

Wenn Sie sich die Google Cloud-Dienste wie Source Repository und Cloud Build ansehen, könnte man meinen, es sei ganz einfach, eine CI/CD-Build-Pipeline zu erstellen. Ich kann Ihnen sagen: Das ist es auch! In diesem Blog zeige ich Ihnen, wie Sie eine serverlose CI/CD-Pipeline für ein Docker-Image erstellen und dabei drei Ressourcen in Terraform verwenden.
Erstellen Sie eine serverlose CI/CD-Pipeline
Um eine serverlose CI/CD-Pipeline mit Google Cloud Platform zu erstellen, müssen Sie:
- Erstellen Sie ein Google Source Repository.
- Definieren Sie einen Auslöser, um ein Google Cloud Build auf Push zu starten.
- Fügen Sie eine Cloud Build-Definition zu Ihrem Source Repository hinzu.
- Veröffentlichen Sie Ihren Code. Es sind wirklich nur vier Schritte. Das ist alles!
Erstellen Sie ein Google Quellcode-Repository
Mit diesem Terraform-Snippet erstellen Sie ein Google-Quellcode-Repository:
resource google_sourcerepo_repository image {
name = "paas-monitor"
depends_on = [google_project_service.sourcerepo]
}
Definieren Sie einen Auslöser
Der nächste Schritt besteht darin, einen Trigger zu erstellen, der einen Cloud-Build-Auftrag startet, wenn Sie auf den Master-Zweig pushen
So gehen Sie vor:
resource google_cloudbuild_trigger image {
project = google_sourcerepo_repository.image.project
trigger_template {
branch_name = "master"
repo_name = google_sourcerepo_repository.image.name
}
filename = "cloudbuild.yaml"
depends_on = [
google_project_service.cloudbuild
]
}
Erstellen Sie eine Cloud Build Definition
Sie müssen auch einen Cloud Build-Auftrag erstellen, der Ihren Code bauen kann. So
Sie das: Fügen Sie eine Definitionsdatei namens cloudbuild.yaml hinzu. Diese Datei definiert die Schritte, die zur Durchführung des Builds erforderlich sind. Jeder Schritt wird von einem bestimmten Docker-Image ausgeführt, das in den ausgecheckten Arbeitsbereich eingehängt wird. Unser Build hat zwei Schritte: git fetch und make snapshot, da unser Build-Prozess
ein Makefile für die Erstellung und Freigabe von Docker-Images verwendet.
steps:
- name: gcr.io/cloud-builders/git
args: ["fetch", "--unshallow", "--tags"]
- name: gcr.io/cloud-builders/docker
entrypoint: make
args:
- REGISTRY_HOST=gcr.io
- USERNAME=${PROJECT_ID}
- snapshot
Ich war sehr froh zu erfahren, dass der Docker Builder sowohl git als auch make vorinstalliert hat.
Verwalten des Zugriffs auf das Quell-Repository
Sie können eine IAM-Richtlinie definieren, um den Zugriff auf das Quell-Repository zu verwalten. Hier ist ein weiteres
Terraform-Snippet, das Ihnen dabei helfen kann:
resource google_sourcerepo_repository_iam_policy image {
project = google_sourcerepo_repository.image.project
repository = google_sourcerepo_repository.image.name
policy_data = data.google_iam_policy.image.policy_data
}
data google_iam_policy image {
binding {
role = "roles/source.reader"
members = []
}
binding {
role = "roles/source.writer"
members = ["user:${var.email}"]
}
binding {
role = "roles/source.admin"
members = [
"serviceAccount:${data.google_project.current.number}@cloudbuild.gserviceaccount.com",
]
}
}
Hier sind zwei Richtlinienbindungen definiert:
* Administratorrechte für das Cloud Build Service-Konto.
* Schreibzugriff für den Benutzer mit dem angegebenen email.
Wie alles zusammenarbeitet
Um das Ganze in Aktion zu sehen, geben Sie die folgenden Befehle ein:
git clone https://github.com/binxio/blog-serverless-ci-cd-of-docker-images-with-google-cloud-platform.git
cd blog-serverless-ci-cd-of-docker-images-with-google-cloud-platform
und setzen Sie es ein:
export TF_VAR_email=$(gcloud config get-value account)
export TF_VAR_project=$(gcloud config get-value project)
terraform init
terraform apply -auto-approve
Dieses Skript erstellt:
* Ein Quellcode-Repository mit dem Namen paas-monitor und Schreibrechten für Ihr E-Mail-Konto.
* Einen Build-Trigger für das Code-Repository.
Installieren des Git Remote Helper
Bevor Sie an ein Google Source Repository pushen können, müssen Sie Ihre lokale Git-Installation so konfigurieren, dass
Ihre gcloud-Anmeldedaten zur Authentifizierung verwendet.
git config --global
credential.'https://source.developers.google.com'.helper
git-credential-gcloud.sh
Klonen des Quell-Repositorys
Um die Pipeline in Aktion zu sehen, klonen Sie mein paas-monitor-Repository.
git clone https://github.com/mvanholsteijn/paas-monitor.git
cd paas-monitor
In das Google Source Repository verschieben
Wenn die Anmeldeinformationen vorliegen und der Quellcode ausgecheckt ist, können Sie ihn nun in das Google Source Repository übertragen:
git remote add
gcp $(gcloud source repos
describe paas-monitor --format 'value(url)')
git push gcp --tags
git push gcp
Sie haben gerade den Build-Prozess mit einem Git-Push auf den Master-Zweig gestartet. Um den Build anzuzeigen, geben Sie gcloud builds list ein:
gcloud builds list
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
d3a313b8-ec30-442d-af0f-b9d5a10f788a 2019-12-07T17:54:24+00:00 53S paas-monitor@master - SUCCESS
Um die Protokolle für diesen Build anzuzeigen, geben Sie Folgendes ein (ersetzen Sie die Build-ID durch Ihre)
gcloud builds log d3a313b8-ec30-442d-af0f-b9d5a10f788a
------------------------------------------------------------------------------------------------------------ REMOTE BUILD OUTPUT -------------------------------------------------------------------------------------------------------------
starting build "d3a313b8-ec30-442d-af0f-b9d5a10f788a"
FETCHSOURCE
Initialized empty Git repository in /workspace/.git/
From https://source.developers.google.com/p/speeltuin-mvanholsteijn/r/paas-monitor
* branch 23f349221c561dced520606ea0a144c4f04dab95 -> FETCH_HEAD
HEAD is now at 23f3492 added cloudbuild.yaml
...
Alternativ können Sie auch die Cloud Build-Konsole aufrufen.
Wiederverwendung
Da die Pipeline mit nur zwei Ressourcen erstellt werden kann, empfehle ich Ihnen, diese direkt in Ihre Terraform-Vorlage einzufügen.
Fazit
Mit Terraform ist es sehr einfach, eine komplett serverlose CI/CD-Pipeline auf der Google Cloud Platform zu erstellen. Wenn Sie die Cloud Build-Spezifikation ändern, können Sie mit dieser Einrichtung alles bauen oder bereitstellen, was Sie wollen! Schauen Sie sich den [gesamten Quellcode für diesen Blog] an(blog-serverless-ci-cd-with-google-cloud-platform/pipeline.tf bei master)
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Unsere Ideen
Weitere Blogs
Contact



