[PYTHON] [Tag 3] Lernsitzung zur Bereitstellung von Docker-Compose auf Kubernetes mit minimaler Konfiguration

Überblick

Der Inhalt des dritten Tages der Studiensitzung des Titels wird beschrieben. Auf der folgenden Übersichtsseite finden Sie den Inhalt des ganzen Tages.

[Zusammenfassung] Studiensitzung zur Bereitstellung von Docker-Compose auf Kubernetes mit minimaler Konfiguration

Was ich am dritten Tag gemacht habe

--Erstellen eines Container-Images zum Testen

Inhalt des dritten Tages

Erstellen eines Container-Images zum Testen

image.png

Erstellen Sie einen Container, um einen einfachen Test auszuführen. Senden Sie eine Anfrage mit "Python" und bestimmen Sie das Ergebnis. Wenn der an die Anforderung zurückgegebene Inhalt die Zeichenfolge "puyopuyo" enthält, die den Vorgang ausführlich erläutert, endet er normalerweise mit "sys.exit (0)". Im Gegenteil, wenn es nicht enthalten ist, endet es abnormal mit "sys.exit (1)". Dies führt zum späteren "GitLab CI / CD".

import os
import requests
import sys

url = os.getenv('URL', 'http://localhost:3000')
check_str = os.getenv('CHECK_STR', 'Puyopuyo')

try:
    r_get = requests.get(url)
    response = True if r_get.ok else r_get.reason
    print(r_get.text)
    if r_get.text.find(check_str) == -1:
        print(check_str + "Es ist kein Problem! !!")
        sys.exit(1)
    else:
        print(check_str + "Also ist es okay.")
        sys.exit(0)
except requests.exceptions.RequestException as e:
    response = str(e)
    sys.exit(1)

Versuchen Sie den Test nur mit Python

Dieser Test kann auch auf der lokalen Python ausgeführt werden. In der lokalen "Python" -Umgebung müssen "Anfragen" im Voraus "Importieren" sein. Sie können den Test ausführen, indem Sie die folgenden Schritte ausführen.

Fügen Sie test zu docker-compose.yml hinzu

Bereiten Sie zunächst eine Docker-Datei vor, um einen Container zu erstellen. alpine enthält keine Anfragen, also habe ich es installiert.

■ Dockerfile

FROM python:3.6-alpine

WORKDIR /app

COPY ./*.py /app/

RUN pip install requests

CMD ["python", "test.py" ]

Fügen Sie basierend auf dieser Docker-Datei den Testdienst mit docker-compose.yml hinzu.

■ docker-compose.yml

version: '3'
services:
  app:
    build:
      context: ./app      #Dockerfile-Speicherort
    image: registry.gitlab.com/tamoco-mocomoco/k8s-test/express:latest
    ports:                          #Portverbindung
      - 3000:5000
    environment:
      PORT: 5000

  test:
    build:
      context: ./test
    environment:
      URL: http://app:5000
      CHECK_STR: "Puyopuyo"

Die Umgebungsvariable überschreibt die URL des Verbindungsziels und die zu überprüfende Zeichenfolge. Was hier zu beachten ist, ist, dass, da die Verbindung innerhalb des Containers hergestellt wird, es sich um "App" handelt oder der Port "5000" ist, was die Portnummer in der Anwendung ist. Als ich es früher mit dem lokalen "Python" ausgeführt habe, habe ich auf die URL und die Portnummer zugegriffen, nachdem ich von "Docker-Compose" übertragen wurde. Es ist jedoch wichtig zu wissen, wo aus dem Container heraus eine Verbindung hergestellt werden soll. Werden.

Führen Sie den Test mit Docker-Comopse aus (im Testcontainer ausführen)

Sie können einen Container mit Docker-Compose erstellen und testen.

■ Führen Sie den Test in einem Container aus (Erfolg)

$ docker-compose run test
<!DOCTYPE html>
<html>
  <head>
    <title>Puyopuyo Wadao</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>Puyopuyo Wadao</h1>
    <p>Willkommen in Puyopuyo Wadao</p>
  </body>
</html>

Es ist Puyopuyo, also ist es okay.

Wenn Sie es in einem Container ausführen, müssen Sie es erneut erstellen, wenn sich die ursprüngliche Quelle ändert. Es scheint besser, hier Funktionen wie Hot Reload (ein Mechanismus, der die Quelle im Container automatisch aktualisiert) hinzuzufügen.

Übrigens, wenn Sie möchten, dass der Test fehlschlägt, ändern Sie die Zeichenfolge "Puyopuyo" in "app / express / route / index.js" in "Peeling" usw. und es wird fehlschlagen.

■ Führen Sie den Test im Container aus (Fehler)

$ docker-compose run test
<!DOCTYPE html>
<html>
  <head>
    <title>Wadao schälen</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>Wadao schälen</h1>
    <p>Willkommen bei Peeling Wadao</p>
  </body>
</html>

Es ist nicht Puyopuyo, also ist es ein Problem! !!

Integrieren Sie Tests in CI / CD-Pipelines

Fügen Sie .gitlab-ci.yml einen zu testenden Mechanismus in einem Testcontainer hinzu. Wurde geändert, um das Container-Image zu erstellen, wenn der Test bestanden wurde.

■ .gitlab-ci.yml

image: docker:latest

stages:
  - test
  - build

variables:
  DOCKER_DRIVER: overlay

services:
- docker:dind

before_script:
- docker info
- apk update
- apk upgrade
- apk add docker-compose
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker-compose build

test:
  stage: test
  script:
  - docker-compose up -d app
  - sleep 5s
  - docker-compose run test

build:
  stage: build
  script:
  - docker-compose push

Überprüfen Sie die Pipeline

Es wurde bestätigt, dass der Test wie in der Abbildung unten gezeigt durchgeführt wurde.

コメント 2020-07-16 232531.jpg

Bei Erfolg werden die folgenden Ausführungsergebnisse angezeigt.

image.png

Wenn dies fehlschlägt, können Sie das Ausführungsergebnis wie folgt überprüfen.

image.png

Rückblick auf den dritten Tag

Anfangs bereitete ich einen einfachen Test vor, um das Ergebnis durch Ausführen von "curl" in einem Shell-Skript zu ermitteln. Ich nahm einen Mechanismus an, um "apk add curl" auszuführen, um "curl" zum Container auf CI hinzuzufügen und ihn zu testen, aber ich war ein wenig süchtig danach, also entschied ich mich, ihn mit "python" zu verkleinern.

Wenn Sie tatsächlich einen Testcontainer erstellen, ist es meiner Meinung nach besser, einen Container zu verwenden, der "e2e" -Tests wie "Zypresse" ausführen kann.

cypress

Recommended Posts

[Tag 3] Lernsitzung zur Bereitstellung von Docker-Compose auf Kubernetes mit minimaler Konfiguration
Vom "Zeichnen" zum "Schreiben" des Konfigurationsdiagramms: Zeichnen Sie das AWS-Konfigurationsdiagramm mit Diagrammen