Detaillierte Erläuterung der Anwendungsbereitstellungspraxis für Docker + Jenkins + Gitlab + Django

Detaillierte Erläuterung der Anwendungsbereitstellungspraxis für Docker + Jenkins + Gitlab + Django

1. Hintergrund

Im Kontext schneller Updates und Iterationen von Internetanwendungen können herkömmliche manuelle Arbeiten oder einfache Skripte nicht mehr an diese Änderungen angepasst werden. Devops bietet uns eine gute Lösung. Die Anwendung von CI/CD kann unsere tägliche Arbeit erheblich erleichtern. Automatisierte und schnelle kontinuierliche Integration/kontinuierliche Bereitstellung ermöglicht uns eine schnellere Anwendungsentwicklung, bessere Stabilität und höhere Zuverlässigkeit.

2. Topologische Umgebung

2.1 Architekturtopologie

Wie im obigen Beispiel gezeigt, wird die folgende Prozesstopologie kurz beschrieben:

  • Wenn der Entwickler den lokalen Code auf den Gitlab-Server überträgt, löst der Webhook automatisch aus, dass Jenkins die Anwendung erstellt.
  • Stellen Sie die Anwendung auf dem Docker-Host bereit. Klonen Sie den Quellcode vom Gitlabserver und starten Sie die Anwendung.
  • LB kann für hohe Verfügbarkeit am Frontend platziert werden
  • Datenbankverbindung Cloud-Datenbank
  • Die Protokolle können im Protokoll gespeichert und später an Elk übermittelt werden, um die Protokollvisualisierung zu realisieren
  • E-Mail-Benachrichtigung über die Fertigstellung des Builds an das entsprechende Personal (Test oder Eröffnung)

2.2 Version der Systemsoftware

Name Version
Linux CentOS 7.3 64-Bit
Docker 1.13
Django 2.0

3. Installation und Bereitstellung

3.1 Installation und Bereitstellung von Jenkins

Informationen zur Installation und Bereitstellung von Jenkins finden Sie unter: Jenkins Notes

Nachdem die Installation abgeschlossen ist, fügen Sie den Docker-Zielserver hinzu

Konfigurieren des Postausgangsservers

3.2 Docker-Installation und -Bereitstellung

Weitere Informationen zur Installation und Bereitstellung von Docker sowie zum Schreiben von Docker-Dateien finden Sie unter: Detaillierte Erläuterung zum Docker-Container

3.3 Installation und Bereitstellung von Gitlab

GitLab kann durch Ausführen einiger Befehle auf einem öffentlichen Linux-Server installiert werden. Wenn kein öffentliches Netzwerk vorhanden ist, müssen Sie external_url 'http://自己的內網IP' in der Datei /etc/gitlab/gitlab.rb manuell ändern.

yum install -y libsemanage-static libsemanage-devel policycoreutils openss
H-Server OpenSSH-Clients Postfix
systemctl Postfix aktivieren und systemctl Postfix starten

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.0.
0-ce.0.el7.x86_64.rpm
rpm -i gitlab-ce-8.0.0-ce.0.el7.x86_64.rpm
# Holen Sie sich die öffentliche IP
PUBLICIP=$(curl http://ipv4.icanhazip.com)
# Ändern Sie sed -i "s/gitlab-server/${PUBLICIP}/g" /etc/gitlab/gitlab.rb

gitlab-ctl neu konfigurieren
gitlab-ctl Neustart

echo "Benutzername:root"
echo "Passwort:5iveL!fe"

3.4 Konfigurationsfreigabeprozess

Jenkins erstellt ein Freestyle-Softwareprojekt

Verwenden Sie parametrisierte Builds, um die nachfolgende Bereitstellung von in Docker importierten Mapping-Quell-Ports und Releases zu erleichtern.

Der Quellcode stammt aus dem Django-Projekt von gitlab

Verwenden Sie Webhook, um Gitlab und Jenkins zu verbinden

Jenkins-Installations-Plugin:

Generieren Sie einen zufälligen Tokenwert

Konfigurieren Sie die von Jenkins generierte GitLab-Webhook-URL für Gitlab

Wenn der Entwickler den Code lokal pusht, löst Jenkins automatisch den Projekt-Build aus. In der Docker-Datei ist ein Git-Pull-Code geschrieben. Auch hier ist es nicht nötig, den Code von Jenkins auf den Docker-Host zu verteilen. Jenkins wird als Trigger für Docker-Builds verwendet.

Konfigurieren Sie die E-Mail, nachdem der Build abgeschlossen ist

E-Mail-Vorlage, Auswahl des E-Mail-Typs:

Auswahl des Inhaltstyps: HTML

Geben Sie den Betreff der E-Mail ein:構建通知:${BUILD_STATUS} - ${PROJECT_NAME} - Build # ${BUILD_NUMBER} !

Erstellen Sie die Benachrichtigungsvorlage:

<!DOCTYPE html>
<html>
<Kopf>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-${BUILD_NUMBER} Build-Protokoll</title>
</Kopf>

<body linker Rand="8" Randbreite="0" oberer Rand="8" Randhöhe="4"
 offset="0">
 <Tabellenbreite="95%" Zellenpadding="0" Zellenabstand="0"
 Stil="Schriftgröße: 11pt; Schriftfamilie: Tahoma, Arial, Helvetica, serifenlos">
 <tr>
  <td>(Diese E-Mail wird automatisch vom Programm versendet, bitte nicht antworten!)</td>
 </tr>
 <tr>
  <td><h2>
   <font color="#0000FF">Build-Ergebnis – ${BUILD_STATUS}</font>
  </h2></td>
 </tr>
 <tr>
  <td><br />
  <b><font color="#0B610B">Build-Informationen</font></b>
  <hr Größe="2" Breite="100%" Ausrichtung="Mitte" /></td>
 </tr>
 <tr>
  <td>
  <ul>
   <li>Projektname: ${PROJECT_NAME}</li>
   <li>Build-Nummer: ${BUILD_NUMBER} Build</li>
   <li>SVN-Version: ${SVN_REVISION}</li>
   <li>Auslösegrund: ${CAUSE}</li>
   <li>Build-Protokoll: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
   <li>Build-URL: <a href="${BUILD_URL}">${BUILD_URL}</a></li>
   <li>Arbeitsverzeichnis: <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
   <li>Projekt-URL: <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
  </ul>
  </td>
 </tr>
 <tr>
  <td><b><font color="#0B610B">Änderungen seit dem letzten
   Erfolgreicher Build:
  <hr Größe="2" Breite="100%" Ausrichtung="Mitte" /></td>
 </tr>
 <tr>
  <td>
  <ul>
   <li>Historische Änderungen: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
  </ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Änderungen für Build Nr. %n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}
  </td>
 </tr>
 <tr>
  <td><b>Fehlgeschlagene Testergebnisse</b>
  <hr Größe="2" Breite="100%" Ausrichtung="Mitte" /></td>
 </tr>
 <tr>
  <td><vor
   $FEHLGESCHLAGENE_TESTS
  <br /></td>
 </tr>
 <tr>
  <td><b><font color="#0B610B">Build-Protokoll (letzte 100 Zeilen):</font></b>
  <hr Größe="2" Breite="100%" Ausrichtung="Mitte" /></td>
 </tr>
 <!-- <tr>
  <td>Testprotokolle (wenn der Test ausgeführt wurde):
  href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a>
  <br />
  <br />
  </td>
 </tr> -->
 <tr>
  <td><textarea cols="80" rows="30" readonly="Nur lesen"
   style="Schriftfamilie: Courier New">${BUILD_LOG, maxLines=100}</textarea>
  </td>
 </tr>
 </Tabelle>
</body>
</html>

Den Triggertyp können Sie nach Bedarf ausfüllen. Hier können Sie immer ausfüllen, um unabhängig von Erfolg oder Misserfolg eine E-Mail zu versenden.

Anzeigen von Dateien im Remote-Docker-Server

Die Django-Bereitstellung hat Conda verwendet, um das Python 3.6-Umgebungspaket des Projekts zu packen und ein Docker-Image zu erstellen.

Zuvor wurde ein reines Python 3.6-System verwendet. Bei jedem Build wurde pip verwendet, um die Module in requirements.txt zu installieren. Da sich die Umgebung im Laufe der Zeit jedoch selten änderte, war die Installation von pip jedes Mal zeitaufwändig. Daher wurde conda verwendet, um die gepackte Python-Umgebung anzupassen und die Bereitstellungszeit der Umgebung zu verkürzen. Die lokale Festplatte kann auch über den Parameter -v der Docker-Image-Erstellung in der Umgebung gemountet werden. Jedes Mal kann ein lokales conda erstellt werden, um die schnelle Bereitstellung der Umgebung abzuschließen.

Dockerfile anzeigen

VON 87a69025db6a
WARTUNGSPERSÖNLICHKEIT kaliarch

# Definieren Sie das Arbeitsverzeichnis ENV WORK_DIR /work/ im Docker
# Erstellen Sie ein Arbeitsverzeichnis im Docker RUN mkdir $WORK_DIR
# Definieren Sie den Mapping-Port EXPOSE 80

ARBEITSVERZEICHNIS $WORK_DIR 
Führen Sie den Git-Klon http://123.xxxx.xxxxx.245/Devops/go2cloud.git aus.

# Startdienstskript hinzufügen ADD *.sh ${WORK_DIR}

CMD `which bash` /work/start_all.sh && tail -f /work/logs/server-$(date +%F).log

Zeigen Sie das Django-Startskript an

#!/bin/bash

BASEPATH=$(cd `dirname $0`;pwd)

PY_CMD=/python3/bin/python

# Service-Eintragdatei #MAIN_APP=${BASEPATH}/go2cloud/manage.py 
# Migrationsskript-Eintragdatei SCRIPTS_APP=${BASEPATH}/go2cloud/scripts/migrate_task_schdule.py
# Löschen Sie die Skripteintragsdatei DELETE_APP=${BASEPATH}/go2cloud/scripts/delete_transfer_server.py

# Protokollverzeichnis LOG_DIR=${BASEPATH}/logs/
[ ! -d ${LOG_DIR} ] && mkdir ${LOG_DIR}

# Starten Sie den Dienst #nohup ${PY_CMD} -u ${MAIN_APP} runserver 0.0.0.0:80 >> ${LOG_DIR}server-$(date +%F).log 2>&1 &
# Starten Sie das Skript Migrationsplanungsskript echo "---------$0 $(date) excute----------" >> ${LOG_DIR}task-script-$(date +%F).log
nohup ${PY_CMD} -u ${SCRIPTS_APP} >> ${LOG_DIR}Skript-$(Datum +%F).log 2>&1 &

# Starten Sie das Migrations- und Löschskript echo "---------$0 $(date) excute----------" >> ${LOG_DIR}delete-script-$(date +%F).log
nohup ${PY_CMD} -u ${DELETE_APP} >> ${LOG_DIR}delete-script-$(date +%F).log 2>&1 &

Zeigen Sie das Jenkins-Bereitstellungsskript an

#!/bin/bash

Freigabe=$1
Hafen=$2

BASEPATH=$(cd `dirname $0`;pwd)

# Erstellen Sie das go2cloud-platform-Image cd /dockerwork
Docker-Build -t go2cloud-platform-mini:$release.

IMGNAME=$(Docker-Images|awk -v Release=$Release '{if($1=="go2cloud-platform-mini" && $2==Release) print $3}')

echo $IMGNAME
# Starten Sie den Container docker run -d -p ${port}:80 -v /testlog/:/work/logs ${IMGNAME}

Verwenden Sie den Parameter -v, um Protokolle dauerhaft auf dem Docker-Host zu speichern

4. Testanzeige

4.1 Testaufbau

Manuelles Erstellen von Tests

4.2 Protokoll anzeigen

4.3 Docker-Container anzeigen

4.4 Testen der App

5. Reflexion und Verbesserung

  • Die aktuell verbundene Datenbank ist eine auf einem Cloud-Server erstellte Datenbank. Später verwendet die Datenbank auch Docker, und mehrere Gruppen verwenden Docker-Compose für eine einheitliche Bereitstellung und Verwaltung.
  • Später können Sie den öffentlichen Cloud-K8s-Cluster für bequeme Tests verwenden
  • Derzeit befinden sich die vom Docker-Container generierten Protokolle auf dem Docker-Host. Später können sie auf cos gespeichert und dann zur Protokollvisualisierungsverarbeitung an den Elk-Cluster übermittelt werden.
  • Verwalten Sie Bilder einheitlich und erstellen Sie ein lokales Bild-Repository
  • Gitlab fügt Code-Review hinzu und kombiniert es mit automatischen Tests

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Docker+Gitlab+Jenkins erstellt automatisierte Bereitstellung von Grund auf
  • Einrichten einer kontinuierlichen Integrationsumgebung für GitLab+Jenkins unter CentOS (Installieren von Jenkins)
  • Docker Gitlab+Jenkins+Harbor erstellt einen persistenten Plattformbetrieb
  • Jenkins+Gitlab+Nginx Bereitstellung einer Front-End-Anwendung
  • Jenkins integriert Gitlab, um den gesamten Prozessdatensatz der automatisierten Bereitstellung zu realisieren

<<:  MySQL-Deduplizierungsmethoden

>>:  So generieren Sie eine Vue-Benutzeroberfläche per Drag & Drop

Artikel empfehlen

So fügen Sie einen Link in HTML ein

Jede Webseite hat eine Adresse, die durch eine UR...

Praxis der Linux-Datei- und Benutzerverwaltung

1. Zeigen Sie die Dateien oder Verzeichnisse im V...

Der einfachste Weg zum Debuggen gespeicherter Prozeduren in MySQL

Ein Kollege hat mir einmal gesagt, ich solle eine...

MySQL-Transaktionsdetails

Inhaltsverzeichnis Einführung Vier Merkmale von T...

Zusammenfassung der drei Lazy-Load-Methoden lazyLoad mit nativem JS

Inhaltsverzeichnis Vorwort Methode 1: Hoher Kontr...

Detaillierte Erklärung des daily_routine Beispielcodes in Linux

Schauen Sie sich zunächst den Beispielcode an: #/...

Detailliertes Installationstutorial für MySQL 5.7.11 unter Win7

Betriebssystem: Win7 64-Bit Ultimate Edition Komp...

Xhtml-Sonderzeichensammlung

Name des Autors: &#160; no-break space = gesc...

JS implementiert die zufällige Generierung von Bestätigungscodes

In diesem Artikelbeispiel wird der spezifische JS...

So verwenden Sie benutzerdefinierte Tags in HTML

Benutzerdefinierte Tags können in XML- und HTML-Da...

Details zur zugrundeliegenden Datenstruktur von MySQL-Indizes

Inhaltsverzeichnis 1. Indextyp 1. B+ Baum 2. Was ...

Detaillierte Erläuterung der einfachen Verwendung des MySQL-Abfragecaches

Inhaltsverzeichnis 1. Implementierungsprozess des...

XHTML-Erste-Schritte-Tutorial: Einfache Webseitenerstellung

Erstellen Sie Ihre erste Webseite in einer Minute...