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
Java 1.8 Jenkins 2.891 Git 1.8.3.1 Github CentOS 7.2
Neuen Job erstellen Geben Sie unter Erstellen den Jobnamen ein, wählen Sie Freestyle-Projekt erstellen und klicken Sie auf OK.
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 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.
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.
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.
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.
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
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!
Diesmal hatte ich einen Senior im Labor, der mir half. Besonderer Dank geht an @cappyzawa, Shotaro! !! !! !!
Organisation der Webhook-Integration zwischen Jenkins und GitHub | Aiming Developer Blog