Jenkins verpackt Microservices, um Docker-Images zu erstellen und auszuführen

Jenkins verpackt Microservices, um Docker-Images zu erstellen und auszuführen

Umgebungsvorbereitung

1. Jenkins
2. GitLab
3.SonarQube
4. Hafen
5.Docker
6. Maven
7. JDK1.8
8. Microservice-Projekt

Der obige technische Teil wurde in meinem vorherigen Artikel geschrieben

Hier gibt es keine ausführliche Demonstration. Dieser Artikel konvertiert hauptsächlich zusammenhängend den Quellcode des Microservice-Projekts -> sendet ihn an das Remote-Repository GitLab -> Jenkins zieht den Code von Gitlab auf den Server -> SonarQube-Codeüberprüfung -> Maven kompiliert und verpackt -> erstellt Docker-Images -> pusht in das private Harbor-Image-Repository -> stellt auf anderen Servern bereit

Start

1. Das GitLab-Remote-Repository erstellt ein Microservice-Projekt

Bildbeschreibung hier einfügen

2. IDEA-Code wird zu Gitlab übertragen

Bildbeschreibung hier einfügen

Der Standardordner ist korrekt und muss daher nicht geändert werden.

Bildbeschreibung hier einfügen

Hinzufügen eines lokalen Repositorys

Bildbeschreibung hier einfügen

Lokales Repository übermitteln

Bildbeschreibung hier einfügen

Pushen des Remote-Repositorys

Bildbeschreibung hier einfügen

3. Jenkins erstellt ein Pipeline-Projekt

Bildbeschreibung hier einfügen

4. Parametrisierte Konstruktion

Bildbeschreibung hier einfügen

5. Ziehen Sie das Build-Skript des Remote-Repositorys

Bildbeschreibung hier einfügen

Anwendung speichern

6. Schreiben Sie das Remote-Review-Skript sonar-project.properties

Bildbeschreibung hier einfügen

Skripte erstellen

1. Code abrufen

Stufe('Code abrufen') {
      Kasse([$class: 'GitSCM', Zweige: [[name:"*/${branch}"]], doGenerateSubmoduleConfigurations: false, Erweiterungen: [], SubmoduleCfg: [], userRemoteConfigs: [[credentialsId: "${git_auth}", URL: "${git_url}"]]])
   }

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

2. Überprüfen Sie den Code

Phase('Codeüberprüfung') {
            //Definieren Sie das aktuelle SonarQubeScanner-Tool von Jenkins def scannerHome = tool 'SonarQube'
            //Referenzieren Sie die aktuelle JenkinsSonarQube-Umgebung mit SonarQubeEnv('SonarQube') {
                 sch """
                         cd ${project_name}//Dies ist der definierte Optionsparameter ${scannerHome}/bin/sonar-scanner
                 """
            }
   }

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

3. Installieren Sie gemeinsame Module

 stage('kompilieren, gemeinsame Unterprojekte installieren') {
      sh "mvn -f tensquare_common Neuinstallation"
   }

Bildbeschreibung hier einfügen

Server anzeigen

Bildbeschreibung hier einfügen

4. Microservices kompilieren und verpacken

 stage('Kompilieren, Microservice-Projekt verpacken') {
         sh "mvn -f ${project_name} sauberes Paket"
   }

Bildbeschreibung hier einfügen

Server anzeigen

Bildbeschreibung hier einfügen

Bisheriger Build-Prozess

Bildbeschreibung hier einfügen

5. Fügen Sie eine Dockerfile-Datei hinzu, um das Docker-Image-Projekt zu erstellen.

Bildbeschreibung hier einfügen

#VON java:8
#VON openjdk:11-jdk-alpine
VON openjdk:11
ARG JAR_FILE
KOPIEREN SIE ${JAR_FILE} app.jar
EXPOSE 9001
EINSTIEGSPUNKT ["java","-jar","/app.jar"]

Fügen Sie jedem Microservice-Projekt ein Dockerfile-Plugin hinzu Maven

			<Plugin>
                <groupId>com.spotify</groupId>
                <artifactId>Dockerfile-Maven-Plugin</artifactId>
                <version>1.3.6</version>
                <Konfiguration>
                    <repository>${Projekt.ArtefaktId}</repository>
                    <BuildArgs>
                        <JAR_FILE>Ziel/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </Konfiguration>
            </plugin>

Ändern Sie die Jenkinsfile-Dateidienstverpackung und fügen Sie "dockerfile:build" hinzu, um den Docker-Image-Build auszulösen

 stage('Kompilieren, Microservice-Projekt verpacken') {
         sh "mvn -f ${Projektname} sauberes Paket Dockerfile:build"
   }

Und zum Remote-Lager pushen

Jenkins-Neuaufbau

Bildbeschreibung hier einfügen

Server anzeigen

Docker-Bilder 

Bildbeschreibung hier einfügen

Image erfolgreich erstellt

6. Bild-Tagging

Öffentliche Eigenschaften

//Spiegelversionsnummer def tag = "latest"
// URL-Adresse des Hafens def harbor_url = "192.168.0.188:9123"
//Projektname der Spiegelbibliothek def harbor_project = "tensquare"
 stage('Microservice-Projekt kompilieren, verpacken und Image hochladen') {
         //Kompilieren und verpacken – Image erstellen sh "mvn -f ${project_name} clean package dockerfile:build"

         //Definieren Sie den Bildnamen def imageName = "${project_name}:${tag}"

         //Kennzeichnen Sie das Bild mit sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${imageName}"
   }

Pushen zum Remote-Server und Erstellen von Jenkins zum Anzeigen des Server-Image

Bildbeschreibung hier einfügen

7. Übertragen Sie das Bild in das private Lager von Harbor. Hier müssen Sie Geld abheben und ein Lager auf Harbor erstellen.
Jenkins fügt Harbor-Benutzeranmeldeinformationen hinzu

Bildbeschreibung hier einfügen

Geben Sie die Pipeline-Syntax ein, um die Hafensyntax zu generieren

Bildbeschreibung hier einfügen

stage('Microservice-Projekt kompilieren, verpacken und Image hochladen') {
         //Kompilieren und verpacken – Image erstellen sh "mvn -f ${project_name} clean package dockerfile:build"


         //Definieren Sie den Bildnamen def imageName = "${project_name}:${tag}"

         //Kennzeichnen Sie das Bild mit sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${imageName}"

         //Bild zu Harbor übertragen
         mitAnmeldeinformationen([BenutzernamePasswort(AnmeldeinformationenID: "${harbor_auth}", Passwortvariable: 'Passwort', Benutzernamevariable: 'Benutzername')]) {
             //Bei Harbor anmelden
             sh "Docker-Login -u ${Benutzername} -p ${Passwort} ${Harbor_URL}"
             //Bild hochladen sh "docker push ${harbor_url}/${harbor_project}/${imageName}"
             sh „Echo-Bild-Upload erfolgreich“
         }
   }

Remote-Warehouse pushen, Jenkins remote erstellen, das in das private Warehouse gepushte Image anzeigen

Bildbeschreibung hier einfügen

Remote-Push-Image erfolgreich! ! !

8. Laden Sie das Image herunter und starten Sie das Programm. Da Sie das Image herunterladen und das Programm remote starten müssen, müssen Sie zuerst das Plug-In „Publish Over SSH“ auf Jenkins installieren, um Shell-Befehle remote zu senden.

Bildbeschreibung hier einfügen

Konfigurieren des Plugins

Bildbeschreibung hier einfügen

Hierbei ist zu beachten, dass die beiden Server eine Kommunikation herstellen und eine SSH-Remoteverbindung verwenden müssen. Das heißt, Jenkins verwendet SSH, um den 188-Server ferngesteuert zu betreiben und das Image abzurufen. Beim Starten der Anwendung muss der Hostserver von Jenkins den öffentlichen und den privaten Schlüssel generieren und diese dann auf den 188-Server kopieren.
1. Wechseln Sie in das SSH-Verzeichnis

cd /root/.ssh
Bei entsprechender Aufforderung: bash: cd: .ssh: keine solche Datei oder kein solches Verzeichnis, führen Sie ssh-Hostname aus (Ihren eigenen Hostnamen)

2. Führen Sie den Befehl aus, um öffentliche und private Schlüssel auf dem Jenkins-Hostserver zu generieren

ssh-keygen -t rsa

Vergleichen Sie dann Folgendes

Bildbeschreibung hier einfügen

id_rsa ist der private Schlüssel id_rsa.pub ist der öffentliche Schlüssel

3. Kopieren Sie den öffentlichen Schlüssel id_rsa.pub auf den 188-Server

SSH-Kopie-ID 192.168.0.188

4. Überprüfen Sie den auf den 188-Server kopierten Schlüssel

Bildbeschreibung hier einfügen

5. Testen Sie die SSH-Remoteverbindung von Jenkins

Bildbeschreibung hier einfügen

Testerfolg

6. Verwenden Sie den Pipeline-Syntaxgenerator, um SSH-Befehle zu generieren

Bildbeschreibung hier einfügen

In Jenkinsfile kopieren

   //Anwendungsbereitstellung sh "echo Anwendungsbereitstellung"
         sshPublisher (Herausgeber: [sshPublisherDesc (Konfigurationsname: '188', Übertragungen: [sshTransfer (cleanRemote: false, schließt aus: '', execCommand: "/data/Jenkins_shell/deploy.sh $harbor_url $harbor_project $project_name $tag $port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', Quelldateien: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, ausführlich: false)])


/data/Jenkins_shell/deploy.sh Dieser Pfad verweist auf eine Skriptdatei, die zum Betreiben des Docker-Containers verwendet wird. Dieses Skript finden Sie weiter unten. $harbor_url Die private Repository-Adresse des Images $harbor_project Der Projektname im privaten Repository $project_name Der Projektname $tag Die Version des Images, die abgerufen werden soll $port Dieser Parameter muss auch im Jenkins-Build angegeben werden. Diese Parameter entsprechen eins zu eins den Parametern in dieser Datei.
#!/bin/sh
#Empfange externen Parameter harbor_url=$1
Hafenprojekt = $2
Projektname=$3
tag=$4
Hafen = $ 5

Bildname = $Harbor_URL/$Harbor_Projekt/$Projektname:$Tag

echo "$Bildname"

#Überprüfen Sie, ob der Container existiert. Wenn ja, löschen Sie ihn. containerId=`docker ps -a | grep -w ${project_name}:${tag} | awk '{print $1}'`
wenn [ "$containerId" != "" ] ; dann
    #Stoppen Sie den Container docker stop $containerId

    #Löschen Sie den Container docker rm $containerId
	
	echo "Container erfolgreich gelöscht"
fi

#Abfrage, ob das Image existiert, und wenn ja, lösche es imageId=`docker images | grep -w $project_name | awk '{print $3}'`

wenn [ "$imageId" != "" ] ; dann
      
    #Löschen Sie das Bild docker rmi -f $imageId
	
	echo "Bild erfolgreich gelöscht"
fi

# Melden Sie sich bei Harbor an
Docker-Login -u Benutzer -p 877425287Benutzer $harbor_url

# Laden Sie das Image herunter docker pull $imageName

# Starten Sie den Container docker run -di -p $port:$port $imageName

echo "Container erfolgreich gestartet"

Jenkins-Eingabe hinzufügen

Bildbeschreibung hier einfügen

Senden Sie den Code und beginnen Sie mit dem Erstellen

Bildbeschreibung hier einfügen

Erfolg aufbauen

Bildbeschreibung hier einfügen

Codeüberprüfung SonarQube

Bildbeschreibung hier einfügen

Spiegel-Repository Harbor

Bildbeschreibung hier einfügen

188 Spiegelbild vom Remote-Server abgerufen

Bildbeschreibung hier einfügen

Überprüfen des Startstatus des Containers

Bildbeschreibung hier einfügen

Zugriff auf den Testcontainer

Bildbeschreibung hier einfügen

Dies ist das Ende dieses Artikels über das Verpacken von Microservices mit Jenkins zum Erstellen und Ausführen von Docker-Images. Weitere Informationen zum Verpacken und Erstellen von Docker-Images mit Jenkins finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Schritte für Springboot Docker Jenkins zum automatischen Bereitstellen und Hochladen von Bildern
  • So erstellen Sie ein Docker-Image basierend auf Jenkins
  • Jenkins erstellt Docker-Image-Beispiel

<<:  Die Idee und der Prozess von Vue zur Realisierung der Funktion zum Speichern von Konto und Passwort

>>:  Selbstverständnis des Hintergrundpositionsattributs bei der Positionierung von Hintergrundbildern

Artikel empfehlen

【HTML-Element】So betten Sie Bilder ein

Mit dem img-Element können wir Bilder in HTML-Dok...

Analysieren Sie den Unterschied zwischen ES5 und ES6

Inhaltsverzeichnis Überblick Funktionssignatur Op...

So richten Sie ein Bereitstellungsprojekt unter einem Linux-System ein

1. Ändern Sie die Firewall-Einstellungen und öffn...

Element Plus implementiert Affix

Inhaltsverzeichnis 1. Komponenteneinführung 2. Qu...

HTML+CSS+JS zur Implementierung des Spiels „Nicht auf das Whiteboard treten“

Inhaltsverzeichnis Hintergrund 1. Gedankenanalyse...

Häufig verwendete höherwertige Funktionen und umfassende Beispiele in Vue

1. Häufig verwendete höherwertige Funktionen von ...

Top 10 der nützlichsten und wichtigsten Open-Source-Tools im Jahr 2019

In der Open-Source-Umfrage von Black Duck aus dem...

JS erhält Fünf-Sterne-Lob

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

Detailliertes Beispiel einer MySQL-Unterabfrage

Unterabfrageklassifizierung Klassifizierung nach ...

Zusammenfassung der Vue3-Slot-Nutzung

Inhaltsverzeichnis 1. Einführung in den V-Slot 2....