Detaillierte Erläuterung der Anwendung von Docker Swarm im kontinuierlichen Integrationstest

Detaillierte Erläuterung der Anwendung von Docker Swarm im kontinuierlichen Integrationstest

Hintergrund

Das Agile-Modell wird häufig verwendet und Tests sind besonders wichtig. Da häufig neue Versionen veröffentlicht werden müssen, müssen wir Testfälle häufiger ausführen, um sicherzustellen, dass keine neuen Fehler in die Version eingeführt werden.

Der Zeit- und Ressourcenaufwand für einen vollständigen Testprozess kann nicht außer Acht gelassen werden. Dazu gehört auch die Analyse der Testergebnisse, die viele Ressourcen in Anspruch nimmt. Die Bereitstellung vollständiger und umfassender Tests in kürzerer Zeit zur Gewährleistung der Qualität ist ein Problem, das wir gerne lösen möchten. Darüber hinaus ist es der Schlüssel zur Gewährleistung eines reibungslosen Ablaufs bei der agilen Entwicklung.

Jenkins implementiert einen unbeaufsichtigten Testprozess. Nach Abschluss der Entwicklung und erfolgreicher Bereitstellung der Testumgebung werden nachgelagerte Testaufgaben sofort ausgeführt.

Die Verwendung von Jenkins spart bis zu einem gewissen Grad Personalressourcen, und die Docker-Technologie ermöglicht eine schnelle Erweiterung von Containern, wodurch viele Geräteressourcen und Zeit gespart und Tests schnell abgeschlossen werden können. Dies ist ein sehr wichtiger Teil der Jenkins Pipeline (Code-Pipeline-Verwaltung), wie in Abbildung 1 dargestellt:

Abbildung 1. Jenkins Pipeline

In diesem Artikel wird hauptsächlich die Verwendung der Docker Swarm-Clusterfunktion und der Selenium Grid-Skriptverteilungsfunktion zum Erstellen einer dynamisch erweiterbaren Selenium-Umgebung zur Automatisierungsskriptausführung vorgestellt. Im Vergleich zur Verwendung einer realen Maschine als Ausführungsumgebung für Selenium-Automatisierungsskripte kann die Verwendung dieser Umgebung den Wartungsaufwand der Ausführungsumgebung, beispielsweise die Verwaltung verschiedener Browsertypen und -versionen, erheblich reduzieren. Darüber hinaus kann dadurch der Materialaufwand in der Skriptausführungsumgebung erheblich reduziert und verschiedene Ressourcen gespart werden.

Erstellen eines Docker Swarm-Clusters

Einführung in Swarm

Swarm ist ein von Docker offiziell bereitgestelltes Clusterverwaltungstool zur Verwaltung von Docker-Clustern. Es abstrahiert mehrere Docker-Hosts zu einem Ganzen und verwaltet verschiedene Docker-Ressourcen auf diesen Docker-Hosts über einen einheitlichen Eintrag.

Swarm ist lediglich ein Scheduler plus ein Router. Swarm selbst führt keine Container aus. Es akzeptiert nur Anfragen von Docker-Clients und plant geeignete Knoten zum Ausführen von Containern. Dies bedeutet, dass die Knoten im Cluster auch dann wie gewohnt weiterlaufen, wenn Swarm aus irgendeinem Grund abstürzt. Wenn Swarm den Betrieb wieder aufnimmt, sammelt und erstellt es die Clusterinformationen neu.

Swarm ähnelt Kubernetes, ist jedoch leichter und verfügt über weniger Funktionen als Kubernetes.

Umgebungsvorbereitung

Um eine Docker Swarm-Clusterumgebung aufzubauen, habe ich im Beispiel zwei Maschinen vorbereitet. Ein Knoten dient als Managerknoten und auch als Arbeitsknoten, und der andere Knoten dient nur als Arbeitsknoten.

Hier gehen wir davon aus, dass die IP-Informationen unserer beiden Maschinen wie folgt lauten:

  • M1: 10.13.181.1
  • M2: 10.13.181.2

Ab Version 1.12.0 hat Docker Engine Docker Swarm nativ integriert, sodass Sie Docker Swarm direkt verwenden können, solange Docker auf jedem Computer installiert ist. Hier werde ich nicht näher auf die Installation von Docker eingehen. Bitte folgen Sie zur Installation der offiziellen Docker Swarm-Dokumentation. Nachdem die Installation abgeschlossen ist, starten Sie den Docker-Dienst auf jedem Computer.

Hinweis:

Hinweis: Am besten schalten Sie die Firewall auf dem Computer aus, da es sonst zu Netzwerkverbindungsproblemen des Swarm-Clusters kommen kann.

Befehl zum Herunterfahren der Firewall: systemctl stop firewalld.service

Deaktivieren Sie den Startbefehl der Firewall: systemctl disable firewalld.service

Schritt

1. Erstellen Sie einen Verwaltungsknoten.

Wir verwenden Maschine M1 als Managerknoten und führen auf dieser Maschine Befehle aus, um die Clusterumgebung zu initialisieren. Der Befehl lautet wie folgt:

sudo docker swarm init --advertise-addr 10.13.181.1

Nach der Ausführung dieses Befehls wird ein Token für den Beitritt zum Cluster zurückgegeben, sodass andere Worker diesem Cluster beitreten können.

Listing 1. Beispiel für einen Join-Cluster-Token:

Kopieren Sie den Code wie folgt:
Docker Swarm beitreten --Token SWMTKN-1-5p3kzxhsvlqonst5wr02hdo185kcpdajcu9omy4z5dpmlsyrzj-
3phtv1qkfdly2kchzxh0h1xft 10.13.181.1:2377

Wenn Sie den Befehl zum erneuten Beitritt zum Cluster erhalten möchten, können Sie ihn durch Ausführen des folgenden Befehls erhalten:

sudo Docker Swarm Join-Token Worker

2. Fügen Sie Maschine M1 als Arbeitsknoten zum Cluster hinzu.

Führen Sie den Befehl in Listing 1 auf der Manager-Knotenmaschine aus, um Maschine M1 als Worker zum Swarm-Cluster hinzuzufügen.

3. Fügen Sie dem Cluster eine weitere Maschine M2 als Arbeitsknoten hinzu.

Führen Sie den Befehl in Listing 1 oben auf Maschine M2 aus, um M2 den Beitritt zum Cluster zu ermöglichen.

4. Führen Sie den folgenden Befehl aus, um ein Cluster-Netzwerk zu erstellen:

sudo Docker-Netzwerk erstellen -d Overlay Seleniumnet

Hier ist Seleniumnet der Name des von uns erstellten Clusternetzwerks.

5. Erstellen Sie einen Selenium Grid-Dienst im neu erstellten Clusternetzwerk.

a. Erstellen Sie einen Selenium Grid Hub-Dienst. Ordnen Sie Port 4444 basierend auf dem Cluster-Netzwerk seleniumnet dem Port 4444 des Clusters zu und stellen Sie die Timeout-Zeit auf 120 Sekunden ein. Sie können die Timeout-Zeit erhöhen oder verringern, wie in Listing 2 gezeigt.

Listing 2. Erstellen des Selenium Grid Hub-Dienstes:

Kopieren Sie den Code wie folgt:
sudo docker service create --name selenium-hub --network seleniumnet -p 4444:4444 -e
GRID_TIMEOUT = 120 Selen/Hub

b. Erstellen Sie einen Selenium Grid Firefox-Knotendienst und verbinden Sie ihn mit dem neu erstellten Hub-Dienst. Wie in Listing 3 gezeigt.

Listing 3. Erstellen des Selenium Grid Firefox-Knotendienstes:

sudo docker service create \
--name Knoten-Firefox \
--Replikate 5 \
-p 7900:5900 \
--network seleniumnet \
-e HUB_PORT_4444_TCP_ADDR=selenium-hub \
-e HUB_PORT_4444_TCP_PORT=4444 \
selenium/node-firefox-debug bash -c 'SE_OPTS="-host $HOSTNAME" /opt/bin/entry_point.sh'

Parameterbeschreibung:

-p:7900:5900 stellt Dockers internen VNC5900 für den Port 7900 des Hosts bereit und ermöglicht Benutzern, die interne Ausführung von Docker von außen über VNC zu überwachen.

c. Erstellen Sie einen Selenium Grid Chrome Node-Dienst und verbinden Sie ihn mit dem neu erstellten Hub-Dienst. Wie in Listing 4 gezeigt.

Listing 4. Erstellen Sie einen Knotendienst:

sudo docker service create \
--name node-chrome \
--Replikate 3 \
-p 7901:5900 \
--network seleniumnet \
-e HUB_PORT_4444_TCP_ADDR=selenium-hub \
-e HUB_PORT_4444_TCP_PORT=4444 \
selenium/node-chrome-debug bash -c 'SE_OPTS="-host $HOSTNAME" 
/opt/bin/entry_point.sh'

Parameterbeschreibung:

-p:7901:5900 stellt Dockers internen VNC5900 für den Port 7901 des Hosts bereit und ermöglicht Benutzern, die interne Ausführung von Docker von außen über VNC zu überwachen.

6. Überprüfen Sie, ob die Umgebung erfolgreich erstellt wurde. Führen Sie den folgenden Befehl auf Maschine M1 aus, um zu überprüfen, ob jeder Dienst erfolgreich gestartet wurde:

sudo Docker-Dienst ls

Sie können sehen, dass Selenium Hub, Firefox-Knoten und Chrome-Knoten alle erfolgreich gestartet wurden. Die Anzahl der Knotenreplikate für Firefox beträgt 5 und die Anzahl der Knotenreplikate für Chrome beträgt 3, wie in Abbildung 2 dargestellt.

Abbildung 2. Docker-Dienstliste

Anschließend öffnen wir die Selenium Hub-URL über die IP einer beliebigen Maschine plus Port 4444, um zu prüfen, ob die gestarteten Firefox- und Chrome-Knoten erfolgreich auf dem Hub-Knoten gemountet wurden, wie in Abbildung 3 dargestellt.

Hub-URL: 10.13.181.1:4444

Abbildung 3. Selenium Hub-Schnittstelle

Wie aus Abbildung 3 ersichtlich, wurden 5 Firefox-Knoten und 3 Chrome-Knoten erfolgreich auf dem Hub-Knoten gemountet. Dies bedeutet, dass jetzt 5 Firefox-Knoten und 3 Chrome-Knoten in der Docker-Swarm-Umgebung zum Ausführen automatisierter Selenium-Testskripte verfügbar sind.

Erweiterungsmethoden

Benutzer können die Anzahl der Knoten jederzeit dynamisch entsprechend der Anzahl der Skriptausführungen erweitern, um die Ausführungseffizienz automatisierter Skripte zu verbessern. Wenn wir beispielsweise 10 Container benötigen, die Firefox-Browser ausführen können, lauten die entsprechenden Befehle wie folgt:

sudo Docker-Dienst skalieren Node-Firefox = 10

Ausführen von Jenkins-Jobs auf Docker Swarm

Wenn Benutzer Jenkins Job in Docker Swarm ausführen, müssen sie in Jenkins keine zusätzlichen Konfigurationen vornehmen. Stattdessen müssen sie Selenium Hub im entsprechenden Automatisierungsskript aufrufen, um WebDriver remote aufzurufen. Dies implementiert das Ausführen von Selenium-Skripten im Docker-Container.

Am Beispiel des Szenarios in diesem Artikel müssen Sie nur den Remote-Selenium-Hub im Automatisierungsskript aufrufen, wie unten gezeigt: http://9.111.139.104:4444/wd/hub

Ausführen von Automatisierungsskripten in Selenium Grid

Grundlegende Konzepte

Selenium Grid wird für verteilte automatisierte Tests verwendet, was bedeutet, dass ein Satz Selenium-Code in verschiedenen Umgebungen ausgeführt werden kann. Dies erleichtert die Ausführung der Anwendung in verschiedenen von Docker bereitgestellten Containern.

Selenium Grid hat zwei Konzepte:

  • Hub: Der Hauptknoten, den Sie sich als allgemeines Dispatching-Center vorstellen können.
  • Knoten: Verzweigungsknoten, den Sie sich als einen Arbeiter vorstellen können, der tatsächlich Aufgaben ausführt.

Das heißt, es kann in Selenium Grid nur einen Haupt-Hub geben, aber es können mehrere Zweigknoten lokal oder remote eingerichtet werden. Das Testskript verweist auf den Haupt-Hub, und der Haupt-Hub weist die Testfälle den lokalen/remote Knoten zu.

Durchführung

Um Automatisierungsskripte in Selenium Grid auszuführen, müssen wir zunächst ein Remote-Treiberobjekt erstellen. Dies kann über den Quellcode in Abbildung 4 erreicht werden. Der entsprechende Eingabeparameter selhub im Screenshot ist die URL des Selenium-Hubs: http://9.111.139.104:4444/wd/hub

Abbildung 4. Screenshot des Automatisierungsskriptcodes

Durch Aufrufen des oben genannten Treibers können Sie das Automatisierungsskript im Docker-Container ausführen.

Abschluss

Beim kontinuierlichen Integrationstest kann das Bereitstellen von Tests in Docker Swarm und das automatische Zuweisen von Knoten zur Ausführung von Tests über Selenium Grid die Testeffizienz verbessern, den Testumfang erhöhen, die Qualität der gelieferten Produkte in schnellen Iterationen besser sicherstellen und Testressourcen sparen.

Ursprünglicher Link: https://www.ibm.com/developerw ... .html

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung zum Erstellen eines kontinuierlichen Integrationsclusterdienstes basierend auf Docker-Swarm
  • Beispiel für die Verwendung von Docker Swarm zum Erstellen eines verteilten Crawler-Clusters
  • Wie führt Docker Swarm einen bestimmten Container auf einem bestimmten Knoten aus?
  • Detaillierte Erläuterung der Prinzipien der Diensterkennung und des Lastenausgleichs von Docker Swarm
  • Detaillierte Erklärung von Docker-Swarm-Clusterfehlern und Ausnahmen
  • So verwenden Sie Docker Swarm zum Erstellen eines Clusters
  • Docker Swarm – Beispiel für die ersten Schritte
  • Detaillierte Erläuterung zur Verwendung von Docker 1.12 zum Erstellen eines Docker-Schwarmclusters mit mehreren Hosts
  • Installieren Sie Docker ganz einfach und führen Sie den Docker Swarm-Modus aus
  • So installieren Sie Docker und verwenden es im Docker Swarm-Modus

<<:  Detaillierte Erläuterung der Zeichenreihenfolge von MySQL Order by in (empfohlen)

>>:  Die perfekte Lösung für die verstümmelten chinesischen Zeichen in mysql6.x unter Win7

Artikel empfehlen

Skriptbeispiel zum Starten und Stoppen von Spring-Boot-Projekten in Linux

Es gibt drei Möglichkeiten, ein Springboot-Projek...

Auszeichnungssprache - Bildersetzung

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Detailliertes Tutorial zur Installation von MariaDB auf CentOS 8

Das Datenbankverwaltungssystem MariaDB ist ein Zw...

CocosCreator implementiert Skill-Kühleffekt

CocosCreator realisiert Skill-CD-Effekt In vielen...

Diagramm der Installationszusammenfassung für MySQL 8.0.11

Installationsumgebung: CAT /etc/os-release Zeigt ...

5 MySQL-GUI-Tools, die Ihnen bei der Datenbankverwaltung empfohlen werden

Es gibt viele Datenbankverwaltungstools für MySQL...

Einführung in die Verwendung von CSS3-Filterattributen

1. Einleitung Beim Schreiben von Animationseffekt...