App-Onboarding

1. Hinweis

Umgebung zum selbstbestimmten Lernen einrichten

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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_ID angegeben 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
  1. 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

  1. Öffnen Sie den Cloud Shell-Editor über die folgende URL:

https://ide.cloud.google.com

  1. 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)')

  1. APIs aktivieren

gcloud services enable \

cloudbuild.googleapis.com \

secretmanager.googleapis.com

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

  1. Klonen Sie im Terminalfenster den Anwendungsquellcode mit dem folgenden Befehl:

git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git

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

  1. Kopieren Sie die Vorlage in das Arbeitsverzeichnis.

cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR

cd $WORK_DIR/app-templates

  1. Leeres Remote-Repository in Ihrem GitHub-Konto erstellen

$BASE_DIR/scripts/git/gh.sh create mcd-app-templates

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

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

  1. Kopieren Sie die Vorlage in das Arbeitsverzeichnis.

cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR

cd $WORK_DIR/shared-kustomize

  1. Leeres Remote-Repository in Ihrem GitHub-Konto erstellen

$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize

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

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

  1. Leeres Remote-Repository in Ihrem GitHub-Konto erstellen

$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}

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

  1. Sie können den Schlüssel überprüfen, indem Sie auf diesen Link klicken.
  2. 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.

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

  1. Secret erstellen

printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-

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

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

  1. Definieren Sie den Speicherort des freigegebenen Basiskonfigurations-Repositorys.

export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize

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

  1. 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}`
    
  2. Rufen Sie diesen Link auf, um den neu erstellten Cloud Build-Trigger in der Console zu prüfen.
  3. 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

  1. Webhook in GitHub konfigurieren

$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL

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

  1. Prüfen Sie, ob Sie sich im richtigen Verzeichnis befinden.

cd $BASE_DIR

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

  1. Rufen Sie die URL des GitHub-Repositorys mit dem folgenden Befehl ab:

echo ${GIT_BASE_URL}/demo-app

  1. Öffnen Sie die URL in Ihrem Webbrowser, um die neue Anwendung zu prüfen.
  2. 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

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

  1. Rufen Sie diesen Link auf, um den Cloud Build-Trigger in der Console zu prüfen.
  2. Build-Verlauf auf dieser Seite ansehen