Gogs+Jenkins+Docker automatisierte Bereitstellung von .NetCore-Schritten

Gogs+Jenkins+Docker automatisierte Bereitstellung von .NetCore-Schritten

Umgebungsbeschreibung

  • Tencent Cloud Lightweight Server, Konfiguration 1c 2g 6mb , System ist ubuntu 20.14 , Docker und Jenkins sind auf diesem Server,
  • Eine Synology 218+, Gogs, ist auf diesem Server.

Docker-Installation

Deinstallieren Sie den alten Docker

sudo apt-get entfernen docker docker-engine docker.io containerd runc

Aktualisieren Sie den Apt-Paketindex und installieren Sie Pakete, damit Apt das Repository über HTTPS verwenden kann

sudo apt-get update

sudo apt-get install \
  apt-transport-https \
  CA-Zertifikate \
  Locke \
  gnupg \
  LSB-Veröffentlichung

Offiziellen GPG-Schlüssel von Docker hinzufügen

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Docker installieren

sudo apt-get installiere docker-ce docker-ce-cli containerd.io

Überprüfen Sie, ob Docker korrekt installiert wurde, indem Sie „Hello-World“ ausführen. Die Ausgabe „Hello“ von Docker! zeigt eine erfolgreiche Installation an

sudo docker run hallo-welt

Informationen zu verschiedenen Systeminstallationsmethoden finden Sie in den offiziellen Docker-Installationsanweisungen.

Gogs-Installation

Gogs ist ein leichtgewichtiger und einfach zu erstellender Self-Service-Git-Dienst, der in der Sprache Go entwickelt wurde. Der Hauptgrund für die Wahl von Gogs besteht darin, dass es viel leichter ist als Gitlab, das eine interne Nutzungsrate von mehreren GB aufweist. Gogs reduziert den System-Overhead erheblich und belegt beim Ausführen nur 100 MB Speicher. Mein Gogs läuft auf Synology, die Ergebnisse sind die gleichen, beide werden in Docker gehostet

Zieh das Gogs-Bild

sudo docker pull gogs/gogs

Erstellen Sie einen Gogs-Datei-Mount-Pfad

mkdir -p /var/gogs

Beim Starten des Containers 6022 ist es https und 6080 ist http. Sie können den Befehl docker ps verwenden, um zu überprüfen, ob er erfolgreich gestartet wurde.

docker run -d --name=my_gogs -p 6022:22 -p 6080:3000 -v /var/gogs:/data gogs/gogs

Nachdem der Container gestartet wurde, führen Sie die Erstkonfiguration von Gogs über http://xxxxxxxx:6080 durch.

Der empfohlene Datenbanktyp ist SQLite3, der mit Linux geliefert wird. Er reicht aus, um ein Team von etwa einem Dutzend Personen zu unterstützen. Domänenname: Geben Sie den Domänennamen oder die IP-Adresse des Servers ein, auf dem sich Gogs befindet. Die HTTP-Portnummer stimmt mit dem internen Port des Containers überein. Geben Sie den Domänennamen-Port oder den IP-Port von Gogs in die Anwendungs-URL ein. Klicken Sie auf „Installieren“ und registrieren Sie einen neuen Benutzer, um sich anzumelden.

Nachdem Gogs installiert ist, erstellen Sie ein neues Demo-Repository zur späteren Verwendung

Offizielle Gogs-Dokumentation

Hosten von .NetCore-Diensten in Docker

Erstellen eines neuen WebAPI-Projekts

Fügen Sie dem Projekt eine DockerFile-Datei hinzu und konfigurieren Sie sie einfach

#Geben Sie die Abhängigkeitsversion an: FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim 
ARBEITSVERZEICHNIS /app

KOPIEREN ./veröffentlichen
WORKDIR /veröffentlichen
# Stellen Sie den Docker-Container so ein, dass er den Port EXPOSE 80 freigibt
# Zeitzone einstellen RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' >/etc/Zeitzone 
# Programmeintrag ENTRYPOINT ["dotnet", "DemoWebApi.dll"]

Veröffentlichen Sie den API-Dienst. Wenn die veröffentlichte Datei keine DockerFile-Datei enthält, müssen Sie die Projektdatei manuell ändern. Kopieren Sie die veröffentlichte Datei nach erfolgreicher Veröffentlichung in den vom Server angegebenen Ordner.

 <Artikelgruppe>
        <Keine Aktualisierung="Dockerdatei">
            <CopyToOutputDirectory>Immer</CopyToOutputDirectory>
        </Keine>
    </Artikelgruppe>

Gehen Sie zum Stammpfad der gerade auf den Server kopierten Release-Datei und führen Sie docker build -t {REPOSITORY}:{TAG} . Der Befehl generiert eine Docker-Image-Datei über DockerFile. REPOSITORY ist der Name des Images und TAG ist das Tag. Beispiel: docker build -t demo:v1 .


Verwenden Sie den Befehl docker images um alle generierten Images anzuzeigen

Nachdem das Image erfolgreich generiert wurde, können Sie einen Container erstellen und über das Image ausführen. Führen Sie docker run --name demoapi -dp 5009:80/tcp demo:v1 aus, um den Container zu erstellen und auszuführen.
-d: Führen Sie den Container im Hintergrund aus und geben Sie die Container-ID zurück.
-p: Gibt die Portzuordnung im Format Host-Port: Container-Port an. Der Container-Port ist der Port, auf dem Ihr Programm gestartet wird. Es wird empfohlen, ihn im Projekt fest zu codieren.
-- Name: Containername

Nach der Ausführung können Sie mit docker ps den Status aller laufenden Container anzeigen. Um alle Container anzuzeigen, können Sie den Befehl docker ps -a verwenden

Verwenden Sie Postman, um zu testen, ob die Bereitstellung erfolgreich ist

Listen Sie einige gängige Docker-Befehle auf

  • docker restart {容器id} #Starten Sie den Container neu
  • docker start {容器id} #Starte den Container
  • docker attach {容器id} # Dadurch wird der Container beendet und mit attach kann der Benutzer die Standardausgabe des Containers sehen.
  • docker attach {容器id} --sig-proxy=false # Das Hinzufügen von Parametern führt nicht zum synchronen Beenden
  • docker exec -it {容器id} /bin/bash # Um den Container aufzurufen, müssen Sie den Befehl exec verwenden, um Befehle im Container auszuführen.
  • docker logs {容器id} -f # Tracking-Protokollausgabe -f Tracking-Protokollausgabe
  • docker rm -f {容器id} # lösche den gestoppten Container
  • docker rmi {REPOSITORY:TAG} # lösche das angegebene Image
  • docker image prune # Löschen Sie hängende Bilder, d. h. Bilder, auf die nicht von Containern verwiesen wird

Zu diesem Zeitpunkt wurde der Dienst in Docker gehostet, aber für jede Version muss ein neues Image erstellt, der alte Container gestoppt und ein neuer erstellt werden, was den Arbeitsaufwand unsichtbar erhöht. Jenkins kann das für uns tun

Jenkins Installation

Jenkins ist von Java abhängig, daher müssen Sie das Java SDK installieren. Wählen Sie hier Java 8 aus.

sudo apt-get installiere openjdk-8-jdk

Installieren der LTS-Version von Jenkins

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
    /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get installiere jenkins

Überprüfen Sie den laufenden Status systemctl status jenkins Normalerweise sieht die Ausgabe wie folgt aus

Der Standardport von Jenkins ist 8080. Nach erfolgreicher Installation können Sie über http://xxxx:8080 darauf zugreifen. Der erste Schritt besteht darin, es zu entsperren. Das Administratorkennwort wird nach erfolgreicher Installation ausgegeben. Sie können auch den Befehl cat /var/lib/jenkins/secrets/initialAdminPassword verwenden.

Nach Eingabe des Passworts gelangen Sie auf die Initialisierungsseite und wählen die Installation des empfohlenen Plug-Ins

Die Installation des Plugins kann einige Zeit in Anspruch nehmen.

Erstellen Sie nach Abschluss ein Administratorkonto, um sich anzumelden, rufen Sie die Systemverwaltung auf, wählen Sie die Plugin-Verwaltung, suchen Sie nach gogs -Plugin und installieren Sie es.

Nach der Installation müssen Sie Jenkins neu starten. Besuchen Sie den Link http://xxxx:8080/restart und klicken Sie auf „Neu starten“, oder führen Sie zum Neustart service jenkins restart aus.

Um die Skriptausführung zu erleichtern, müssen Sie Jenkins als Root-Benutzer ausführen lassen. Bearbeiten Sie die Datei vim /etc/sysconfig/jenkins oder vim /etc/default/jenkins , heben Sie die Kommentierung JENKINS_USER auf, setzen Sie den Wert auf JENKINS_USER="root" und ändern Sie dann die Ordnerberechtigungen.

chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

Allgemeine Jenkins-Operationen

  • service jenkins start
  • Starten Sie service jenkins restart oder besuchen Sie http://xxxx:8080/restart
  • Stoppen Sie service jenkins stop oder besuchen Sie http://xxxx:8080/exit
  • Laden Sie die Konfigurationsdatei http://xxxx:8080/reload

Automatisierung mit Jenkins

Da Sie das Projekt auf dem Server erstellen müssen, müssen Sie die .NetCore-Umgebung installieren. Informationen zur Selbstinstallation finden Sie in der offiziellen Microsoft-Dokumentation.

Schieben Sie das neu erstellte Projekt in das Gogs-Repository und klicken Sie auf die erweiterten Repository-Einstellungen

Wählen Sie Web Hooks und fügen Sie einen neuen Gogs Web Hook hinzu

Konfigurieren Sie den Web-Hook. Der Push-Adresse ist der Jenkins-Zugriffslink vorangestellt, und den Jobnamen können Sie selbst definieren. Sie können wählen, ob der Hook nur beim Pushen ausgelöst werden soll, oder Sie können das Ereignis selbst auswählen.

Klicken Sie nach dem Hinzufügen erneut auf „Web-Hooks verwalten“, wählen Sie den neu erstellten Hook aus und klicken Sie auf „Push testen“, um zu überprüfen, ob er normal ist. Wenn die Ausnahme ausgelöst wird, dass der Job nicht definiert ist, bedeutet dies, dass der Hook normal ist. Wenn es sich um andere Ausnahmen handelt, können Sie überprüfen, ob die Push-Adresse korrekt ist und ob das Gogs-Plugin auf Jenkins korrekt installiert ist.

Gehen Sie zurück zur Jenkins-Seite und erstellen Sie eine neue Aufgabe. Der Aufgabenname ist derselbe wie der Jobname in Gogs. Wählen Sie „Ein Free-Style-Softwareprojekt erstellen“ aus.

Repository-Konfiguration hinzufügen. Die Repository-URL ist Ihre Repository-Adresse. Klicken Sie hier, um Ihre Repository-Anmeldeinformationen hinzuzufügen. Geben Sie abschließend den Zweig für den Vorgang an.

Shell-Skript erstellen und ausführen auswählen. Das Skript kann auch auf dem Server abgelegt und hier aufgerufen werden. Der Einfachheit halber schreiben Sie es einfach hier


# Überprüfen Sie, ob das Demo-Image oder Docker-Images vorhanden sind | grep demo &> /dev/null
wenn [ $? -ne 0 ]
Dann
   # Keine Verarbeitung, wenn es nicht existiert. Echo „Demo existiert nicht“
anders
    # Wenn das Image vorhanden ist, wird standardmäßig angenommen, dass der Container ausgeführt wird. echo "existed demo"
   	# Stoppen Sie das Löschen von Containern und Bildern docker stop demoapi
    docker rm -f demoapi
    Docker-RMI-Demo: v1
fi

# Image neu erstellen und generieren und den Container ausführen cd DemoWebApi/
# Im angegebenen Pfad veröffentlichen dotnet publish -c Release -o /publish
# Geben Sie den Pfad zur Image-Erstellung ein und starten Sie den Container cd /publish
Docker-Build -t Demo:v1.
docker run --name demoapi -dp 5009:80/tcp demo:v1 

Klicken Sie nach dem Speichern zur Überprüfung auf „Jetzt erstellen“. Wenn der Build fehlschlägt, können Sie den detaillierten Build-Prozess und die Fehlerinformationen in der Konsolenausgabe anzeigen.

Gehen Sie zurück zur Gogs-Management-Web-Hook-Seite und pushen Sie erneut. Bei Erfolg wird Jenkins automatisch erstellt und veröffentlicht. Danach wird es automatisch veröffentlicht, solange Sie zum Master-Zweig pushen.


Zusammenfassen

Ich habe einfach den gesamten Prozess meiner Bemühungen aufgezeichnet. Jenkins und Docker haben noch viele weitere Funktionen, die während der Verwendung nach und nach verstanden werden müssen.

Dies ist das Ende dieses Artikels über die Methode und Schritte der automatisierten Bereitstellung von .NetCore durch Gogs+Jenkins+Docker. Weitere verwandte Inhalte zur automatisierten Bereitstellung von .NetCore durch Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • ASP.NET Core-Entwicklung Docker-Bereitstellung
  • Stellen Sie Asp.Net Core (.Net6) in Docker unter Linux CentOS bereit
  • Prozessanalyse der Bereitstellung von ASP.NET Core-Anwendungen auf dem Linux-System Docker
  • Informationen zu Problemen bei der automatischen Bereitstellung von Jenkins + Docker + ASP.NET Core (Fallstricke vermeiden)
  • 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

<<:  So erhalten Sie die Schnittmenge/Differenz/Vereinigung zweier Mengen in MySQL

>>:  Eine kurze Diskussion über JavaScript-Drosselung und Anti-Shake

Artikel empfehlen

Codeanalyse synchroner und asynchroner SetState-Probleme in React

React entstand als internes Projekt bei Facebook....

So fügen Sie img-Bilder in Vue-Seiten ein

Wenn wir HTML lernen, führt das Bild-Tag <img&...

So beheben Sie den Startfehler des Docker-Containers

Frage: Nach dem Neustart des Computers kann der M...

Vue-Grundlagen MVVM, Vorlagensyntax und Datenbindung

Inhaltsverzeichnis 1. Vue-Übersicht Offizielle Vu...

So erlauben Sie allen Hosts den Zugriff auf MySQL

1. Ändern Sie den Host-Feldwert eines Datensatzes...

Vue implementiert das Ziehen und Sortieren von Bildern

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Schritte zum Erweitern der LVM-Festplatte unter Linux

1. Fügen Sie eine Festplatte hinzu 2. Überprüfen ...

Vergleich der von der MySQL-Datenbank unterstützten Speicher-Engines

Inhaltsverzeichnis Speicher-Engine Von MySQL unte...