[JAVA] Github und Jenkins sind miteinander verbunden, um Anwendungen automatisch bereitzustellen.

Github und Jenkins sind miteinander verbunden, um Anwendungen automatisch bereitzustellen.

Einführung

Derzeit erstelle ich in meiner Abschlussarbeit ein System zum Speichern von Daten in einer Datenbank mithilfe von Spring Boot. Ich möchte die unvollendeten Funktionen lokal entwickeln und während des Betriebs des Systems parallel vorgehen, indem ich sie nach Abschluss des Systems auf den Server hochlade, damit die Dateneingabe selbst von jemand anderem als mir selbst unterstützt werden kann. Wenn Sie also nach Abschluss der Funktion einen Push an Github senden und diese automatisch als Auslöser auf dem Server bereitstellen können, kann der Benutzer (die Person, die hilft) das System mit der neuen Funktion (tatsächlich stoppt sie einige Sekunden lang), ohne das Betriebssystem anzuhalten ) Kann verwendet werden. Wenn ich also git push in das private Repository von git hub git, sendet git hub webhooks eine http-Anfrage an jenkins, und mit diesem als Auslöser klont genkins git und führt ein Shell-Skript aus, das die Spring-Anwendung erstellt und ausführt. Hinweis: Dies ist der Artikel am 15. Tag des Frühlings- / Frühlingsstiefel-Adventskalenders. Lol

Entwicklungsumgebung

Java 1.8 Jenkins 2.891 Git 1.8.3.1 Github CentOS 7.2

Einstellmethode

Jenkins Einstellungen

Neuen Job erstellen

Neuen Job erstellen Geben Sie unter Erstellen den Jobnamen ein, wählen Sie Freestyle-Projekt erstellen und klicken Sie auf OK. スクリーンショット 2017-12-15 10.46.12.png

URL-Einstellung für den Empfang von HTTP-Anforderungen

Anschließend wird der Einstellungsbildschirm angezeigt. Aktivieren Sie daher am Build-Trigger die Option "Remote erstellen" und geben Sie das Authentifizierungstoken ein. Das Authentifizierungstoken kann beliebig sein. Wenn das Authentifizierungstoken beispielsweise "Secret" lautet, ist JENKINS_URL / job / New / build? Token = Secret der Ort, an den Webhooks http-Anforderungen senden. Der Teil JENKINS_URL ist die URL, unter der Ihre Jenkins arbeiten. Drücken Sie vorerst einmal auf die Schaltfläche Speichern, um zu speichern.

Github Webhooks-Einstellungen

Github verfügt über eine Funktion namens Webhooks, die HTTP-Anforderungen an bestimmte URLs sendet, wenn bestimmte Ereignisse auftreten. Ich habe es diesmal benutzt. Öffnen Sie das Github-Repository des Systems, das Sie bereitstellen möchten, öffnen Sie Einstellungen und wählen Sie Webhooks aus Webhooks hinzufügen. スクリーンショット 2017-12-15 12.03.20.png

Beschreiben Sie die URL, die zuvor in Jenkins festgelegt wurde und die HTTP-Anforderung in der Payload-URL empfängt. Beim Schreiben in die URL müssen die Anmeldebenutzerinformationen hinzugefügt werden. URL ist http://[USER_ID]:[API_TOKEN]@[JENKINS_HOST]/job/[JOB_NAME]/[build|buildWithParameters]?token=[TOKEN_NAME] Benutzer-ID und API-Token können unter Jenkins → Jenkins-Verwaltung → Benutzerverwaltung → Klicken Sie auf das Einstellungssymbol → API-Token-Anzeige angezeigt werden. Wählen Sie die Standardanwendung "application / x-www-form-urlencoded" für den Inhaltstyp aus. Das Geheimnis ist leer. In der Spalte Welche Ereignisse möchten Sie diesen Webhook auslösen? Möchte Tory diesmal das Push-Ereignis durchführen. Aktivieren Sie Nur das Push-Ereignis Drücken Sie dann auf Webhooks hinzufügen. Wenn in der Spalte Letzte Lieferungen ein grünes Häkchen angezeigt wird, ist die Einstellung abgeschlossen. Wenn Sie einen 403-Fehler erhalten, können Sie das csrf-Token von jenkins deaktivieren. Nicht gut für die Sicherheit.

Erlaube Jenkins Benutzern, ssh zu github.

Erstellen Sie öffentliche und private Schlüssel für Jenkins-Benutzer

Sie sollten einen Jenkins-Benutzer haben, wenn Sie Jenkins installiert haben. Das Ausgangsverzeichnis des Jenkins-Benutzers lautet / var / lib / jenkins. Erstellen Sie hier ein .ssh-Verzeichnis und generieren Sie dort einen öffentlichen und einen privaten Schlüssel zur Authentifizierung.

$ cd /var/lib/Jenkins
$ sudo mkdir .ssh
$ sudo ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /var/lib/jenkins/.ssh/id_rsa
Enter passphrase (empty for no passphrase):(enter)
Enter same passphrase again:(enter)

Dadurch wird der Schlüssel generiert.

Registrieren Sie den öffentlichen Schlüssel des Jenkins-Benutzers in Ihrem Github-Konto

スクリーンショット 2017-12-15 13.01.03.png Fügen Sie die von `cat .ssh / id_rsa.pub` ausgegebenen Schlüsselinformationen zum Schlüssel des Github-Benutzers hinzu. Klicken Sie dazu mit der rechten Maustaste auf das Benutzersymbol in der oberen rechten Ecke von Github und klicken Sie auf Einstellungen → SSH- und GPG-Tasten. Geben Sie den Titel entsprechend mit der neuen SSH-Taste ein. Kopieren Sie die von `cat .ssh / id_rsa.pub` ausgegebenen Schlüsselinformationen und fügen Sie sie in den Schlüssel ein. Klicken Sie auf Add ssh key, um die Registrierung abzuschließen. Sobald dies erledigt ist, lassen Sie uns einmal zu Github gehen. `sudo -u jenkins ssh -T [email protected]` Hallo ~~~~~! Sie haben sich erfolgreich authentifiziert, aber GitHub bietet keinen Shell-Zugriff. Wenn Sie sehen, ist ssh erfolgreich. Wenn Sie nicht können, greifen Sie auf Port 443 zu. `ssh sudo -u jenkins ssh -T -p 443 [email protected]` Wenn dies erfolgreich ist, erstellen Sie eine Konfigurationsdatei in `/ var / lib / jenkins / .ssh`.

Erstellen Sie /var/lib/jenkins/.ssh/config. (Leute, die nicht früher ssh konnten)

Führen Sie den folgenden Befehl aus.

$ cd /var/lib/jenkins/.ssh  
$ sudo vi config

Inhalt der Konfiguration unten

.ssh/config


Host github.com
    User git
    Hostname ssh.github.com
    Port 443

Stellen Sie dies ein

$ sudo -u jenkins ssh -T [email protected]

Und früher Hi ~ ~ ~ ~! Sie haben sich erfolgreich authentifiziert, aber GitHub bietet keinen Shell-Zugriff. Wenn Sie dies nicht können, ändern Sie die Berechtigungen von "id_rsa" und "config", ändern Sie den Eigentümer in "Jenkins", erstellen Sie "/ var / lib / jenkins / .ssh / unknown_hosts" und ändern Sie die Berechtigungen und den Eigentümer ebenfalls in "Jenkins". Sollte gelöst werden.

Jenkins wieder einstellen

Legen Sie den zuvor erstellten Job fest. Klicken Sie oben links auf Einstellungen. Klicken Sie in der Spalte Erstellen auf Buildprozedur hinzufügen und dann auf Shell ausführen. Fügen Sie dort die folgende Shell hinzu

#Löschen Sie den vorherigen Federprozess und stoppen Sie die Federanwendung.
ps aux | grep java | [Name des Glases nach dem Bau].jar | grep -v sudo | awk '{print "kill -9 " $2}' | sudo  sh

#Wechseln Sie in das Verzeichnis, in dem Sie die Spring-Anwendung bereitstellen möchten. Diesmal/var/webapp/spring/Ich habe mich für die Bereitstellung entschieden (Berechtigungen und Eigentümer wurden festgelegt).
cd /var/webapp/spring/

#Entfernen Sie zuvor git geklonte Anwendungen
sudo rm -rf [Repository-Name]

#Git-Klon.
git clone [URL für ssh im Repository]

#Wechseln Sie in das Stammverzeichnis des geklonten Repositorys
cd [Repository-Name]

#Bauen Sie mit Maven. Beim Erstellen wird eine ausführbare JAR-Datei für Spring im Zielverzeichnis im Stammverzeichnis des Projekts erstellt.
sudo ./mvnw clean package

#JAR-Datei ausführen&Läuft im Hintergrund.--server.Sie können es an jedem beliebigen Port ausführen.
sudo java -jar ./target/[Name des Glases nach dem Bau].jar --server.port=8080  &

Speichern Sie es damit, und die Einstellungen sind abgeschlossen. Wenn Sie das JAR im Hintergrund ausführen, wird das Protokoll nicht angezeigt. Wenn Sie also die folgende Beschreibung in application.proparties von spring-boot schreiben, wird eine Protokolldatei mit dem Namen /logs/spring.log im Stammverzeichnis des Projekts erstellt und das Protokoll dort ausgespuckt.

/src/main/resource/application.proparties


logging.file=./logs/spring.log 

Prüfung

Nehmen Sie einige Änderungen am Projekt vor und git push, um es zu sehen. Dann wird der Jenkins-Job gestartet, und wenn der Job erfolgreich ist, wird er abgeschlossen. Es ist in Ordnung, wenn es ausgeführt wird, indem Sie die URL Ihrer Anwendung in den Browser eingeben!

abschließend

Diesmal hatte ich einen Senior im Labor, der mir half. Besonderer Dank geht an @cappyzawa, Shotaro! !! !! !!

Verweise

Organisation der Webhook-Integration zwischen Jenkins und GitHub | Aiming Developer Blog

Recommended Posts

Github und Jenkins sind miteinander verbunden, um Anwendungen automatisch bereitzustellen.
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Tomcat App Edition]
Geänderte Kommentare, die automatisch von Xcode und AppCode generiert werden
Automatische Bereitstellung in WildFly mit Jenkins, wenn SVN festschreibt