Informationen zu Problemen bei der automatischen Bereitstellung von Jenkins + Docker + ASP.NET Core (Fallstricke vermeiden)

Informationen zu Problemen bei der automatischen Bereitstellung von Jenkins + Docker + ASP.NET Core (Fallstricke vermeiden)

Ich hatte nicht vor, diesen Blog zu schreiben, aber während des eigentlichen Vorgangs wurde ich zum einen von Netzwerkproblemen überwältigt (ich habe wirklich das Gefühl, dass das Netzwerk die Leute in den Wahnsinn treiben kann. Andere können Pakete und Bilder in Sekunden herunterladen, aber ich fühle mich so elend, wenn ich auf meine wenige KB kleine Pipe schaue), und zum anderen gibt es hier immer noch einige Fallstricke. Ich habe es aufgeschrieben, um zu verhindern, dass andere die Fallstricke wiederholen.

Einige Hinweise:

  • Die meisten der folgenden Shell-Befehle erfordern Administratorrechte. Wenn Sie also nicht root sind, müssen Sie sudo hinzufügen.
  • Für komplexere Befehle stelle ich sowohl kommentierte als auch unkommentierte Versionen zur Verfügung. Die unkommentierte Version dient zum bequemeren Kopieren.

Vorbereitung

  • CentOS 7.x
  • Docker
  • Jenkins
  • Ein Docker-unterstützter ASP.NET Core-Anwendungscode, Sie können meinen direkt verwenden: https://github.com/xiaoxiaotank/MyAspNetCoreApp

Docker installieren

Offizielle Dokumentation: https://docs.docker.com/engine/install/centos/

1. Wenn Sie ein neues System auswählen, wird empfohlen, zuerst Yum und den Systemkernel zu aktualisieren

Yum-Aktualisierung

2. Stellen Sie sicher, dass Sie die alte Version von Docker deinstallieren

  • Bilder, Container, Volumes und Netzwerke unter /var/lib/docker/ bleiben erhalten
  • In der alten Version hieß Docker docker oder docker-engine . Jetzt heißt es docker-ce
yum entferne Docker \
           Docker-Client \
           docker-client-neueste \
           docker-allgemein \
           docker-neueste \
           docker-latest-logrotate \
           docker-logrotate \
           Docker-Engine

3. Installieren Sie yum-utils (das den yum-config-manager bereitstellt, der weiter unten verwendet wird)

yum install -y yum-utils

4. Konfigurieren Sie das Yum Alibaba Cloud Docker Repository. Offizielles Docker-Repository: https://download.docker.com/linux/centos/docker-ce.repo

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5. Docker installieren

yum install -y docker-ce docker-ce-cli containerd.io

6. Konfigurieren Sie den Docker-Image-Beschleuniger, um den Beschleuniger zu erhalten

Adresse: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["Geben Sie hier Ihre Beschleuniger-URL ein"]
}
Ende der Laufzeit
sudo systemctl daemon-reload
sudo systemctl Neustart Docker

7. Docker-Informationen anzeigen

Docker-Informationen

8. Hallo-Welt-Test

Docker Run Hallo Welt

Installieren und initialisieren Sie Jenkins

Offizielle Dokumentation: https://www.jenkins.io/doc/book/installing/docker/

Lassen Sie mich zunächst sagen, dass die offizielle Dokumentation das Image docker:dind verwendet, um Docker-Befehle auszuführen und Programmcontainer auszuführen. Ich halte es für völlig unnötig und die Einführung dieses Dings würde viele zusätzliche Probleme mit sich bringen, deshalb habe ich es nicht verwendet.

Wenn Sie mehr über Dind erfahren möchten, besuchen Sie bitte hier und diesen Blog

Jenkins installieren

1. Erstellen Sie ein Dockerfile

vim Docker-Datei

2. Füllen Sie den folgenden Inhalt in die Dockerfile-Datei aus

  • Tag-Referenz: https://hub.docker.com/r/jenkins/jenkins
  • Hinweis: Verwenden Sie nicht das veraltete Image jenkins , sondern das Image jenkins/jenkins
VON jenkins/jenkins:lts-jdk11
BENUTZER root
Führen Sie apt-get update && apt-get install -y apt-transport-https \ aus.
       ca-Zertifikate curl gnupg2 \
       Software-Eigenschaften-allgemein
FÜHREN SIE curl -fsSL https://download.docker.com/linux/debian/gpg aus | apt-key add -
Führen Sie den apt-key-Fingerabdruck 0EBFCD88 aus.
Führen Sie add-apt-repository \ aus.
       "deb [arch=amd64] https://download.docker.com/linux/debian \
       $(lsb_release -cs) stabil"

# Installieren Sie docker-ce-cli, um Docker-Befehle an den Docker-Daemon in Jenkins zu senden
Führen Sie apt-get update und apt-get install -y docker-ce-cli aus.

3. Erstellen Sie das Image

Docker-Build. -t myjenkins

Falls eine Warnung erscheint: [Warnung] IPv4-Weiterleitung ist deaktiviert. Netzwerkverbindung funktioniert nicht.

Tatsächlich bedeutet es, dass in Ihrem Linux die IPv4-Paketweiterleitungsfunktion nicht aktiviert ist.

Sie können zuerst versuchen, Docker neu zu starten

systemctl Neustart Docker

Wenn ungültig, dann

# 1. Öffnen Sie sysctl.conf
vim /etc/sysctl.conf

# 2. Fügen Sie die folgende Zeile hinzu net.ipv4.ip_forward=1

# 3. Netzwerk und Docker neu starten
systemctl Neustart Netzwerk && systemctl Neustart Docker

4. Führen Sie die Jenkins-Kommentarversion aus

Docker-Ausführung \
  --name jenkins \ # Geben Sie dem Container einen Namen, genannt jenkins
  --detach \ # Im getrennten Hintergrundmodus ausführen --publish 8080:8080 \ # Host-Port 8080 dem Container-Port 8080 zuordnen --publish 50000:50000 \ # Host-Port 50000 dem Container-Port 50000 zuordnen --volume jenkins-data:/var/jenkins_home \ # Volume jenkins-data ordnet den Containerpfad /var/jenkins_home zu, damit Sie die Jenkins-Konfiguration direkt auf dem Host ändern können --volume /var/run/docker.sock:/var/run/docker.sock \ # Der Docker Sock auf dem Host ordnet den Docker Sock des Containers zu, damit die Docker-Befehle im Container an den Docker auf dem Host gesendet werden, um myjenkins auszuführen. # Verwenden Sie das soeben erstellte Image von myjenkins, um den Container auszuführen

Unkommentierte Version

Docker-Ausführung \
  --name jenkins \
  --trennen \
  --veröffentlichen 8080:8080 \
  --veröffentlichen 50000:50000 \
  --volume jenkins-data:/var/jenkins_home \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  Abonnieren

5. Ändern Sie die Jenkins-Plugin-Quelle

Zuvor haben wir den Pfad /var/jenkins_home im Container dem Volume jenkins-data zugeordnet, und alle Docker-Volumes werden im Verzeichnis /var/lib/docker/volumes/ gespeichert.

Öffnen Sie hudson.model.UpdateCenter.xml

vim /var/lib/docker/volumes/jenkins-data/_data/hudson.model.UpdateCenter.xml

Ändern Sie die URL in der Datei zum offiziellen Mirror der Tsinghua-Universität:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

Im Augenblick:

<?xml version='1.1' encoding='UTF-8'?>
<Websites>
  <Seite>
    <id>Standard</id>
    <!--Original-URL: https://updates.jenkins.io/update-center.json -->
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </Seite>
</Seiten>

Starten Sie Jenkins neu:

Docker startet Jenkins neu

Jenkins initialisieren

Besuchen Sie: http://<Host-IP>:8080. Geben Sie das Anfangskennwort des Administrators ein, um das Anfangskennwort des Administrators anzuzeigen:

cat /var/lib/docker/volumes/jenkins-data/_data/secrets/initialAdminPassword 

Wählen Sie „Empfohlene Plugins installieren“

Nach einer langen Wartezeit können einige Plug-Ins aufgrund von Netzwerkumgebungs- und Abhängigkeitsproblemen möglicherweise nicht installiert werden. Klicken Sie jedoch auf „Fortfahren“ und beheben Sie das Problem.

Als nächstes erstellen Sie Ihr eigenes Administratorkonto und bestätigen die Jenkins-URL

Nach dem Eingeben sieht die Hauptseite von Jenkins folgendermaßen aus

Lassen Sie uns zunächst das Plugin reparieren, dessen Installation fehlgeschlagen ist

Klicken Sie in der linken Menüleiste auf „Jenkins verwalten“, um Jenkins auf die neueste Version zu aktualisieren

Denken Sie daran, auf der Update Center-Seite unten das Kontrollkästchen „Jenkins nach Abschluss der Installation neu starten (bei Leerlauf)“ zu aktivieren.

Automatisierte Konfiguration und Bereitstellung

Klicken Sie im Menü auf der linken Seite der Jenkins-Seite auf die erste "Neue Aufgabe", geben Sie den Aufgabennamen ein und wählen Sie Free Style

Füllen Sie die folgenden Konfigurationsinformationen aus und speichern Sie sie



Der Shell-Befehl lautet:

image_tag=`Datum +%J%m%d%H%M%S`;
echo $image_tag;

# Erstellen Sie das Bild und markieren Sie es
docker build -t meineapp:$image_tag .;
Docker-Bilder;

# Stoppen und löschen Sie die alte Version des MyApp-Containers
CID=$(docker ps | grep "meineapp" | awk '{print $1}')
echo $CID
wenn [ "$CID" != "" ];dann
  Docker stoppt $CID
  Docker rm $CID
fi

# Führen Sie das gerade erstellte Image aus docker run -p 5000:80 --name myapp -d myapp:$image_tag;
docker ps -a;
Docker protokolliert meine App;

Klicken Sie im linken Menü auf „Jetzt erstellen“, um unsere AspNetCoreApp bereitzustellen, und überprüfen Sie die „Konsolenausgabe“. Wenn „Fertig: ERFOLGREICH“ angezeigt wird, bedeutet dies, dass die Bereitstellung erfolgreich war.

Besuchen Sie: http://<Host-IP>:5000/hello (beachten Sie den Zusatz „hello“)

2021-05-12T15:28:43.9032704+00:00: Hallo!

Überprüfen Sie nun den laufenden Container in Docker:

CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
e167a135f7a0 myapp:20210512152453 „dotnet MyAspNetCore…“ vor 2 Minuten Vor 2 Minuten 0.0.0.0:5000->80/tcp, :::5000->80/tcp myapp
e83a2570c334 myjenkins "/sbin/tini -- /usr/…" Vor etwa einer Stunde Up Vor etwa einer Stunde 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins

Vorsichtsmaßnahmen

1. Informationen zum Herunterladen und Installieren von Jenkins BlueOcean und anderen Plug-Ins

Wenn Jenkins Plugins wie Bluocean installieren möchte, folgen Sie nicht der offiziellen Website und geben Sie den Installationsbefehl in die Docker-Datei ein. Auch wenn Sie den Parameter --jenkins-update-center hinzufügen, um die Beschleunigungsquelle anzugeben, wird dies nicht empfohlen. Weil ich es am Anfang auch so weit wie möglich automatisieren wollte, aber aufgrund von Netzwerkproblemen konnte das Plugin nicht heruntergeladen und installiert werden, was dazu führte, dass das Image nicht erstellt werden konnte, was zwei oder drei Stunden meiner Zeit verschwendete (wirklich schmerzhaft).

Darüber hinaus können Sie bei der Installation von Jenkins auch direkt das Image jenkinsci/blueocean verwenden, welches die entsprechenden Plugins von blueocean enthält.

2. Über die MyApp-Container-Portzuordnung 5000:80

Da der nach außen sichtbare Port in meinem Dockerfile 80 ist, habe ich den Container-Port 80 dem Port 5000 des Hosts zugeordnet. Sie müssen hier entsprechend Ihrer tatsächlichen Situation Änderungen vornehmen.

3. Wenn Sie an dind (Docker in Docker) interessiert sind

Wenn Sie mehr über Dind erfahren möchten, besuchen Sie bitte hier und diesen Blog

Oben finden Sie Einzelheiten zum Thema der automatischen Bereitstellung von Jenkins + Docker + ASP.NET Core. Weitere Informationen zur automatischen Bereitstellung von Jenkins + Docker + ASP.NET Core finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • ASP.NET Core-Entwicklung Docker-Bereitstellung
  • Stellen Sie Asp.Net Core (.Net6) in Docker unter Linux CentOS bereit
  • Gogs+Jenkins+Docker automatisierte Bereitstellung von .NetCore-Schritten
  • Prozessanalyse der Bereitstellung von ASP.NET Core-Anwendungen auf dem Linux-System Docker
  • Vollständige Schritte zum Bereitstellen von Asp.net-Kernanwendungen mit Docker
  • Implementierung der Ein-Klick-Bereitstellung von Asp.net Core Jenkins Docker
  • ASP.NET Core Docker-Bereitstellung im Detail
  • .Net Core stellt Docker-Container bereit

<<:  Vue-Komponenten Dynamische Komponenten detaillierte Erklärung

>>:  Detaillierte Erklärung des Unterschieds zwischen CSS-Link und @import

Artikel empfehlen

Installieren Sie JDK1.8 in einer Linux-Umgebung

Inhaltsverzeichnis 1. Installationsumgebung 2. In...

Detaillierte Erklärung der MySQL-Syntax, Sonderzeichen und regulären Ausdrücke

Häufig verwendete Anzeigebefehle für MySQL 1. Zei...

Definieren der Mindesthöhe der Inline-Elementspanne

Das Span-Tag wird häufig beim Erstellen von HTML-...

Linux-Systemaufrufe für Betriebsdateien

Inhaltsverzeichnis 1. Öffnen Sie die Datei Parame...

MySQL-Sharding-Details

1. Einführung in das Geschäftsszenario Angenommen...

Dateiupload über HTML5 auf Mobilgeräten

Meistens werden Plug-Ins zum Hochladen von Dateie...

So aktivieren Sie den Fernzugriff in Docker

Docker-Daemon-Socket Der Docker-Daemon kann über ...

React realisiert sekundäre Verknüpfung (linke und rechte Verknüpfung)

In diesem Artikel wird der spezifische Code von R...