Connect-Gateway in Cloud Build einbinden
In dieser grundlegenden Anleitung wird die Integration von Cloud Build in das Connect-Gateway erläutert, damit Sie eine CI/CD-Pipeline für GKE Cluster erstellen können, die in vielen verschiedenen Umgebungen ausgeführt werden kann.
In dieser Anleitung wird davon ausgegangen, dass Sie mit den vorherigen Abschnitten im Leitfaden zum Connect-Gateway vertraut sind und mit Cloud Build vertraut sind. In dieser Anleitung wird das cloud-sdk
-Builder-Image verwendet, für das ein paar Skripts erforderlich sind (siehe unten).
Vorbereitung
Prüfen Sie, ob die folgenden Befehlszeilentools installiert sind:
- Die neueste Version der Google Cloud CLI, die
gcloud
, das Befehlszeilentool für die Interaktion mit Google Cloud, enthält. kubectl
Wenn Sie Cloud Shell als Shell-Umgebung für die Interaktion mit Google Cloud verwenden, sind diese Tools für Sie installiert.
- Die neueste Version der Google Cloud CLI, die
Achten Sie darauf, dass die gcloud CLI für die Verwendung mit Ihrem Projekt initialisiert wurde.
Achten Sie darauf, dass das Connect-Gateway und andere erforderliche APIs für Ihr Projekt aktiviert sind, wie im Einrichtungsleitfaden beschrieben.
1. IAM-Rollen dem Cloud Build-Dienstkonto zuweisen
Standardmäßig verwendet Cloud Build ein Google Cloud-Dienstkonto, um alle erforderlichen Aufgaben mit einer Adresse im Format MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com
auszuführen. Diese Dienstkonto-E-Mail-Adresse für Ihr Projekt finden Sie in der unter Cloud Build > Einstellungen in der Google Cloud Console.
Folgen Sie der Anleitung unter IAM-Berechtigungen erteilen im Einrichtungsleitfaden für das Gateway, um diesem Konto die erforderlichen Rollen in Ihrem Projekt zu gewähren.
2. RBAC-Richtlinien für das Cloud Build-Dienstkonto angeben
Folgen Sie der Anleitung unter RBAC-Richtlinien konfigurieren im Leitfaden zur Einrichtung des Gateways, um dem Cloud Build-Dienstkonto die entsprechenden Berechtigungen für alle Cluster zu erteilen, die Sie verwenden möchten.
Es wird dringend empfohlen, über Policy Controller RBAC-Richtlinien in mehreren Clustern bereitzustellen und zu verwalten.
3. Cloud Build-Pipeline erstellen
Der Cloud Build-Workflow benötigt eine cloudbuild.yaml
-Datei zum Konfigurieren der Pipeline. Im Folgenden wird ein einfaches Beispiel gezeigt, das ein statisches Manifest für zwei verschiedene Cluster bereitstellt (einen GKE-Cluster in Google Cloud und einen auf VMware). Weitere Informationen zum Konfigurieren einer Cloud Build-Pipeline finden Sie in der Cloud Build-Dokumentation.
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: Deploy to cluster on Google Cloud
args:
- '-c'
- |
set -x && \
export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
gcloud container fleet memberships get-credentials my-gke-cluster && \
kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: Deploy to cluster on VMware
args:
- '-c'
- |
set -x && \
export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
gcloud container fleet memberships get-credentials my-vmware-cluster && \
kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
Sie können einen beliebigen Workflow in myapp.yaml
festlegen, um Cluster zu konfigurieren. Hier ein Beispiel:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Sobald Sie Ihre Konfiguration per Push in Ihr Git-Repository übertragen haben, stellt der Cloud Build-Workflow die erforderliche Anwendung für die angegebenen Cluster bereit. Sie können Cloud Build auch so einrichten, dass Änderungen im verknüpften Git-Repository erkannt werden, um eine automatische Aktualisierung oder Installation einer Anwendung auszulösen.
Fortgeschrittene Nutzung
Da darin standardmäßige Cloud Build-Konzepte verwendet werden, können Sie unser Beispiel weiter an Ihre spezifischen CI-/CD-Anforderungen anpassen. Wenn Sie ein Image von Grund auf erstellen und in Ihrer Pipeline bereitstellen möchten, können Sie den Vorbereitungsmodus des gke-deploy
-Builders verwenden. Beispiel: Die folgende Cloud Build-Konfiguration:
- Erstellt ein Docker-Image aus dem Dockerfile im Stammverzeichnis des Git-Repositories und kennzeichnet es mit dem Git-SHA.
- Sendet das getaggte Image per Push an die Container Registry des Projekts.
- Bereiten Sie die Kubernetes-Manifeste im Verzeichnis
manifest
vor, indem Sie die richtigen Image-Tags festlegen und die Ausgabemanifeste inoutput/expanded
setzen. - Stellt lokal über das Connect-Gateway einen GKE-Cluster bereit.
steps:
- name: 'gcr.io/cloud-builders/docker'
id: "Build Container"
args: ['build', '--tag=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
id: "Push to GCR"
args: ['push', 'gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA']
- name: "gcr.io/cloud-builders/gke-deploy"
id: "Prepare Manifests"
args:
- prepare
- --filename=manifests/
- --image=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: "Deploy to cluster on VMware
args:
- '-c'
- |
set -x && \
export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
gcloud container fleet memberships get-credentials my-vmware-cluster && \
kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded
Beachten Sie, dass in diesem Beispiel ein Image-Pull-Secret erstellt werden muss, um den lokalen GKE Cluster zum Abrufen von Images aus Container Registry zu autorisieren.
Weitere Ideen zur Nutzung von Cloud Build finden Sie in der Cloud Build-Dokumentation.