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:
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
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.
<<: MySQL-Deduplizierungsmethoden
>>: So generieren Sie eine Vue-Benutzeroberfläche per Drag & Drop
Dieser Artikel stellt verschiedene Methoden zur I...
Inhaltsverzeichnis 1. Dep 2. Verstehen Sie den Be...
<br />Ich war schon immer der Meinung, dass ...
In diesem Artikel wird der spezifische Code zum I...
Vorwort Ich habe gerade angefangen, MySQL zu lern...
In Bezug auf das Nginx-Panikproblem müssen wir zu...
So installieren Sie Tomcat-8.5.39 auf CentOS 7.6....
Lassen Sie mich Ihnen ohne weitere Umschweife den...
Was wir jetzt simulieren, ist ein Master-Slave-Sy...
MySQL effiziente Abfrage MySQL verzichtet auf „Gr...
einführen GitLab CE oder Community Edition ist ei...
In diesem Artikelbeispiel wird der spezifische Ja...
Im Projekt stoßen wir häufig auf das Problem, gro...
Wie gut kennen Sie sich mit HTML aus? Wenn Sie jet...
Inhaltsverzeichnis In JavaScript können wir norma...