1. Hinweis
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird und den Sie jederzeit aktualisieren können.
- Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich (kann nach der Festlegung nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (die in der Regel als
PROJECT_IDangegeben wird). Wenn Ihnen die ID nicht gefällt, können Sie eine andere zufällige ID generieren oder eine eigene ID ausprobieren und sehen, ob sie verfügbar ist. Nachdem das Projekt erstellt wurde, wird es „eingefroren“. - Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit nach Abschluss dieses Codelabs keine Gebühren anfallen, folgen Sie den Bereinigungsanweisungen am Ende des Codelabs. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.
2. Arbeitsbereich vorbereiten
- Öffnen Sie den Cloud Shell-Editor über die folgende URL:
https://ide.cloud.google.com
- Prüfen Sie, ob Ihr Projektname in der CLI festgelegt ist.
gcloud config set project {{project-id}}
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
- APIs aktivieren
gcloud services enable \
cloudbuild.googleapis.com \
secretmanager.googleapis.com
- CloudDeploy-Berechtigungen erteilen
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.admin ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/container.developer ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/iam.serviceAccountUser ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.jobRunner ${PROJECT_ID}
- Klonen Sie im Terminalfenster den Anwendungsquellcode mit dem folgenden Befehl:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- Wechseln Sie in das Verzeichnis und legen Sie den IDE-Arbeitsbereich auf das Stammverzeichnis des Repositorys fest.
cd software-delivery-workshop && rm -rf .git
cd delivery-platform && cloudshell workspace .
3. Vordefinierte und benutzerdefinierte App-Vorlagen verwenden
Entwickler sollten aus einer Reihe von Vorlagen auswählen können, die in der Organisation häufig verwendet werden. Im Rahmen des Onboardings wird eine zentrale Gruppe von Vorlagen-Repositories in Ihrem GitHub-Konto erstellt. In späteren Schritten werden diese Vorlagenrepositorys kopiert und geändert, um als Grundlage für neue Anwendungen zu dienen. In diesem Lab füllen Sie Ihr Vorlagen-Repository mit einer hier bereitgestellten Beispielstruktur. Sie können eigene Vorlagen hinzufügen, indem Sie zusätzliche Ordner erstellen, die dem Beispiel entsprechen.
In diesem Schritt erstellen Sie Ihr eigenes Repository für App-Vorlagen aus den bereitgestellten Beispieldateien. Ein Hilfsskript vereinfacht die Interaktionen mit GitHub.
Dies sind einmalige Schritte zum Befüllen Ihrer Vorlagen-Repositories. Diese Repositorys werden in zukünftigen Schritten wiederverwendet.
GitHub-Zugriff konfigurieren
In den Schritten dieser Anleitung wird die GitHub API aufgerufen, um Repositories zu erstellen und zu konfigurieren. Ihr GitHub-Nutzername und ein persönliches Zugriffstoken sind an verschiedenen Stellen erforderlich. Mit dem folgenden Skript können Sie die Werte abrufen und als lokale Variablen für die spätere Verwendung speichern.
source ./onboard-env.sh
echo Git Username: $GIT_USERNAME
echo Git Base URL: $GIT_BASE_URL
Repository für Anwendungsvorlagen erstellen
In diesem Lab finden Sie Beispielanwendungsvorlagen, die zeigen, wie Sie Ihre eigenen Basisvorlagen einbinden können. In diesem Schritt erstellen Sie eine eigene Kopie dieser Dateien in einem Repository namens mcd-app-templates in Ihrem GitHub-Konto.
- Kopieren Sie die Vorlage in das Arbeitsverzeichnis.
cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR
cd $WORK_DIR/app-templates
- Leeres Remote-Repository in Ihrem GitHub-Konto erstellen
$BASE_DIR/scripts/git/gh.sh create mcd-app-templates
- Vorlagen-Repository in Ihr Remote-Repository übertragen
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/mcd-app-templates
git push origin main
- Arbeitsverzeichnis bereinigen
cd $BASE_DIR
rm -rf $WORK_DIR/app-templates
Repository für freigegebene Basiskonfigurationen erstellen
In dieser Anleitung wird das Tool Kustomize verwendet, das Basiskonfigurationsdateien nutzt, die von mehreren Teams gemeinsam verwendet werden, und dann anwendungsspezifische Konfigurationen darüber legt. So können Plattformteams für viele Teams und Umgebungen skaliert werden.
In diesem Schritt erstellen Sie das gemeinsam genutzte Konfigurations-Repository namens mcd-shared_kustomize aus den bereitgestellten Beispielen.
- Kopieren Sie die Vorlage in das Arbeitsverzeichnis.
cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR
cd $WORK_DIR/shared-kustomize
- Leeres Remote-Repository in Ihrem GitHub-Konto erstellen
$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize
- Vorlagen-Repository in Ihr Remote-Repository übertragen
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/mcd-shared_kustomize
git push origin main
- Arbeitsverzeichnis bereinigen
cd $BASE_DIR
rm -rf $WORK_DIR/shared-kustomize
Nachdem Sie Ihre Vorlagen-Repositories erstellt haben, können Sie sie zum Erstellen einer App-Instanz verwenden.
4. Neue Instanz einer Anwendung erstellen
Wenn Sie eine neue Anwendung aus einer Vorlage erstellen, müssen Sie häufig Platzhaltervariablen in mehreren Dateien in der Vorlagenstruktur durch tatsächliche Werte ersetzen. Nach Abschluss der Ersetzung wird ein neues Repository für die neue App-Instanz erstellt. Dieses App-Instanz-Repository wird von den Entwicklern geklont und für die tägliche Entwicklung verwendet.
In diesem Schritt ersetzen Sie Werte in einer App-Vorlage und stellen die resultierenden Dateien in einem neuen Repository bereit.
Geben Sie einen Namen für die neue Anwendung ein.
export APP_NAME=my-app
Golang-Vorlagen-Repository abrufen
cd $WORK_DIR/
git clone -b main $GIT_BASE_URL/mcd-app-templates app-templates
rm -rf app-templates/.git
cd app-templates/golang
Platzhalterwerte ersetzen
Eine der häufigsten Anforderungen beim Onboarding ist das Ersetzen von Variablen in Vorlagen durch tatsächliche Instanzen, die in der Anwendung verwendet werden. Geben Sie beispielsweise den Namen der Anwendung an. Mit dem folgenden Befehl werden Instanzen aller .tmpl-Dateien mit den in Umgebungsvariablen gespeicherten Werten erstellt.
for template in $(find . -name '*.tmpl'); do envsubst < ${template} > ${template%.*}; done
Neues Repository erstellen und aktualisierte Dateien speichern
- Leeres Remote-Repository in Ihrem GitHub-Konto erstellen
$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}
- Vorlagen-Repository in Ihr Remote-Repository übertragen
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/${APP_NAME}
git push origin main
Nachdem die App-Instanz erstellt wurde, können Sie Continuous Builds implementieren.
5. Automatisierte Pipelineausführung konfigurieren
Der zentrale Teil eines Continuous Integration-Systems ist die Möglichkeit, die Pipeline-Logik basierend auf den Ereignissen aus dem Quellcodeverwaltungssystem auszuführen. Wenn ein Entwickler Code in sein Repository überträgt, werden Ereignisse ausgelöst, die so konfiguriert werden können, dass sie Prozesse in anderen Systemen auslösen.
In diesem Schritt konfigurieren Sie GitHub so, dass Google Cloud Build aufgerufen und Ihre Pipeline ausgeführt wird, wenn Nutzer Code in ihrem Repository committen oder taggen.
Secure Access aktivieren
Sie benötigen zwei Elemente, um den sicheren Zugriff auf Ihre Anwendungspipeline zu konfigurieren. Ein API-Schlüssel und ein Secret, die für die Pipeline eindeutig sind.
API-Schlüssel
Der API-Schlüssel wird verwendet, um den Client zu identifizieren, der eine bestimmte API aufruft. In diesem Fall ist der Client GitHub. Eine Best Practice, die hier nicht behandelt wird, besteht darin, den Bereich des API-Schlüssels auf die spezifischen APIs zu beschränken, auf die der Client zugreift. Sie haben den Schlüssel in einem vorherigen Schritt erstellt.
- Sie können den Schlüssel überprüfen, indem Sie auf diesen Link klicken.
- Sie können prüfen, ob der Wert festgelegt ist, indem Sie den folgenden Befehl ausführen:
echo $API_KEY_VALUE
Pipeline-Secret
Die Secrets werden verwendet, um einen Aufrufer zu autorisieren und sicherzustellen, dass er die Berechtigungen für den jeweiligen Cloud Build-Zieljob hat. Möglicherweise haben Sie zwei verschiedene Repositories in GitHub, die nur Zugriff auf ihre eigenen Pipelines haben sollen. Der API_KEY schränkt ein, welche APIs von GitHub verwendet werden können (in diesem Fall wird die Cloud Build API aufgerufen). Das Secret schränkt ein, welcher Job in der Cloud Build API vom Client ausgeführt werden kann.
- Geheimnisname, ‑speicherort und ‑wert definieren
SECRET_NAME=${APP_NAME}-webhook-trigger-cd-secret
SECRET_PATH=projects/${PROJECT_NUMBER}/secrets/${SECRET_NAME}/versions/1
SECRET_VALUE=$(sed "s/[^a-zA-Z0-9]//g" <<< $(openssl rand -base64 15))
- Secret erstellen
printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-
- Cloud Build das Lesen des Secrets erlauben
gcloud secrets add-iam-policy-binding ${SECRET_NAME} \
--member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com \
--role='roles/secretmanager.secretAccessor'
Cloud Build-Trigger erstellen
Der Cloud Build-Trigger ist die Konfiguration, mit der die CICD-Prozesse ausgeführt werden.
Für den Job müssen bei der Erstellung einige Schlüsselwerte angegeben werden, damit der Trigger richtig konfiguriert werden kann.
- Geben Sie den Namen des Triggers und den Speicherort der Konfigurationsdatei an.
export TRIGGER_NAME=${APP_NAME}-clouddeploy-webhook-trigger
export BUILD_YAML_PATH=$WORK_DIR/app-templates/golang/build/cloudbuild-cd.yaml
- Definieren Sie den Speicherort des freigegebenen Basiskonfigurations-Repositorys.
export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize
- Im Skript „onboard-env.sh“ wurde eine Variable festgelegt, die die Containerregistrierung des Projekts definiert. Prüfen Sie den Wert mit dem folgenden Befehl.
echo $IMAGE_REPO
- Erstellen Sie einen Cloud Build-Webhook-Trigger mit den zuvor erstellten Variablen. Der Speicherort des Anwendungs-Repositorys wird aus dem Text der Anfrage von GitHub abgerufen. Ein Wert unten verweist auf den Pfad im Anfragetext, in dem er sich befindet.
gcloud alpha builds triggers create webhook \`--name=${TRIGGER_NAME} \` `--substitutions='_APP_NAME='${APP_NAME}',_APP_REPO=$(body.repository.git_url),_CONFIG_REPO='${GIT_BASE_URL}'/'${CLUSTER_CONFIG_REPO}',_DEFAULT_IMAGE_REPO='${IMAGE_REPO}',_KUSTOMIZE_REPO='${GIT_BASE_URL}'/'${SHARED_KUSTOMIZE_REPO}',_REF=$(body.ref)' \` `--inline-config=$BUILD_YAML_PATH \` `--secret=${SECRET_PATH}` - Rufen Sie diesen Link auf, um den neu erstellten Cloud Build-Trigger in der Console zu prüfen.
- Definieren Sie eine Variable für die Endpunkt-URL, die im nächsten Schritt von GitHub verwendet wird.
WEBHOOK_URL="https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY_VALUE}&secret=${SECRET_VALUE}"
GitHub-Webhook konfigurieren
- Webhook in GitHub konfigurieren
$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL
- Rufen Sie das Anwendungs-Repository auf und prüfen Sie den neu konfigurierten Webhook.
REPO_URL=${GIT_BASE_URL}/${APP_NAME}/settings/hooks
echo $REPO_URL
Nachdem Sie alle Schritte zum Erstellen einer neuen Anwendung manuell ausgeführt haben, können Sie sie jetzt in einem Skript automatisieren.
6. Alle Onboarding-Schritte automatisieren
In der Praxis ist es nicht möglich, jeden der oben genannten Schritte für jede neue Anwendung auszuführen. Stattdessen sollte die Logik in ein Skript eingebunden werden, damit sie einfach ausgeführt werden kann. Die oben genannten Schritte sind bereits in einem Skript enthalten, das Sie verwenden können.
In diesem Schritt erstellen Sie mit dem bereitgestellten Skript eine neue Anwendung.
Neue Anwendung erstellen
- Prüfen Sie, ob Sie sich im richtigen Verzeichnis befinden.
cd $BASE_DIR
- Neue Anwendung erstellen
export APP_NAME=demo-app
./app.sh create ${APP_NAME}
Alle Schritte werden automatisch ausgeführt.
GitHub-Repository ansehen
An diesem Punkt können Sie das neue Repository in GitHub aufrufen.
- Rufen Sie die URL des GitHub-Repositorys mit dem folgenden Befehl ab:
echo ${GIT_BASE_URL}/demo-app
- Öffnen Sie die URL in Ihrem Webbrowser, um die neue Anwendung zu prüfen.
- Beispiele, in denen die Vorlagenvariablen durch Instanzwerte ersetzt wurden, wie in der URL unten gezeigt
echo ${GIT_BASE_URL}/demo-app/blob/main/k8s/prod/deployment.yaml#L24
- Prüfen Sie den unter der folgenden URL konfigurierten Webhook.
echo ${GIT_BASE_URL}/demo-app/settings/hooks
Cloud Build-Trigger überprüfen
Der Trigger wurde automatisch vom Skript eingerichtet.
- Rufen Sie diesen Link auf, um den Cloud Build-Trigger in der Console zu prüfen.
- Build-Verlauf auf dieser Seite ansehen