Implementierung der kontinuierlichen Integration von Jenkins+Docker

Implementierung der kontinuierlichen Integration von Jenkins+Docker

1. Einführung in Jenkins

Jenkins ist ein Open-Source-Softwareprojekt. Es handelt sich um ein auf Java basierendes Tool zur kontinuierlichen Integration. Es wird zur Überwachung kontinuierlicher, sich wiederholender Arbeiten verwendet. Ziel ist es, eine offene und benutzerfreundliche Softwareplattform bereitzustellen, um die kontinuierliche Integration von Software zu ermöglichen.

2. Jenkins installieren und bereitstellen

Download-Adresse: https://jenkins.io/download/

Ich lade das War-Paket hier herunter, Version: 1.642.3 LTS .war

1. Umweltinformationen

Hostname Betriebssystemversion IP-Adresse Installieren der Software
osb30 Redhat 6.5 172.16.206.30 Jenkins

2. Einen neuen Jenkins-Benutzer anlegen

[root@osb30 ~]# groupadd jenkins

[root@osb30 ~]# useradd -g jenkins jenkins

[root@osb30 ~]# id jenkins

UID = 501 (Jenkins) GID = 501 (Jenkins) Gruppen = 501 (Jenkins)

[root@osb30 ~]# echo "wisedu" | passwd --stdin jenkins &> /dev/null

3. Jenkins-Installationsmethode

Es gibt zwei Möglichkeiten, Jenkins zu installieren: Tomcat-Bereitstellung und Java-Bereitstellungsstart. In diesem Experiment nehme ich als Beispiel das Deployment und den Start unter Tomcat.

(1) Bereitstellung mit Tomcat

a. Installieren Sie zuerst Tomcat und JAVA und konfigurieren Sie die Umgebungsvariablen (dieser Schritt wird hier nicht beschrieben, die Java-Konfiguration ist unverzichtbar).

Ich habe hier jdk 1.8.0_65 installiert.

b. Legen Sie die von der offiziellen Website heruntergeladene Datei jenkins.war in das Verzeichnis webapps unter Tomcat, geben Sie das Verzeichnis /bin von Tomcat ein und starten Sie Tomcat, um Jenkins zu starten.

Ich verwende hier Tomcat8.

c. Beim Starten von Jenkins wird automatisch ein Jenkins-Verzeichnis unter dem Webapps-Verzeichnis erstellt. Die Zugriffsadresse lautet: http://localhost:8080/jenkins

[jenkins@osb30 ~]$ tar zxf apache-tomcat-8.0.30.tar.gz

[jenkins@osb30 ~]$ mv jenkins.war apache-tomcat-8.0.30/webapps/

[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30

[jenkins@osb30 apache-tomcat-8.0.30]$ bin/startup.sh

Jenkins-Home-Verzeichnis: /home/jenkins/.jenkins gefunden unter: $user.home/.jenkins

Wenn beim Start ein Fehler auftritt:

Ursache: java.awt.AWTError: Mit „:0“ als Wert der DISPLAY-Variable kann keine Verbindung zum X11-Fensterserver hergestellt werden …

lösen:

[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30/bin/

[jenkins@osb30 bin]$ vim catalina.sh

JAVA_OPTS="-Xms1024m -Xmx1024m -Djava.awt.headless=true"

d. Zugriff auf Jenkins

http://172.16.206.30:8080/jenkins

(2) Java-Bereitstellung startet Jenkins

Wechseln Sie in das Verzeichnis, in dem jenkins.war gespeichert ist, und geben Sie den folgenden Befehl ein:

$ java -jar jenkins.war

Sie können den Startport ändern

$ java -jar jenkins.war --httpPort=8000

Anschließend geben Sie http://localhost:8080 in den Browser ein (empfohlen wird Firefox oder Chrom). localhost kann dabei die lokale IP-Adresse oder der Computername sein. Sie können Jenkins öffnen, nach der Portänderung muss der Port der Zugriffsadresse synchron geändert werden.

4. Jenkins-Autorisierung und Zugriffskontrolle

Standardmäßig enthält Jenkins keine Sicherheitsüberprüfungen und jeder kann die Einstellungen und Jobs von Jenkins ändern und Builds starten. In großen Unternehmen, in denen mehrere Abteilungen koordiniert zusammenarbeiten müssen, führt das Fehlen jeglicher Sicherheitskontrollen offensichtlich zu zahlreichen Problemen. Wir können die Sicherheit von Jenkins auf folgende Weise verbessern:

Zugriff auf Jenkins: http://172.16.206.30:8080/jenkins

Klicken Sie auf „Systemverwaltung“ -> „Globale Sicherheit konfigurieren“ und dann auf „Sicherheit aktivieren“. Sie sehen, dass es viele Möglichkeiten gibt, die Autorisierung und Zugriffskontrolle von Jenkins zu verbessern:

Sehen Sie sich die Richtlinie an:

Wie in der Abbildung oben gezeigt, lautet die Standardeinstellung „Jeder Benutzer kann alles tun (ohne Einschränkungen)“.

Wir wählen „Dedizierte Jenkins-Benutzerdatenbank“ unter „Sicherheitsdomäne“ und „Benutzerregistrierung zulassen“ aus und klicken zunächst unter „Autorisierungsrichtlinie“ auf „Jeder Benutzer kann alles tun (ohne Einschränkungen)“, um zu verhindern, dass Jenkins nach der Registrierung nicht mehr verwaltet werden kann. Jetzt können Sie die Jenkins-Seite aktualisieren und die Anmelde- und Registrierungsschaltflächen in der oberen rechten Ecke sehen.

(1) Registrieren Sie ein Administratorkonto

Klicken Sie auf „Registrieren“ und registrieren Sie zunächst ein Administratorkonto.

b. Klicken Sie auf Systemverwaltung -> Globale Sicherheit konfigurieren, wählen Sie „Sicherheitsmatrix“ unter „Autorisierungsrichtlinie“, fügen Sie Benutzer/Gruppen hinzu – fügen Sie ein Administratorkonto hinzu – fügen Sie alle Berechtigungen für das Administratorkonto hinzu und aktivieren Sie die Funktionen, die der anonyme Benutzer kennen soll.

[Hinweis]: Anonyme Benutzer müssen hier die Leseberechtigung aktivieren. Andernfalls wird der nachfolgende automatische Build des Webhooks von GitHub oder Bitbucket nicht die Berechtigung haben.

Aktivieren Sie diese Option und klicken Sie auf Speichern.

Nach Abschluss dieses Vorgangs können Sie sich mit dem Administratorkonto anmelden und dem angemeldeten Benutzer alle Berechtigungen entziehen.

Die oben genannten Vorgänge können die Autorisierung und Zugriffskontrolle von Jenkins abschließen.

5. Jenkins-Systemkonfiguration

Melden Sie sich bei Jenkins – Systemverwaltung – Systemeinstellungen an und fügen Sie die erforderliche Funktionskonfiguration für Jenkins hinzu, die die folgenden Aspekte umfasst:

(1) JDK-Konfiguration

Klicken Sie in der JDK-Option auf „JDK hinzufügen“, brechen Sie die automatische Installation ab und geben Sie den JDK-Alias ​​(beliebiger Name) ein. JAVA_HOME sollte jedem bekannt sein. Geben Sie einfach den HOME-Speicherort des auf dem Server installierten Java-Programms ein, auf dem sich Jenkins befindet. Geben Sie je nach Betriebssystem unterschiedliche Pfade ein, z. B. Win7 D:\Java\jdk1.8 Linux /usr/lib/jvm/jdk1.7.0_51.

Bitte denken Sie daran, nach der Einstellung zu speichern.

(2) Fügen Sie eine Git/SVN-Versionskontrolle hinzu

Wählen Sie den Pfad der Anwendung aus, die die Version entsprechend der verwendeten Version steuert, z. B. die JDK-Konfiguration.

[Hinweis]: Wenn Sie Git als Versionskontroll-Repository verwenden, ist Git in Jenkins nicht standardmäßig installiert. Wir müssen Git in der Plug-In-Verwaltungsoberfläche auswählen und direkt auf „Installieren“ klicken.

Klicken Sie auf „Systemverwaltung“ -> „Plugins verwalten“ -> „Optionale Plugins“ und geben Sie „git“ in das Feld „Filter“ in der oberen rechten Ecke ein, um zu suchen:

Suchen Sie nach dem Git-Client-Plugin und dem Git-Plugin, setzen Sie ein √ davor und klicken Sie, um es direkt zu installieren.

Plugin wird installiert. . .

Starten Sie Jenkins nach erfolgreicher Installation neu.

[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30

[jenkins@osb30 apache-tomcat-8.0.30]$ bin/shutdown.sh

[jenkins@osb30 apache-tomcat-8.0.30]$ bin/startup.sh ;tail -f logs/catalina.out

(3) Fügen Sie die Maven-Konfiguration zu Jenkins hinzu

Stellen Sie zunächst fest, ob Maven auf dem Host installiert ist, auf dem sich Jenkins befindet:

# mvn –version

-bash: mvn: Befehl nicht gefunden

Falls nicht installiert, installieren Sie bitte zuerst Maven.

a. Installieren Sie Maven auf CentOS

[root@osb30 ~]# cd /usr/local/

[root@osb30 lokal]# wget http://apache.opencas.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

 

[root@osb30 lokal]# tar zxf apache-maven-3.3.9-bin.tar.gz

[root@osb30 lokal]# ln -s apache-maven-3.3.9 maven

[root@osb30 lokal]# vim /etc/profile

# Fügen Sie die folgende Konfiguration hinzu:

# Maven-Konfiguration.

MAVEN_HOME=/usr/local/maven

export PATH=$MAVEN_HOME/bin:$PATH

[root@osb30 lokal]# Quelle /etc/Profil

 

[root@osb30 lokal]# mvn -version

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 11.11.2015T00:41:47+08:00)

Maven-Startseite: /usr/local/maven

Java-Version: 1.8.0_65, Anbieter: Oracle Corporation

Standardgebietsschema: en_US, Plattformcodierung: UTF-8

Betriebssystemname: „Linux“, Version: „2.6.32-431.el6.x86_64“, Architektur: „amd64“, Familie: „Unix“

b.Maven in Jenkins konfigurieren

Melden Sie sich nach Abschluss der Installation bei Jenkins an. Klicken Sie auf Systemverwaltung -> Systemeinstellungen.

3. Jenkins erstellt Jobs im Maven-Stil

1. Erstellen Sie eine neue Maven-Aufgabe

Melden Sie sich bei Jenkins an und klicken Sie auf „Neu“. Geben Sie den Elementnamen ein, wählen Sie „Ein Maven-Projekt erstellen“ und klicken Sie auf „OK“.

2. Aufgabenkonfiguration erstellen

3. Konfiguration der Quellcodeverwaltung

Gehen Sie zur Konfigurationsseite und suchen Sie „Quellcodeverwaltung“. Ich verwende hier svn, also gebe ich die Adresse des Repository ein, in dem sich das Projekt befindet.

4. Triggerkonfiguration erstellen

Unter „Quellcodeverwaltung“ finden Sie „Build Triggers“.

„Build Trigger“ ist ein Trigger-Plugin für kontinuierliche Integration, das basierend auf den Ergebnissen abgeschlossener Builds neue Jobs auslösen oder Parameter übergeben kann. Die Standardoption ist „Erstellen, wenn eine SNAPSHOT-Abhängigkeit erstellt wird“, was bedeutet, dass das Projekt erstellt wird, wenn der Code aktualisiert wird.

Erstellen Sie regelmäßig und Poll SCM kann geplante automatische Builds einrichten. Der Unterschied zwischen beiden ist folgender:

  • Poll SCM: Überprüfen Sie regelmäßig Änderungen am Quellcode (entsprechend der Versionsnummer der SCM-Software). Wenn ein Update vorliegt, checken Sie den neuesten Code aus und führen Sie anschließend einen Build durch.
  • Regelmäßig erstellen: Erstellen Sie das Projekt regelmäßig (es spielt keine Rolle, ob sich der Quellcode geändert hat).

Ich habe es so eingestellt, dass alle 12 Stunden ein Build erfolgt.

5. Maven-Build-Einstellungen

(1) Vorschritt

Mit der Option „Pre Steps“ wird das Werk vor dem Erstellen konfiguriert. Hier werden keine Änderungen vorgenommen.

(2) Konfigurieren Sie Root POM und Ziele und Optionen

Da es sich um ein Maven-Projekt handelt, verfügen die Build-Optionen über Einstellungen für Root-POM sowie Ziele und Optionen. Root-POM: Geben Sie den Speicherort der pom.xml-Datei Ihres Projekts ein. Hinweis: Dies ist ein relativer Speicherort. Wenn die Datei nicht vorhanden ist, wird eine rote Eingabeaufforderung angezeigt.

Hier bin ich zum Beispiel:

(3) Schritte nach dem Posten

Nachdem das Maven-Projekt erstellt wurde, müssen wir die War-Datei jedes Mal, wenn der Build abgeschlossen ist, auch auf dem Alibaba Cloud-Host veröffentlichen, um eine automatische Veröffentlichung zu erreichen. Wir implementieren die automatische Veröffentlichung durch Hinzufügen einer Shell.

Suchen Sie unter „Post-Schritte“ nach der Ausführungsshell:

[Hinweis]: Jenkins führt das Shell-Skript als Benutzer Jenkins aus. Achten Sie in einigen Szenarien auf die Umgebungsvariable PATH.

Konfigurieren Sie den Alibaba Cloud-Host so, dass er dem Jenkins-Host im Intranet vertraut:

Da sich das War-Paket auf dem Intranet-Server befindet und die veröffentlichte Umgebung auf dem Alibaba Cloud-Host liegt, müssen Sie das gegenseitige Vertrauen des Hosts konfigurieren, um zu verhindern, dass beim SCP des War-Pakets ein Kennwort eingegeben werden muss. Die IP meines Intranetservers ist 172.16.206.30 und die externe IP ist 114.55.29.246.

[jenkins@osb30 ~]$ ssh-keygen -t rsa -f .ssh/id_rsa

[jenkins@osb30 ~]$ ssh-copy-id -i .ssh/id_rsa.pub [email protected]

4. Jenkins E-Mail-Benachrichtigungseinstellungen

1. Konfigurieren Sie die integrierte E-Mail-Funktion von Jenkins

(1) Suchen Sie die Systemeinstellungen

(2) Geben Sie die E-Mail-Adresse des Systemadministrators ein

[Hinweis]: Die E-Mail-Adresse des Systemadministrators muss ausgefüllt werden, sonst kann die E-Mail nicht gesendet werden, auch die Test-E-Mail unten kann nicht gesendet werden.

(3) Suchen Sie die E-Mail-Benachrichtigung, geben Sie die SMTP-Serveradresse ein, klicken Sie auf „Erweitert“ und geben Sie das Absenderkonto und das Passwort ein.

(4) Aktivieren Sie „Testen Sie die Konfiguration, indem Sie eine Test-E-Mail senden“ und geben Sie das Empfängerkonto ein

An dieser Stelle können wir bereits E-Mails versenden. Suchen Sie in der spezifischen Jobkonfiguration nach „Build-Einstellungen“ und geben Sie die E-Mail-Adresse des Empfängers ein. Sie werden jedoch feststellen, dass E-Mails nur gesendet werden können, wenn der Build fehlschlägt. Sie können das E-Mail-Erweiterungs-Plugin installieren, um es anzupassen.

2. Installieren und verwenden Sie das E-Mail-Erweiterungs-Plugin

(1) Installieren Sie das E-Mail-Erweiterungs-Plugin

Dieses Plugin unterstützt Jenkins Version 1.5 und höher.

Gehen Sie zu Systemverwaltung – Plugin-Verwaltung – E-Mail-Erweiterungs-Plugin installieren. Es kann Build-Berichte basierend auf den Build-Ergebnissen senden. Dieses Plugin unterstützt Jenkins Version 1.5 und höher.

[Hinweis]: Wenn Sie das E-Mail-Erweiterungs-Plugin nach der Installation verwenden, können Sie auf die integrierte E-Mail-Funktion verzichten.

(2) Konfigurieren und Verwenden des E-Mail-Erweiterungs-Plugins

Klicken Sie auf „Systemkonfiguration“ -> „Systemeinstellungen“.

Suchen Sie nach „Erweiterte E-Mail-Benachrichtigung“ und geben Sie die folgende Konfiguration ein:

【Hinweis】: Der obige Benutzername und das Passwort sind erst nach dem Klicken auf „Erweiterte Einstellungen“ sichtbar. Sie müssen den Benutzernamen und das Passwort eingeben, sonst kann die E-Mail nicht gesendet werden.

Klicken Sie unten auf „Speichern“.

Gehen Sie dann zur Jobkonfigurationsseite, um dieses Plugin zu aktivieren. Suchen Sie das Element, das Sie per E-Mail versenden möchten, und klicken Sie darauf.

Klicken Sie auf „Konfigurieren“, klicken Sie auf „Post-Build-Aktion hinzufügen“ und wählen Sie „Bearbeitbare E-Mail-Benachrichtigung“ aus.

Hängen Sie das Build-Protokoll an und klicken Sie auf „Erweiterte Einstellungen“.

Trigger konfigurieren:

Ausführlichere Einführung: http://www.cnblogs.com/zz0412/p/jenkins_jj_01.html

5. Sonar

Offizielle Dokumentation: http://docs.sonarqube.org/display/SONARQUBE45/Documentation

1. Einführung in das Sonar

Sonar ist eine Open-Source-Plattform für Codequalitätsmanagement, die zum Verwalten der Qualität von Java-Quellcode verwendet wird. Über den Plug-In-Mechanismus kann Sonar verschiedene Testtools, Codeanalysetools und Tools zur kontinuierlichen Integration wie pmd-cpd, checkstyle, findbugs und Jenkins integrieren. Diese Ergebnisse werden mithilfe verschiedener Plug-Ins erneut verarbeitet und Änderungen der Codequalität werden quantitativ gemessen. Dadurch lässt sich die Codequalität für Projekte unterschiedlicher Größe und Art problemlos verwalten.

Im Gegensatz zu Tools zur kontinuierlichen Integration (wie Hudson/Jenkins) zeigt Sonar die Ergebnisse verschiedener Codeprüftools (wie FindBugs, PMD usw.) nicht einfach direkt auf der Webseite an, sondern verarbeitet diese Ergebnisse mithilfe verschiedener Plug-Ins erneut und misst die Änderungen der Codequalität quantitativ, sodass die Codequalität von Projekten unterschiedlicher Größe und Art problemlos verwaltet werden kann.

In Bezug auf die Unterstützung anderer Tools bietet Sonar nicht nur Unterstützung für IDE, sodass Sie Ergebnisse online in Tools wie Eclipse und IntelliJ IDEA anzeigen können. Sonar bietet auch Schnittstellenunterstützung für eine große Anzahl kontinuierlicher Integrationstools, sodass die Verwendung von Sonar bei der kontinuierlichen Integration sehr bequem ist.

Darüber hinaus können die Plug-Ins von Sonar auch andere Programmiersprachen als Java unterstützen und verfügen auch über eine gute Unterstützung für Internationalisierung und Berichtsdokumentation.

2. Umweltanforderungen

http://docs.sonarqube.org/display/SONAR/Requirements

3. Neuen Benutzer anlegen

[root@osb30 ~]# Groupadd-Sonar

[root@osb30 ~]# useradd -g sonar sonar

[root@osb30 ~]# ID-Sonar

UID = 502 (Sonar) GID = 502 (Sonar) Gruppen = 502 (Sonar)

[root@osb30 ~]# echo "wisedu" | passwd --stdin sonar &> /dev/null

4. JDK installieren

[sonar@osb30 ~]$ java -version

Java-Version „1.8.0_65“

Java(TM) SE-Laufzeitumgebung (Build 1.8.0_65-b17)

Java HotSpot(TM) 64-Bit Server VM (Build 25.65-b01, gemischter Modus)

5. Installieren und konfigurieren Sie die Datenbank

[root@osb30 ~]# mysql -uroot –p

mysql> DATENBANK ERSTELLEN Sonar-ZEICHENSATZ utf8 SORTIMENT utf8_general_ci;

mysql> ERSTELLEN SIE BENUTZER ‚sonar‘ IDENTIFIZIERT DURCH ‚sonar‘;

mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIZIERT DURCH 'wisedu';

mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIZIERT DURCH 'wisedu';

mysql> FLUSH-PRIVILEGIEN;

6. Sonar installieren

Die Version die ich hier verwende ist SonarQube 4.5.7 (LTS*), lade die Software in das Home-Verzeichnis des Sonar-Benutzers hoch.

[sonar@osb30 ~]$ unzip -oq sonarqube-4.5.7.zip

[sonar@osb30 ~]$ vim sonarqube-4.5.7/conf/sonar.properties

Passen Sie die folgenden Felder an (konfigurieren Sie lediglich die Datenbankinformationen, ansonsten muss nichts geändert werden):

sonar.jdbc.Benutzername: Sonar

sonar.jdbc.password: wisedu

sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

 

# Optionale Eigenschaften

sonar.jdbc.driverClassName: com.mysql.jdbc.Driver

7. Sonar starten

Sonar integriert standardmäßig den Jetty-Container, der zum Bereitstellen von Diensten direkt gestartet oder über ein Skript in ein War-Paket integriert und in einem Tomcat-Container bereitgestellt werden kann.

Der Standardport von Sonar ist „9000“, der Standardkontextpfad ist „/“, die Standardnetzwerkschnittstelle ist „0.0.0.0“ und das Standardadministratorkonto und -kennwort sind: admin/admin. Diese Parameter können in der Konfigurationsdatei sonar.properties geändert werden. Ich habe hier den Port geändert, da Port 9000 dieser Maschine durch andere Programme belegt ist.

[sonar@osb30 ~]$ vim sonarqube-4.5.7/conf/sonar.properties

sonar.web.port=9003

[sonar@osb30 ~]$ sonarqube-4.5.7/bin/linux-x86-64/sonar.sh starten

Zeigen Sie die Protokolle an:

[sonar@osb30 ~]$ tail -f sonarqube-4.5.7/logs/sonar.log

Beim ersten Start können Sie die Initialisierungsanweisung sehen:

8. Sonar schließen

[sonar@osb30 ~]$ sonarqube-4.5.7/bin/linux-x86-64/sonar.sh stoppen

9. Zugriff auf Sonar

Geben Sie http://172.16.206.30:9003/ in Ihren Browser ein

Das Standardadministratorkonto und -kennwort lauten: admin/admin.

10. Sonar-Plugin

Sonar unterstützt eine Vielzahl von Plug-Ins. Die Download-Adresse des Plug-Ins lautet: http://docs.codehaus.org/display/SONAR/Plugin+Library

Laden Sie das heruntergeladene Plug-In in das Verzeichnis ${SONAR_HOME}extensions\plugins hoch und starten Sie Sonar neu.

Sonar integriert standardmäßig das Plugin „Java Ecosystem“, eine Sammlung von Plugins:

  • Java [Sonar-Java-Plugin]: Java-Quellcodeanalyse, Berechnungsindikatoren usw.
  • Squid [sonar-squid-java-plugin]: Überprüft Code, der gegen von Sonar definierte Regeln verstößt
  • Checkstyle [sonar-checkstyle-plugin]: Verwenden Sie CheckStyle, um Code zu überprüfen, der gegen den einheitlichen Codierstil verstößt
  • FindBugs [sonar-findbugs-plugin]: Verwenden Sie FindBugs, um nach fehlerhaftem Code zu suchen, der gegen die Regeln verstößt
  • PMD [sonar-pmd-plugin]: Verwenden Sie pmd, um Code zu überprüfen, der gegen Regeln verstößt
  • Surefire [sonar-surefire-plugin]: Führen Sie Unit-Tests mit Surefire aus
  • Cobertura [sonar-cobertura-plugin]: Code-Abdeckung mit Cobertura ermitteln
  • JaCoCo [sonar-jacoco-plugin]: Code-Abdeckung mit JaCOCO ermitteln

11. Integration mit Jenkins

Es kann über Maven oder direkt mit Jenkins integriert werden. Ich entscheide mich hier für die direkte Integration mit Jenkins.

(1) Ändern Sie die Hauptkonfigurationsdatei von Maven (Datei ${MAVEN_HOME}/conf/settings.xml oder Datei ~/.m2/settings.xml), fügen Sie Zugriff auf die Sonar-Datenbank und die Sonar-Dienstadresse hinzu und fügen Sie die folgende Konfiguration hinzu:

<Profil>

<id>Sonar</id>

<Eigenschaften>

    <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar</sonar.jdbc.url>

    <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>

    <sonar.jdbc.Benutzername>Sonar</sonar.jdbc.Benutzername>

    <sonar.jdbc.password>Sonar</sonar.jdbc.password>

    <sonar.host.url>http://localhost:9003</sonar.host.url> <!-- Zugriffsadresse des Sonar-Servers-->

</Eigenschaften>

</Profil>

 

<aktiveProfile>

    <activeProfile>Sonar</activeProfile>

</aktiveProfile>
...

(2) Wählen Sie in der Jenkins-Plugin-Verwaltung die Installation des Sonar-Jenkins-Plugins aus, das es dem Projekt ermöglicht, bei jedem Erstellen Sonar zur Codemessung aufzurufen.

a. Installieren Sie das Plugin

b. Sonarkonfiguration zur Systemkonfiguration hinzufügen

Rufen Sie die Systemkonfigurationsseite auf, um das Sonar-Plug-In zu konfigurieren, wie unten gezeigt:

Klicken Sie dann unten auf „Speichern“.

c. Konfigurieren Sie das Build-Projekt und fügen Sie die Post Build Action hinzu

Klicken Sie auf das Projekt, das Sie erstellen möchten, und klicken Sie dann links auf „Konfigurieren“.

Suchen Sie unten auf der Seite nach „Aktionen nach dem Build“ und wählen Sie SonarQube aus.

Die Verwendung des SonarQube Maven Builders wird nicht mehr empfohlen. Es ist besser, SonarQube in der Build-Umgebung einzurichten und ein standardmäßiges Jenkins Maven-Ziel zu verwenden.

【lösen】:
http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins

Ändern Sie den Build:

Gehen Sie abschließend zu Jenkins, um das Projekt zu erstellen, und überprüfen Sie nach dem Erstellen die Sonar-Konsole:

12. Häufig gestellte Fragen

Nachdem Jenkins den Code erstellt hat, scannt Sonar ihn und meldet einen Fehler:

Lösung: Deinstallieren Sie das Sonar-JavaScript-Plugin.

6. Jenkins mit Docker kombinieren

Ich verwende hier keine Docker Pipeline. Ich führe das Shell-Skript einfach aus, nachdem der Build abgeschlossen ist, was flexibler ist.

1. Bereitstellungsprozess

  • F&E-Push zur SVN-Codebasis
  • Jenkins erstellt, extrahiert SVN-Code und verwendet Maven zum Kompilieren und Verpacken
  • Verpacken Sie den generierten Code, generieren Sie eine neue Version des Images und pushen Sie es in den lokalen Docker-Repository-Port
  • Release: Die Testmaschine ruft die neue Version des Images ab, löscht den ursprünglichen Container und führt die neue Version des Images erneut aus.

2. Umgebungsbeschreibung

Hostname Betriebssystemversion IP-Adresse verwenden Installieren der Software
osb30 Redhat 6.5 172.16.206.30 SVN-Code-Repository, Jenkins, Docker Jenkins, SVN, Docker 1.7.1
Funke32 CentOS 7.0 172.16.206.32 Lokales Docker-Repository, Testumgebung für die Geschäftsbereitstellung Hafen, Docker 17.06.1-ce

3. Konfiguration

Da Docker auf der Jenkins-Maschine als Root-Benutzer und Jenkins als normaler Benutzer „Jenkins“ ausgeführt wird, müssen Sie zuerst den Jenkins-Benutzer konfigurieren, um den Docker-Befehl verwenden zu können.

[root@osb30 ~]# sichtbar

jenkins ALL=(root) NOPASSWD: /usr/bin/docker

Konfigurieren Sie außerdem auf der Jenkins-Maschine:

# Deaktivieren Sie „ssh hostname sudo <cmd>“, da das Kennwort dann im Klartext angezeigt wird.

# Sie müssen „ssh -t hostname sudo <cmd>“ ausführen.

#

#Standardanforderungen

Standardmäßig: jenkins !requiretty

Wenn dies nicht konfiguriert ist, wird beim Ausführen des folgenden Skripts ein Fehler gemeldet:

+ cp -f /home/jenkins/.jenkins/workspace/godseyeBranchForNov/godseye-container/target/godseye-container-wisedu.war /home/jenkins/docker-file/godseye_war/godseye.war

+ sudo docker login -u jkzhao -p Wisedu123 -e [email protected] 172.16.206.32

sudo: Entschuldigung, Sie müssen ein TTY haben, um sudo auszuführen

Konfigurieren Sie auf der Maschine 172.16.206.32:

#visudo

#

#Standardanforderungen

Standardmäßig: root !requiretty

Andernfalls wird beim Ausführen des Skripts auf dem Computer 172.16.206.32 ein Fehler gemeldet:

[SSH] wird ausgeführt...

sudo: Entschuldigung, Sie müssen ein TTY haben, um sudo auszuführen

Docker: ungültiges Referenzformat.

4. Plugins installieren

Melden Sie sich bei Jenkins an, klicken Sie auf „Systemverwaltung“, klicken Sie auf „Plugins verwalten“, suchen Sie nach dem Plugin „SSH-Plugin“ und installieren Sie es.

Melden Sie sich bei Jenkins an, klicken Sie auf „Anmeldeinformationen“ und dann auf „Domäne hinzufügen“.

Klicken Sie auf „Systemverwaltung“, „Systemkonfiguration“ und suchen Sie nach „SSH-Remote-Hosts“.

5. Post-Schritte konfigurieren

Die weiteren Konfigurationen des Projekts bleiben unverändert, siehe Abschnitt oben.

[Hinweis]: Das im Skript verwendete Lager und das Authentifizierungskonto müssen zuerst im Hafen erstellt werden.

# Jenkins-Maschine: Nach Abschluss der Kompilierung generiert build eine neue Version des Images und überträgt sie in das Remote-Docker-Repository # Variablen

JENKINS_WAR_HOME='/home/jenkins/.jenkins/workspace/godseyeBranchForNov/godseye-container/target'

DOCKERFILE_HOME='/home/jenkins/docker-file/godseye_war'

HARBOR_IP='172.16.206.32'

REPOSITORIES='godseye_war/godseye'

HARBOR_USER='jkzhao'

HARBOR_USER_PASSWD='Wisedu123'

HARBOR_USER_EMAIL='[email protected]'

 

# Kopieren Sie den neuesten War in das Docker-File-Verzeichnis.

\cp -f ${JENKINS_WAR_HOME}/godseye-container-wisedu.war ${DOCKERFILE_HOME}/godseye.war

 

# Bild der frühen Version löschen.

sudo docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} -e ${HARBOR_USER_EMAIL} ${HARBOR_IP} 

IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`

wenn [ -n "${IMAGE_ID}" ];dann

    sudo docker rmi ${IMAGE_ID}

fi

 

# Bild erstellen.

cd ${DOCKERFILE_HOME}

TAG=`Datum +%J%M%T-%H%M%S`

sudo docker build -t ${HARBOR_IP}/${REPOSITORIES}:${TAG} . &>/dev/null

 

# Zum Hafenregister pushen.

sudo docker push ${HARBOR_IP}/${REPOSITORIES}:${TAG} &>/dev/null 

# Ziehen Sie das Bild und veröffentlichen Sie HARBOR_IP='172.16.206.32'

REPOSITORIES='godseye_war/godseye'

HARBOR_USER='jkzhao'

HARBOR_USER_PASSWD='Wisedu123'

 

# Melden Sie sich bei Harbor an

#docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}

 

# Container stoppen und löschen.

CONTAINER_ID=`docker ps | grep "godseye_web" | awk '{print $1}'`

wenn [ -n "$CONTAINER_ID" ]; dann

    Docker stoppt $CONTAINER_ID

    docker rm $CONTAINER_ID

sonst #Wenn der Container nicht gestartet werden kann, benötigen Sie docker ps -a, um den Container zu finden. CONTAINER_ID=`docker ps -a | grep "godseye_web" | awk '{print $1}'`

    if [ -n "$CONTAINER_ID" ]; then # Wenn dies das erste Mal ist, dass der Container auf dieser Maschine abgerufen und ausgeführt wird, kann docker ps -a diesen Container nicht finden. docker rm $CONTAINER_ID

    fi

fi

 

# Löschen Sie die frühe Version des Bildes godseye_web.

IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`

wenn [ -n "${IMAGE_ID}" ];dann

    Docker RMI ${IMAGE_ID}

fi

 

# Bild ziehen.

TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"//g'` #Das letzte sed dient zum Entfernen der doppelten Anführungszeichen vor und nach dem Tag docker pull ${HARBOR_IP}/${REPOSITORIES}:${TAG} &>/dev/null

 

# Laufen.

docker run -d --name godseye_web -p 8080:8080 ${HARBOR_IP}/${REPOSITORIES}:${TAG}

Dies ist das Ende dieses Artikels über die Implementierung der kontinuierlichen Integration von Jenkins+Docker. Weitere relevante Inhalte zur kontinuierlichen Integration von Jenkins Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Methode zur Realisierung einer automatisierten Bereitstellung basierend auf Docker + Jenkins
  • Detailliertes Tutorial zum Bereitstellen von Jenkins basierend auf Docker
  • Docker-Container verwendet Jenkins zum Bereitstellen von Webprojekten (Zusammenfassung)
  • Jenkins erstellt Docker-Image-Beispiel
  • Analyse der containerisierten Technologiearchitektur Jenkins Docker K8s-Skript

<<:  Grundlegendes zum MySQL-Abfrageoptimierungsprozess

>>:  Empfehlen Sie 60 Paging-Fälle und bewährte Vorgehensweisen

Artikel empfehlen

Detaillierte Erklärung der CSS-Stil-Kaskadierungsregeln

Der Syntaxstil der CSS-Stilregel ist die Grundein...

Vue realisiert kaskadierende Auswahl von Provinzen, Städten und Bezirken

Vor Kurzem musste ich einen kaskadierenden Auswah...

JavaScript implementiert den Front-End-Countdown-Effekt

In diesem Artikel wird der spezifische JavaScript...

Block- und Zeilenelemente, Sonderzeichen und Verschachtelungsregeln in HTML

Wenn wir die Verschachtelungsregeln grundlegender...

Ein kurzes Verständnis der Unterschiede zwischen MySQL InnoDB und MyISAM

Vorwort MySQL unterstützt viele Arten von Tabelle...

Datenabfragevorgang im MySQL-JSON-Format

Der Standardtabellenname ist „base_data“ und der ...

Erfahren Sie mehr über die Verwendung regulärer Ausdrücke in JavaScript

Inhaltsverzeichnis 1. Was ist ein regulärer Ausdr...

Beispiel für den Import von Nginx-Protokollen in Elasticsearch

Die Nginx-Protokolle werden von Filebeat gesammel...

Vue muss Wissenspunkte lernen: die Verwendung von forEach()

Vorwort Bei der Frontend-Entwicklung stoßen wir h...

Einführung und Verwendung von Triggern und Cursorn in MySQL

Trigger-Einführung Ein Trigger ist eine spezielle...