[JAVA] Github et Jenkins sont liés pour déployer automatiquement des applications.

Github et Jenkins sont liés pour déployer automatiquement des applications.

introduction

Actuellement, je crée un système pour stocker des données dans une base de données en utilisant Spring Boot dans ma thèse de fin d'études. Je voudrais développer localement les fonctions inachevées et procéder en parallèle lors de l'exploitation du système en le téléchargeant sur le serveur lorsque le système est terminé afin que l'entrée de données elle-même puisse être aidée par quelqu'un d'autre que moi. Donc, si vous pouvez pousser vers Github lorsque la fonction est terminée et la déployer automatiquement sur le serveur avec comme déclencheur, l'utilisateur (personne qui aide) le système avec la nouvelle fonction (en fait, il s'arrête pendant quelques secondes) sans arrêter le système d'exploitation ) Peut être utilisé. Ainsi, à partir du local, lorsque je git push vers le référentiel privé de git hub, les webhooks git hub envoient une requête http à jenkins, et avec cela comme déclencheur, jenkins git clone et exécute un script shell qui construit et exécute l'application spring. Remarque: il s'agit de l'article sur le 15e jour du calendrier de l'Avent Spring / Spring Boot. Lol

Environnement de développement

Java 1.8 Jenkins 2.891 Git 1.8.3.1 Github CentOS 7.2

Méthode de réglage

paramètres de Jenkins

Créer un nouveau travail

Créer un nouveau travail Entrez le nom du travail à partir de Créer, sélectionnez Construire un projet Freestyle, puis cliquez sur OK. スクリーンショット 2017-12-15 10.46.12.png

Paramètre d'URL de réception des requêtes HTTP

Ensuite, l'écran de configuration apparaîtra, donc cochez Build à distance au déclencheur de construction et entrez le jeton d'authentification. Le jeton d'authentification peut être n'importe quoi. Par exemple, si le jeton d'authentification est Secret, JENKINS_URL / job / New / build? Token = Secret sera l'endroit où les webhooks enverront des requêtes http. La partie JENKINS_URL est l'URL où votre jenkins fonctionne. Pour le moment, appuyez une fois sur le bouton Enregistrer pour enregistrer.

Paramètres des Webhooks Github

Github dispose d'une fonctionnalité appelée Webhooks qui envoie des requêtes HTTP à une URL spécifiée lorsqu'un événement particulier se produit. Je l'ai utilisé cette fois. Ouvrez le référentiel Github du système que vous souhaitez déployer, ouvrez Setting et sélectionnez Add webhooks from Webhooks. スクリーンショット 2017-12-15 12.03.20.png

Décrivez l'URL qui a été définie dans Jenkins plus tôt et reçoit la requête HTTP dans l'URL de la charge utile. Il est nécessaire d'ajouter les informations de connexion de l'utilisateur lors de l'écriture dans l'URL. L'URL est http://[USER_ID]:[API_TOKEN]@[JENKINS_HOST]/job/[JOB_NAME]/[build|buildWithParameters]?token=[TOKEN_NAME] L'ID utilisateur et le jeton API peuvent être vus dans jenkins → gestion jenkins → gestion des utilisateurs → cliquez sur l'icône de configuration → affichage du jeton API. Sélectionnez l'option par défaut «application / x-www-form-urlencoded» pour le type de contenu. Le secret est vide. Quels événements souhaitez-vous déclencher ce webhook? Parce que Tory souhaite créer l'événement push cette fois. Vérifier uniquement l'événement push Appuyez ensuite sur Ajouter des webhooks et s'il y a une coche verte dans la colonne Livraisons récentes, le réglage est terminé. Si vous obtenez une erreur 403, vous pouvez décocher le jeton jenkins csrf. Pas bon pour la sécurité.

Autorisez les utilisateurs jenkins à ssh sur github.

Créer des clés publiques et privées pour les utilisateurs jenkins

Vous devriez avoir un utilisateur jenkins lorsque vous avez installé jenkins. Le répertoire personnel de l'utilisateur jenkins est / var / lib / jenkins. Créez un répertoire .ssh ici et générez une clé publique et une clé privée pour l'authentification.

$ 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)

Cela générera la clé.

Enregistrez la clé publique de l'utilisateur jenkins dans votre compte Github

スクリーンショット 2017-12-15 13.01.03.png Ajoutez les informations de clé générées par `cat .ssh / id_rsa.pub` à la clé de l'utilisateur github. Pour ce faire, cliquez avec le bouton droit sur l'icône de l'utilisateur dans le coin supérieur droit de github et cliquez sur Paramètres → Clés SSH et GPG. Entrez le titre de manière appropriée avec la nouvelle clé ssh, Copiez et collez les informations de clé produites par `cat .ssh / id_rsa.pub` dans la clé. Cliquez sur Ajouter une clé ssh pour terminer l'enregistrement. Une fois que cela est fait, ssh vers github une fois. `sudo -u jenkins ssh -T [email protected]` Bonjour ~~~~~! Vous vous êtes authentifié avec succès, mais GitHub ne fournit pas d'accès au shell. Si vous voyez, ssh réussit. Si vous ne pouvez pas, accédez-y sur le port 443. `ssh sudo -u jenkins ssh -T -p 443 [email protected]` Si ssh réussit, créez un fichier de configuration dans `/ var / lib / jenkins / .ssh`.

Créez /var/lib/jenkins/.ssh/config. (Les gens qui ne pouvaient pas ssh plus tôt)

Exécutez la commande suivante.

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

Contenu de la configuration ci-dessous

.ssh/config


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

Réglez ceci

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

Et plus tôt Salut ~ ~ ~ ~! Vous vous êtes authentifié avec succès, mais GitHub ne fournit pas d'accès shell. Si vous ne pouvez pas, changez les permissions de ʻid_rsaet deconfig, changez le propriétaire en jenkins, créez / var / lib / jenkins / .ssh / known_hosts`, et changez les permissions et le propriétaire en jenkins également. Doit être résolu.

Régler Jenkins à nouveau

Définissez le Job que vous avez créé précédemment. Cliquez sur Paramètres en haut à gauche. Cliquez sur Ajouter une procédure de génération dans la colonne Génération, puis sur Exécuter Shell. Ajoutez le shell suivant ici

#Supprimez le processus de ressort précédent et arrêtez l'application du ressort.
ps aux | grep java | [Nom du pot après la construction].jar | grep -v sudo | awk '{print "kill -9 " $2}' | sudo  sh

#Accédez au répertoire dans lequel vous souhaitez déployer l'application Spring. Cette fois/var/webapp/spring/J'ai décidé de déployer sur (les privilèges et les propriétaires ont été définis)
cd /var/webapp/spring/

#Supprimer l'application précédemment clonée par git
sudo rm -rf [Nom du référentiel]

#git clone.
git clone [URL pour ssh dans le référentiel]

#Déplacer vers le répertoire racine du référentiel cloné
cd [Nom du référentiel]

#Construisez avec Maven. Une fois construit, un fichier jar exécutable Spring est créé dans le répertoire cible du répertoire racine du projet.
sudo ./mvnw clean package

#Exécuter le fichier jar&Fonctionne en arrière-plan.--server.Vous pouvez l'exécuter sur n'importe quel port de votre choix.
sudo java -jar ./target/[Nom du pot après la construction].jar --server.port=8080  &

Enregistrez-le avec ceci et les paramètres sont terminés. Si vous exécutez le fichier jar en arrière-plan, vous ne pourrez pas voir le journal, donc si vous écrivez la description suivante dans application.proparties de spring-boot, un fichier journal appelé /logs/spring.log sera créé sous le répertoire racine du projet et le journal y sera craché.

/src/main/resource/application.proparties


logging.file=./logs/spring.log 

tester

Apportez quelques modifications au projet et git push pour le voir. Ensuite, le travail jenkins démarrera, et si le travail réussit, il sera terminé. C'est OK s'il est exécuté en tapant l'URL de votre application dans le navigateur!

en conclusion

Cette fois, j'ai demandé à une personne âgée du laboratoire de m'aider. Remerciements spéciaux @cappyzawa, Shotaro! !! !! !!

Les références

Organisation de l'intégration Webhook entre Jenkins et GitHub | Blog des développeurs de visée

Recommended Posts

Github et Jenkins sont liés pour déployer automatiquement des applications.
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Tomcat App Edition]
Commentaires modifiés automatiquement générés par Xcode et AppCode
Déployer automatiquement sur WildFly avec Jenkins lorsque SVN s'engage