18 - Build und Deployment mit Cloud Build¶
Mit dieser Anleitung lernst du, wie man eine einfache Python-Anwendung per Docker containerisiert, mit Google Cloud Build automatisiert baut und anschließend das Image in der Artifact Registry ablegt.
Artefakt-Repository anlegen¶
Aktiviere die notwendigen APIs und speichere dir für später die aktuelle Projekt-ID in eine Variable:
gcloud services enable \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com
export PROJECT_ID=$(gcloud config get-value project)
Lege nun ein Artefakt-Repository an, in das die Docker-Images hochgeladen werden können.
gcloud artifacts repositories create my-python-repo \
--repository-format=docker \
--location=europe-west1 \
--description="Repo für Python Test-App"
Anwendung erstellen¶
Lege nun ein Verzeichnis für das Projekt an und wechsle in das Verzeichnis.
mkdir cloudbuild-demo
cd cloudbuild-demo
Erstelle eine Datei namens app.py mit folgendem Inhalt.
Es handelt sich um eine einfache Python-Flask-Webanwendung.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from Google Cloud Build!", 200
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
Lege eine requirements.txt mit folgendem Inhalt an:
Flask==3.0.0
Image bauen¶
Um das Image zu bauen, brauchen wir eine Dockerfile. Lege sie mit folgenden
Inhalt an:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8080
CMD ["python", "app.py"]
Du kannst nun mit dem Befehl docker build . testen, ob deine Dockerfile
korrekt ist. Der Befehl sollte erfolgreich ein Image bauen können.
cloudbuild.yaml anlegen¶
Lege eine Datei cloudbuild.yaml mit folgenden Inhalt an:
substitutions:
_REGION: europe-west1
_REPO: my-python-repo
_IMAGE: python-demo
_TAG: latest
steps:
- name: 'gcr.io/cloud-builders/docker'
args:
- build
- -t
- $_REGION-docker.pkg.dev/$PROJECT_ID/$_REPO/$_IMAGE:$_TAG
- .
- name: 'gcr.io/cloud-builders/docker'
args:
- push
- $_REGION-docker.pkg.dev/$PROJECT_ID/$_REPO/$_IMAGE:$_TAG
images:
- $_REGION-docker.pkg.dev/$PROJECT_ID/$_REPO/$_IMAGE:$_TAG
Übermittle dann den Build-Auftrag an GCP mit folgendem Kommando:
gcloud builds submit . --config=cloudbuild.yaml
Anwendung in Cloud Run deployen¶
Zuletzt können wir die Anwendung in Cloud Run deployen, um sie zu testen:
gcloud run deploy python-demo \
--image \
europe-west1-docker.pkg.dev/$PROJECT_ID/my-python-repo/python-demo:latest \
--platform=managed \
--region=europe-west1 \
--allow-unauthenticated