Commit aa70d909 authored by Nane Kratzke's avatar Nane Kratzke
Browse files

Check deploy

parent 83ed02a7
......@@ -11,22 +11,29 @@ secrets:
script:
- kubectl delete secret gitlab-registry-credentials || true
- "kubectl create secret docker-registry gitlab-registry-credentials \
--docker-server=$CI_REGISTRY \
--docker-username=image-registry \
--docker-password=$CI_REGISTRY_TOKEN \
"
--docker-server=$CI_REGISTRY \
--docker-username=image-registry \
--docker-password=$CI_REGISTRY_TOKEN \
"
container:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
only:
changes:
- .gitlab-ci.yml
- api/*
- api/*/*
changes:
- .gitlab-ci.yml
- api/*
- api/*/*
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context api --destination $CI_REGISTRY_IMAGE/api:latest
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context api --destination $CI_REGISTRY_IMAGE/api:latest
api:
stage: deploy
script:
- mo deploy/api-dep.yaml | kubectl delete -f - || true
- mo deploy/api-dep.yaml | kubectl apply -f -
- mo deploy/api-svc.yaml | kubectl apply -f -
......@@ -16,21 +16,29 @@ Web-APIs sind Schnittstellen, um Informationen und Anwendungsfunktionen Nutzern
## Vorbereitung
Sie benötigen auf Ihren lokalen Entwicklungsrechner:
- [Python 3](https://www.python.org/downloads)
- [Docker](https://www.docker.com/get-started)
Führen Sie anschließend bitte folgende Schritte aus:
1. [Forken](https://git.mylab.th-luebeck.de/cloud-native/lab-rest/-/forks/new) Sie bitte dieses GitLab-Repository in Ihren GitLab-Namensraum.
2. Installieren Sie anschließend bitte lokal auf Ihrem Rechner die Kubernetes-IDE [Lens](https://k8slens.dev/).
3. Laden Sie sich Ihre `kubeconfig` Datei im [Moodle-Kurs](https://to-be-donex) herunter.
4. Starten Sie Lens und fügen Sie der IDE die kubeconfig Datei hinzu, um auf Ihren Cluster zugreifen zu können. Sie sollten dann Ihren Namespace in dem für Sie bereitgestellten K8S-Cluster sehen.
5. Erstellen Sie anschließend in Gitlab unter `Einstellungen -> Repository -> Bereitstellungstoken` für das in Schritt 1 geforkte Repository einen Bereitstellungstoken, um selbstgebaute Container Images deployen zu können.
2. Klonen Sie das in Schritt 1 geforkte Repository bitte anschließend auf ihrem lokalen Rechner (`git clone`).
3. Installieren Sie anschließend bitte lokal auf Ihrem Rechner die Kubernetes-IDE [Lens](https://k8slens.dev/).
4. Laden Sie sich Ihre `kubeconfig` Datei im [Moodle-Kurs](https://to-be-donex) herunter.
5. Starten Sie Lens und fügen Sie der IDE die kubeconfig Datei hinzu, um auf Ihren Cluster zugreifen zu können. Sie sollten dann Ihren Namespace in dem für Sie bereitgestellten K8S-Cluster sehen.
6. Erstellen Sie anschließend in Gitlab unter `Einstellungen -> Repository -> Bereitstellungstoken` für das in Schritt 1 geforkte Repository einen Bereitstellungstoken, um selbstgebaute Container Images deployen zu können.
- **Name:** `Registry read access (deployment)`
- **Username:** `image-registry` (bitte exakt so!)
- **Scope:** `read-registry` (nicht mit read repository verwechseln!)
- Klicken Sie anschließend auf Bereitstellungstoken erstellen und kopieren Sie sich dieses geheime Token in die Zwischenablage!
6. Hinterlegen Sie nun für Gitlab Build-Pipelines dieses geheime Token unter `Einstellungen -> CI/CD -> Variables (Aufklappen) -> ADD VARIABLE` als CI/CD-Variable.
7. Hinterlegen Sie nun für Gitlab Build-Pipelines dieses geheime Token unter `Einstellungen -> CI/CD -> Variables (Aufklappen) -> ADD VARIABLE` als CI/CD-Variable.
- **Key:** `CI_REGISTRY_TOKEN` (exakt so)
- **Value:** Fügen Sie hier das geheime Token (Schritt 2) aus der Zwischenablage ein.
- **Type:** `Variable` (nichts anderes)
- **Flags:** Selektieren Sie `Mask Variable` damit das geheime Token in Log-Dateien maskiert wird.
7. Hinterlegen Sie in Ihrem geforkten GitLab-Repository nun die `kubeconfig`-Datei als CI-Environment-Variable mittels `Einstellungen -> CI/CI -> Variables (Aufklappen) -> ADD VARIABLE` (setzen Sie hierfür folgende Werte)
8. Hinterlegen Sie in Ihrem geforkten GitLab-Repository nun die `kubeconfig`-Datei als CI-Environment-Variable mittels `Einstellungen -> CI/CI -> Variables (Aufklappen) -> ADD VARIABLE` (setzen Sie hierfür folgende Werte)
- **Key:** `KUBECONFIG` (Exakt so eingeben)
- **Value:** Inhalt der kubeconfig (z.B. mittels Copy-Paste aus Editor)
- **Typ:** `File` (Auswählen, WICHTIG!!!)
......@@ -46,11 +54,22 @@ Arbeiten Sie bitte dieses [Tutorial](https://programminghistorian.org/en/lessons
Bevor Sie starten, prüfen Sie bitte lokal auf Ihrem Rechner, ob die Grundkonfiguration funktioniert.
```Bash
pip3 install -r api/Requirements.txt
pip3 install -r api/requirements.txt
python3 api/api.py
```
Öffnen Sie dann [http://localhost:5000](http://localhost:5000) in einem Web-Browser. Sie sollten eine *"Distant Reading Archive"* Website sehen!
Prüfen Sie nun, ob Sie lokal einen Container bauen können.
```Bash
docker build api/ -t bookapi
docker run -p 8080:5000 bookapi
```
Öffnen Sie dann [http://localhost:8080](http://localhost:8080) in einem Web-Browser. Sie sollten dann erneut eine *"Distant Reading Archive"* Website sehen! Diesmal aus einem Container geliefert.
Committen und Pushen Sie nun diese Lösung in Git, um die Deployment Pipeline zu starten.
## Übung 02: Ergänzen Sie die Datenbank des Tutorials
FROM python:3.9-alpine
COPY . /app/
WORKDIR /app
RUN pip3 install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python3", "-u", "api.py"]
......@@ -7,4 +7,4 @@ app = flask.Flask(__name__)
def home():
return "<h1>Distant Reading Archive</h1><p>This site is a prototype API for distant reading of science fiction novels.</p>"
app.run()
\ No newline at end of file
app.run(host="0.0.0.0")
\ No newline at end of file
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
imagePullSecrets:
- name: gitlab-registry-credentials
containers:
- name: api
image: {{ CI_REGISTRY_IMAGE }}/api:latest
ports:
- containerPort: 5000
apiVersion: v1
kind: Service
metadata:
name: api-svc
spec:
selector:
app: api
ports:
- port: 5000
targetPort: 8080
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment