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

Check deploy

parent 83ed02a7
Pipeline #29457 failed with stages
in 21 seconds
...@@ -11,22 +11,29 @@ secrets: ...@@ -11,22 +11,29 @@ secrets:
script: script:
- kubectl delete secret gitlab-registry-credentials || true - kubectl delete secret gitlab-registry-credentials || true
- "kubectl create secret docker-registry gitlab-registry-credentials \ - "kubectl create secret docker-registry gitlab-registry-credentials \
--docker-server=$CI_REGISTRY \ --docker-server=$CI_REGISTRY \
--docker-username=image-registry \ --docker-username=image-registry \
--docker-password=$CI_REGISTRY_TOKEN \ --docker-password=$CI_REGISTRY_TOKEN \
" "
container: container:
stage: build stage: build
image: image:
name: gcr.io/kaniko-project/executor:debug name: gcr.io/kaniko-project/executor:debug
entrypoint: [""] entrypoint: [""]
only: only:
changes: changes:
- .gitlab-ci.yml - .gitlab-ci.yml
- api/* - api/*
- api/*/* - api/*/*
script: script:
- mkdir -p /kaniko/.docker - mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - 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 - /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 ...@@ -16,21 +16,29 @@ Web-APIs sind Schnittstellen, um Informationen und Anwendungsfunktionen Nutzern
## Vorbereitung ## 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. 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/). 2. Klonen Sie das in Schritt 1 geforkte Repository bitte anschließend auf ihrem lokalen Rechner (`git clone`).
3. Laden Sie sich Ihre `kubeconfig` Datei im [Moodle-Kurs](https://to-be-donex) herunter. 3. Installieren Sie anschließend bitte lokal auf Ihrem Rechner die Kubernetes-IDE [Lens](https://k8slens.dev/).
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. 4. Laden Sie sich Ihre `kubeconfig` Datei im [Moodle-Kurs](https://to-be-donex) herunter.
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. 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)` - **Name:** `Registry read access (deployment)`
- **Username:** `image-registry` (bitte exakt so!) - **Username:** `image-registry` (bitte exakt so!)
- **Scope:** `read-registry` (nicht mit read repository verwechseln!) - **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! - 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) - **Key:** `CI_REGISTRY_TOKEN` (exakt so)
- **Value:** Fügen Sie hier das geheime Token (Schritt 2) aus der Zwischenablage ein. - **Value:** Fügen Sie hier das geheime Token (Schritt 2) aus der Zwischenablage ein.
- **Type:** `Variable` (nichts anderes) - **Type:** `Variable` (nichts anderes)
- **Flags:** Selektieren Sie `Mask Variable` damit das geheime Token in Log-Dateien maskiert wird. - **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) - **Key:** `KUBECONFIG` (Exakt so eingeben)
- **Value:** Inhalt der kubeconfig (z.B. mittels Copy-Paste aus Editor) - **Value:** Inhalt der kubeconfig (z.B. mittels Copy-Paste aus Editor)
- **Typ:** `File` (Auswählen, WICHTIG!!!) - **Typ:** `File` (Auswählen, WICHTIG!!!)
...@@ -46,11 +54,22 @@ Arbeiten Sie bitte dieses [Tutorial](https://programminghistorian.org/en/lessons ...@@ -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. Bevor Sie starten, prüfen Sie bitte lokal auf Ihrem Rechner, ob die Grundkonfiguration funktioniert.
```Bash ```Bash
pip3 install -r api/Requirements.txt pip3 install -r api/requirements.txt
python3 api/api.py 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! Ö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 ## Ü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__) ...@@ -7,4 +7,4 @@ app = flask.Flask(__name__)
def home(): def home():
return "<h1>Distant Reading Archive</h1><p>This site is a prototype API for distant reading of science fiction novels.</p>" return "<h1>Distant Reading Archive</h1><p>This site is a prototype API for distant reading of science fiction novels.</p>"
app.run() app.run(host="0.0.0.0")
\ No newline at end of file \ 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
Supports Markdown
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