Annuaire d'articles
avant-propos
Avec la maturité du développement logiciel, DevOps est profondément ancré dans le cœur des gens. En tant qu'élément important de DevOps : le déploiement automatisé a toujours été l'infrastructure prioritaire de chacun. En fait, il existe de nombreux outils de déploiement automatisé.Dans mon article précédent, j'ai écrit sur l'utilisation du Gitlab Runner de la famille Gitlab pour réaliser un déploiement automatisé. Cependant, limité par le fait que Gitlab Runner n'a pas de plug-ins et d'écologie, il a commencé à essayer de transférer vers Jenkins. Cet article enregistre uniquement le démarrage rapide du déploiement automatisé de Jenkins. Cet article ne couvre pas certaines opérations avancées telles que l'orchestration de processus, Jenkinsfile et WebHook.
1. Qu'est-ce que Jenkins ?
Jenkins est un serveur d'automatisation open source. Il aide à automatiser les parties du développement logiciel liées à la création, aux tests et au déploiement, facilitant l'intégration continue et la livraison continue. Il s'agit d'un système basé sur un serveur qui s'exécute dans un conteneur de servlet tel qu'Apache Tomcat. Il prend en charge les outils de contrôle de version, notamment AccuRev, CVS, Subversion, Git, Mercurial, Perforce, ClearCase et RTC, et peut exécuter Apache Ant, Apache Maven et des projets basés sur sbt ainsi que des scripts shell arbitraires et des commandes Windows batch.
2. Utilisez les étapes
2.1. Installation du logiciel
Un logiciel comme celui-ci suggère de choisir Docker sans réfléchir :
docker run \
-d \
-u root \
-p 8080:8080 \
-v /usr/local/docker/jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
--privileged=true \
--restart=always \
--name jendemo \
jenkinsci/blueocean
Une fois l'exécution réussie, vous pouvez accéder directement au port 8080 pour voir cette interface.
Saisissez le conteneur requis pour afficher le mot de passe de ce fichier :
docker exec -it jendemo bash
cat /var/jenkins_home/secrets/initialAdminPassword
Choisissez d'installer le plug-in recommandé.
Jenkins aura par défaut un environnement Java 11. Si vous avez besoin de Gradle et Maven, vous devez le configurer vous-même.
Le nom d'utilisateur et le mot de passe de l'administrateur peuvent être ce que vous voulez.
Cliquez sur Redémarrer et attendez un moment. Jenkins doit être redémarré à chaque installation du plug-in, il est très pratique pour nous d'utiliser Docker pour relancer directement la commande.
Après le redémarrage, accédez à Gestion du système -> Gestion des plug-ins et mettez à niveau tous les plug-ins qui doivent être mis à niveau. Installez également les plugins Gitlab et NodeJS, puis redémarrez.
2.2. Paramétrage logiciel
Dans la configuration globale de l'outil dans la gestion du système, vous pouvez sélectionner les environnements de Maven, Gradle et NodeJS, et vérifier l'installation automatique. Mais il y a un petit trou ici, c'est-à-dire qu'après avoir cliqué sur Enregistrer, il ne sera pas téléchargé et installé directement, mais uniquement lorsque le déclencheur est utilisé. Par exemple, Maven doit sélectionner l'option Maven dans le nouveau travail pour télécharger automatiquement ; pour Node, il doit cocher cette option pour télécharger automatiquement.
Étant donné que Jenkins exécute lui-même les commandes associées dans le conteneur, si vous pensez que la configuration de son environnement n'est pas facile à utiliser, vous pouvez le configurer et l'installer vous-même dans le conteneur.
3. Projet de printemps
3.1 Construction du projet
Jenkins peut être utilisé directement après avoir été configuré selon la deuxième étape.Pour vérification, nous créons un nouveau projet sur Gitlab, vérifions SpringWeb et écrivons un Controller :
@RestController
public class GreetingController {
@GetMapping("/greeting")
public String greeting() {
return "Hello Jenkins!";
}
}
Créez un docker
dossier dans le répertoire racine et placez- Dockerfile
y un fichier :
# 指定是基于哪个基础镜像
FROM java:8
# 作者信息
MAINTAINER Peach
# 挂载点声明
VOLUME /tmp
# 将本地的一个文件或目录,拷贝到容器的文件或目录里
ADD /build/libs/demo-0.0.1-SNAPSHOT.jar springboot.jar
#shell脚本
RUN bash -c 'touch /springboot.jar'
# 将容器的8000端口暴露,给外部访问。
EXPOSE 8080
# 当容器运行起来时执行使用运行jar的指令
ENTRYPOINT ["java", "-jar", "springboot.jar"]
注:我这里的Spring是用Gradle依赖的,如果用maven请自行替换Jar包位置和构建命令
3.2 Configuration de Jenkins
Sur la page d'accueil de Jenkins, créez une nouvelle tâche, sélectionnez Free Style :
Configurez le projet, sélectionnez Git ici pour la gestion du code source, puis mettez-y l'adresse de notre projet Gitlab et ajoutez un nom d'utilisateur et un mot de passe Gitlab dans Credentials.
La méthode http est utilisée ici. Si vous utilisez ssh, vous devez configurer les clés publiques et privées du conteneur et les transférer sur le compte Gitlab. Cet article vise à être rapide, donc je ne couvrirai pas cette méthode.
Ensuite, nous vérifions cette Build when a change is pushed to Gitlab
option et copions l'URL suivante.
Copiez l'URL ci-dessus dans Gitlab, puis cliquez sur Webhook :
après l'ajout, nous pouvons voir le crochet ici, et nous pouvons cliquer sur Tester pour le tester.
Retourner 200 signifie succès, de sorte que chaque fois que l'utilisateur soumet le code, Jenkins sera activement averti pour effectuer un déploiement automatique.
Mais si l'erreur 403 suivante se produit dans le test :
vous devez configurer une politique de sécurité dans Jenkins et cocher le bouton suivant :
Enfin, nous écrivons ce que Jenkins doit exécuter après avoir reçu cet événement. Dans la construction, nous avons ajouté un shell d'exécution :
pour exécuter des scripts Linux, vous pouvez exécuter ce que vous voulez. Ici, je construis le package Jar du projet via Gradle, puis je crée le Dockerfile, place le package Jar dans l'image Docker et le démarre.
gradle bootJar
docker rm -f app_docker
sleep 1
docker rmi -f app_docker:1.0
sleep 1
docker build -t app_docker:1.0 -f ./docker/Dockerfile .
sleep 1
docker run -d -p 5001:8080 --name app_docker app_docker:1.0
Dans la console, nous pouvons voir les informations d'exécution spécifiques. En fait, c'est la même chose que de taper des commandes sous Linux. Si quelque chose ne va pas, résolvez-le. Je pense que tu peux le faire.
Après avoir réussi ici, je peux accéder directement au port 5001 du serveur pour voir le contenu du contrôleur que nous avons écrit. Modifiez directement le contenu en Test123, attendez quelques secondes et actualisez pour voir le résultat.
3. Projet Vue
L'arrière-plan est en fait similaire à l'interface, rien de plus que d'utiliser Gradle pour l'arrière-plan et NodeJS pour l'interface. Il existe un moyen simple, qui consiste à exécuter le shell directement comme le projet Spring, puis à placer dist
le dossier mv dans le répertoire Nginx de l'hôte du serveur. J'utilise ici une méthode plus compliquée, je l'intègre dans Docker, puis je publie l'adresse du frontal via Docker.
Commençons par créer un dossier docker et Dockerfile dans le répertoire racine du projet frontal :
# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
N'oubliez pas de créer un WebHook avec le projet front-end dans Jenkins dans le front-end Gitlab~ et le projet Spring en arrière-plan, seule l'exécution du Shell est différente :
docker rm -f glmx-fornt
sleep 1
docker rmi -f glmx-fornt:1.0
sleep 1
docker build -t glmx-fornt:1.0 -f ./docker/Dockerfile .
sleep 1
docker run -d -p 5003:8080 --name glmx-fornt glmx-fornt:1.0
Après avoir téléchargé le code, attendez que la construction réussisse pour accéder au port 5003 du serveur pour voir le contenu frontal.
Résumer
Ce qui précède est le moyen simple d'utiliser Jenkins, j'espère qu'il pourra vous aider. Si vous avez des questions, n'hésitez pas à communiquer avec moi dans la zone de commentaires.