Récemment, les dirigeants ont demandé aux projets locaux à Shanghai d'utiliser Jenkins pour réaliser un déploiement automatisé afin que les projets puissent être remis aux étudiants en fonctionnement et en maintenance pour réduire la charge de travail du développement. Enregistrez le processus d'escalade de cette fosse.
1. Préface
Jenkins est un outil d'intégration continue développé basé sur Java pour surveiller les travaux répétitifs continus, et ses fonctions incluent:
1. Projets de version / test de version du logiciel continu.
2. Surveillez les travaux exécutés par des appels externes.
J'ai téléchargé ce qui précède à partir de l'encyclopédie. Pour être honnête, je ne le comprenais pas. Qu'est-ce que c'est ça? En fait, en fonction de ma compréhension et de mon application actuelles, la chose la plus courante est le déploiement. D'autres fonctions doivent être étudiées (_) Le maître travaille actuellement dans une entreprise d'État inconnue à Shanghai. Le processus de version actuel du projet est:
1. Serveur local ou emballé utilise Maven pour faire un package de guerre
2. Connectez-vous au serveur de projet à distance ou SSH
3. Arrêtez Tomcat, supprimez l'ancien package et le cache et mettez le package nouvellement imprimé dans
4. Redémarrer Tomcat. Les étapes apparemment simples à suivre, mais cela prend en fait beaucoup de temps de développement.
Puis utilisez Jenkins:
1. Cliquez pour construire maintenant et terminer. Quoi? Cliquez simplement sur un bouton et c'est fait. Oui, c'est un bouton. En fait, après avoir cliqué sur le bouton, Jenkins vous a aidé à exécuter l'arrière-plan du processus ci-dessus. Cette fois, je vais présenter comment le faire fonctionner en arrière-plan.
2. Installation et construction
Cette introduction est basée sur Windows, qui peut être installé sur un ordinateur de développement ou un serveur Windows Server
1. Téléchargez Jenkins
Jenkins fournit plusieurs méthodes d'installation
1.1jenkins.msi L'installation est comme lorsque nous installons habituellement des logiciels, des points. Télécharger l'adresse: https://jenkins.io/download/
1.2jenkins.war Package Puisqu'il s'agit d'un package de guerre, il va sans dire que tout le monde sait comment le démarrer, jetez-le simplement dans Tomcat. Télécharger l'adresse: http://updates.jenkins-ci.org/download/war/
2. Commencez Jenkins
Je recommande personnellement la méthode d'installation de 1.1. Je rencontre souvent des problèmes de débordement de mémoire lors de l'utilisation de 1.2. Bien sûr, le débordement de la mémoire peut être ajusté, mais il y a une charge de travail supplémentaire.
En utilisant la méthode d'installation 1.1, une fois l'installation terminée, nous verrons le service Jenkins dans le service Windows. Comme indiqué dans la figure ci-dessous, commencez et fermez et redémarrez directement pour cliquer sur le service.
Si vous utilisez 1.2 pour télécharger le package de guerre, il existe en fait deux façons de le démarrer.
Le premier type est placé dans le conteneur Tomcat.
Le deuxième type consiste à entrer CMD dans le répertoire d'installation, Java -Jar Jenkins.war
3. Installer Jenkins
La méthode d'installation 1.1 et 1.2 est la même
Le port par défaut de Jenkins 8080, peut être modifié, méthode baidu.
Entrez http: // localhost: 8080 /. Le chemin de la police rouge a un mot de passe, remplissez le mot de passe, puis étape suivante.
Lors du choix d'un plug-in, il est recommandé de choisir un plug-in recommandé officiel pour éviter beaucoup de problèmes.
En attente d'installation ...
Après l'installation, vous verrez l'image ci-dessous. Le nom d'utilisateur et le mot de passe sont utilisés pour se connecter. Le nom complet est utilisé pour l'afficher. Continuez à l'étape suivante.
Parce que je veux déployer le projet Maven, il n'y a pas de maven dans le plugin par défaut de Jenkins, donc je dois l'installer d'abord.
Cliquez sur le plugin ci-dessous pour l'installer directement, les plugins d'intégration Maven
Installez le plugin de déploiement à chaud Déploiement du plugin de conteneur
4. Configurer Jenkins
Nous devons faire correspondre le fichier de paramètre Maven, l'adresse JDK et Maven. Le fichier de réglage doit être égalé. Ne l'utilisez pas par défaut. Parce que cela n'est pas égalé, vous avez du mal depuis longtemps.
Enfin, il suffit de postuler et d'économiser. N'oubliez pas de ne pas oublier de sauvegarder l'application, sinon ce sera en vain.
Ensuite, nous créerons un nouveau projet, entrez d'abord le nom du projet, sélectionnez le projet Maven, OK
Sélectionnez la gestion des codes source, comme nous sommes un projet d'entreprise, et non open source, utilisez SVN, choisissez Subversion pour configurer SVN
L'URL est votre adresse SVN, et les informations d'identification sont le mot de passe du compte
Ensuite, allez aux pas de pré-étapes, ce truc est les opérations nécessaires avant l'emballage. Par exemple, notre projet actuel doit copier le fichier log4j.xml, etc. Vous pouvez écrire des scripts Windows ou Shell en fonction de l'environnement
S'il n'y a pas d'opération, il n'est pas nécessaire de le faire correspondre.
Postez mon script pour votre référence. J'utiliserai xxx pour remplacer les pièces pertinentes.
@echo offrem set variable :: app.xxx app.xxx code local and répertoire set app.xxx = "d: / /svn/svn.173.xxx/app.xxx /" :: home.ommm de Log4j.xml Variable start :: home_omm_ommm4j_goal Home_omm_log4j_goals_path = "d: /svn/svn.173.xxx/app.xxx/src/home.ommm/src/main/resources" :: home_omm_log4j Le chemin du LOG4J.xml Environnement de test de home.ommm set Home_omm_log4j = "d: /svn/svn.173.xxx/app.xxx/config/home.ommm/sh_test/resources" :: home.ommm's LOG4J.xml end :: home.weixin's variable start :: home_weixin_log4j_goals_path le chemin du chemin du log4j. home.weixin's Log4j.xml home_weixin_log4j_goals_path = "d: /svn/svn.173.xxx/app.xxx/src/home.weixin/src/main/resources" :: home_weixin_log4j le chemin du log4j.xml Home_weixin_log4j = "d: /svn/svn.173.xxx/app.xxx/config/home.weixin/sh_test/resources" :: home_weixin_config.js_goals_path config.js chemin path Home_weixin_config.js_goals_path = "d: /svn/svn.173.xxx/app.xxx/src/home.weixin/src/main/webapp/module/js" :: home_weixin_config.js Home.ommm's Path's Home_Weixin_Config.js Home. associ Home_weixin_config.js = "d: /svn/svn.173.xxx/app.xxx/config/home.weixin/sh_test/webapp/module/js" :: home.weixin Variable end :: SERVICE START :: Service_log4j_goals_path the Chemin pour stocker le log4j.xml du service du service du service du service Service_log4j_goals_path = "d: /svn/svn.173.xxx/app.xxx/src/service/src/main/resources" :: Service_log4j Le chemin du chemin de l'environnement de test log4j.xml du service est défini Service_log4j = "d: /svn/svn.173.xxx/app.xxx/config/service/sh_test/resources" :: service_application_resources_all_goals_Path Service_application_resources_all_goals_path = "d: /svn/svn.173.xxx/app.xxx/src/service/src/main/resources/config/spring" :: Service_Application_Resources_All Application-Resources-All.xml Test d'environnement Set de chemin de chemin d'environnement de test de chemin de test de test de chemin de test de paths de test de test de chemin de test de test de test de test de test de test de test de test de test_resources_all Service_application_resources_all = "d: /svn/svn.173.xxx/app.xxx/config/service/sh_test/resources/config/spring" :: Service Variable End :: Service.refresh Variable Start :: Service_refresh_refresh. Service_refresh_log4j_goals_path = "d: /svn/svn.173.xxx/app.xxx/src/service.refresh/src/main/resources" :: service_refresh_log4j Service_refresh_log4j = "d: /svn/svn.173.xxx/app.xxx/config/service.refresh/sh_test/resources" :: service_refresh_application_resource_all_goals_path Le path pour stocker l'application-résains-all.xml est défini Service_refresh_application_resources_all_goals_path = "d: /svn/svn.173.xxx/app.xxx/src/service.refresh/src/main/resources/config/spring" :: service_refresh_application_resources_all Application-Resources-all.xml Test Sency Sency Service_refresh_application_resources_all = "d: /svn/svn.173.xxx/app.xxx/config/service.refresh/sh_test/resources/config/spring" :: service.refresh variable end :: % Home_omm_log4j_goals_path% / log4j.xml (del% home_omm_log4j_goals_path% / log4j.xml) cd% home_omm_log4j_goals_path% copier% home_omm_log4j% / log4j.xml log4j.xml: juge existi % Home_weixin_log4j_goals_path% / log4j.xml (del% home_weixin_log4j_goals_path% / log4j.xml) cd% home_weixin_log4j_goals_path% / log4j.xml) CD% home_weixin_log4j_goal % Home_weixin_log4j% / log4j.xml log4j.xml :: jugez si le fichier config.js de home.weixin existe si existez% home_weixin_config.js_goals_path% / config.js (del% home_weixin_config.js_goals_path% / config.js) % Home_weixin_config.js_goals_path% copy% home_weixin_config.js% / config.js config.js :: juger si le fichier de service config.xml existe si existe% service_log4j_goals_path% / log4j.xml) cd % Service_log4j_goals_path% copie% service_log4j% / log4j.xml log4j.xml :: juger si le fichier application-resources-all.xml du service existe si existe% service_application_resources_all_goals_path% / application-resources-all.xml (del. % Service_application_resources_all_goals_path% / application-resources-all.xml) cd% service_application_resources_all_goals_path% copie% service_application_resources_all% / application-resources-all.xml application-resources-all.xml: juge si le fichier log4j.xml % Service_refresh_log4j_goals_path% / log4j.xml (del% service_refresh_log4j_goals_path% / log4j.xml) cd% service_refresh_log4j_goals_path% copy% Service_refresh_log4j% / log4j.xml log4j.xml :: juge de l'application-fresour. File of Service.refresh existe s'il existant% service_refresh_application_resources_all_goals_path% / application-resources-all.xml (del% service_refresh_application_resources_all_goals_path% / application-résainces-all.xml) cd % Service_refresh_application_resources_all_goals_path% / application-resources-all.xml) cd% service_refresh_application_resources_all_goals_path% copy% Service_refresh_Application-all.xmlexit
Build a été compilé, spécifiant l'emplacement POM et la commande MVN. Soit dit en passant, vous pouvez également configurer l'espace de travail au niveau avancé, qui ne correspond pas à la valeur par défaut du répertoire d'installation de Jenkins.
Après le bâtiment, l'opération est où le mettre une fois le colis terminé. Sélectionnez l'image suivante
Après cette opération de construction, nous utilisons le déploiement à chaud de Tomcat. Vous pouvez vous référer à mon article précédent: le déploiement chaud de Tomcat
Guerre / oreille: l'adresse du package de guerre
Contexte: le nom du package déployé est-il
Le nom d'utilisateur / le mot de passe fait référence au compte / mot de passe pour le déploiement à chaud tomcat
URL: Interface Tomcat, telle que: http://172.16.101.71:8180/
5. Commencez à construire
Après avoir tellement parlé, il est enfin temps de venir. Le fonctionnement d'un bouton est enfin arrivé. Vous pouvez voir notre projet à votre retour à la page d'accueil de Jenkins.
Après la construction, cliquez sur l'état d'exécution de la construction dans le coin inférieur gauche pour voir que notre projet est en construction. Cliquez sur le nom du projet pour entrer
Sélectionnez la console pour voir le journal ou le message d'erreur imprimé pendant le processus de construction.
3. Problèmes existants
Le problème du rôle de Jenkins, puisqu'il est libéré, il implique l'environnement de production. Tous les utilisateurs ne peuvent pas avoir la permission de déployer l'environnement de production. Si quelqu'un clique accidentellement dessus. Les conséquences ... ne peuvent pas y croire.
Solution: Installez le plug-in de stratégie d'autorisation basée sur les rôles, reportez-vous aux étapes restantes: http://www.cnblogs.com/zz0412/p/jenkins_jj_14.html. Je ne suis pas détaillé.
Le problème du déploiement à chaud de Tomcat, la montée de la mémoire et le débordement après le déploiement plusieurs fois, arrêtent d'exécuter ou signalent une erreur. J'ai vérifié le problème du déploiement à chaud lui-même en ligne, et je recherche une solution ...
Solution: Il y a des problèmes avec le déploiement à chaud de Tomcat lui-même, et l'environnement de production n'adopte généralement pas la méthode de déploiement à chaud. Actuellement, comme mon environnement de test utilise le système Windows Server 2008, il adopte la méthode de déploiement à chaud. Le problème existe toujours. Cependant, j'ai lu un article qu'il peut être résolu à l'aide de la commande Windows Batch, qui est la commande BAT, mais je ne l'ai pas étudiée en profondeur. Dans le système Linux dans l'environnement de production, j'utilise actuellement le plug-in Publish Over SSH. Les étapes spécifiques consistent à ajouter les étapes ci-dessous à la configuration.
1. Dans la gestion du système -》 Paramètres système, recherchez Publier sur SSH et Entrée:
2. Configurer les étapes de publication
Ici, nous continuerons avec le projet ci-dessus. Cette configuration ne sera affichée qu'après l'installation du plug-in ci-dessus!
Transfert SetSource Files: indique le package de guerre local et le chemin de la téléchargement, vous pouvez vous rendre à l'espace de travail pour le voir.
Supprimer le préfixe: signifie le dossier à supprimer lors du téléchargement, c'est-à-dire que seul le package de guerre est téléchargé
Exercice à distance: désigne le chemin pendant l'exécution, ce qui équivaut à télécharger le package de guerre ici
Exec Commad: la commande à exécuter
Comme le montre la figure, le package de guerre sera placé dans le dossier Home / Admin, puis je exécuterai la commande shell que j'ai écrite. Il s'agit principalement d'arrêter Tomcat, de sauvegarder le package de guerre original, de supprimer le package de guerre original sous WebApp, de copier le nouveau package de guerre sous la maison / l'administrateur, le démarrage de Tomcat, puis c'est fait. Cela évite le problème du crash du serveur causé par un débordement de mémoire de déploiement à chaud.
Référence du script:
#! / bin / sh #defined tomcat_home = "/ usr / java / tomcat / apache-tomcat-7.0.67 /" id = `ps -ef | grep java | grep tomcat | awk '{imprimer $ 2}' `echo $ id echo" kill tomcat "kill -9 $ id echo" Remover War Fichier "cd" $ tomcat_home "/ webapps rm -rf javaweb-0.0.1-snapshot rm -rf javaweb-0.0.1-snapshot.war" warf to water.war "COPOR TO COPOD TO COPO / home / lin cp javaweb-0.0.1-snapshot.war "$ tomcat_home" / webapps cd "$ tomcat_home" / bin echo "start tomcat" ./startup.shLe problème du plugin de déploiement, le plugin Déployer vers le plugin de conteneur utilisé ci-dessus est utilisé pour implémenter le déploiement à chaud, mais le plugin de déploiement limite qu'un projet ne peut déploier qu'un seul package de guerre. Mon projet est que deux guerres séparées des extrémités avant et arrière d'un projet ne peuvent pas être construites deux fois,  ̄へ ̄.
Solution: essayez de ne pas utiliser de déploiement à chaud. Si l'environnement de test est temporairement utilisé, je construis actuellement deux nouveaux projets et ne compile qu'un seul package de guerre à la fois.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.