Un guide étape par étape pour créer le pipeline Jenkins
Why Jenkins Pipeline?
La livraison continue (CD) est une partie essentielle du cycle de vie DevOps.
Il s'assure que les développeurs de logiciels / applications créent toujours prêt pour la production. Pour que cela se produise, chaque fois que le code est mis à jour, il doit être construit, testé et déployé en continu. C'est là qu'intervient Jenkins Pipeline.
In DevOps, L'intégration continue et la livraison continue (CI / CD) sont réalisées via Jenkins Pipeline. L'utilisation de Jenkins Pipeline for CD permet de fournir le logiciel avec des versions plus rapides et fréquentes. Cela aide à intégrer les commentaires dans chaque prochaine version.
What is Jenkins Pipeline?
Jenkins Pipeline est une combinaison de tâches permettant de fournir des logiciels en continu en utilisant Jenkins.
Je suppose que vous savez ce qu'est Jenkins. Sinon, vérifiez ceci Cours Udemy pour maîtriser Jenkins.
Un pipeline Jenkins se compose de plusieurs états ou étapes, et ils sont exécutés dans une séquence l'un après l'autre. JenkinsFile est un simple fichier texte utilisé pour créer un pipeline sous forme de code dans Jenkins. Il contient du code en langage spécifique au domaine Groovy (DSL), qui est simple à écrire et lisible par l'homme.
Soit vous pouvez exécuter JenkinsFile séparément, soit vous pouvez également exécuter le code de pipeline à partir de l'interface utilisateur Web Jenkins. Il existe deux façons de créer un pipeline à l'aide de Jenkins.
- Déclaratif - une nouvelle façon de créer Jenkins Pipeline. Ici, vous écrivez du code groovy contenant des blocs «pipeline», qui est archivé dans un SCM (Source Code Management)
- Scripté - manière d'écrire du code groovy où le code est défini à l'intérieur de blocs «noeud».
Avant d'entrer dans la démo, si vous n'avez pas installé Jenkins, veuillez d'abord l'installer. Assurez-vous que Jenkins est opérationnel sur votre système.
Create a Jenkins Pipeline
Voici à quoi ressemble un flux de pipeline Jenkins, qui consiste en plusieurs étapes entre les développeurs créant un logiciel (codage) et un logiciel livré en production.
Créons un pipeline déclaratif.
Sur le tableau de bord Jenkins, cliquez sur Nouvel élément. Saisissez ensuite un nom d'élément, par exemple «Premier pipeline» et sélectionnez le projet «Pipeline». Cliquez ensuite sur OK.
Cliquez sur l'onglet Pipeline comme indiqué dans l'image ci-dessous et placez votre code JenkinsFile (Groovy Code) ici.
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Hi, GeekFlare. Starting to build the App.'
}
}
stage('Test') {
steps {
input('Do you want to proceed?')
}
}
stage('Deploy') {
parallel {
stage('Deploy start ') {
steps {
echo "Start the deploy .."
}
}
stage('Deploying now') {
agent {
docker {
reuseNode true
image ‘nginx’
}
}
steps {
echo "Docker Created"
}
}
}
}
stage('Prod') {
steps {
echo "App is Prod Ready"
}
}
}
}
Laissez-moi vous expliquer les blocs ci-dessus.
- Les pipeline block se compose de toutes les instructions pour créer, tester et livrer des logiciels. C'est le composant clé d'un pipeline Jenkins.
- An agent est assigné pour exécuter le pipeline sur un nœud et allouer un espace de travail pour le pipeline.
- A étape est un bloc qui comprend des étapes pour créer, tester et déployer l'application. Les étapes sont utilisées pour visualiser les processus Jenkins Pipeline.
- A étape est une tâche unique à effectuer, par exemple, créer un répertoire, exécuter une image docker, supprimer un fichier, etc.
Le code Groovy ci-dessus, j'utilise pour le JenkinsFile. Tout agent disponible est affecté au pipeline. Ensuite, je définis l'étape de construction et j'effectue une étape d'écho simple. Ensuite, j'ai défini l'étape Test où l'étape vous demande si vous voulez continuer ou non. Après cela, j'ai créé une étape de déploiement, qui comporte deux étapes supplémentaires en parallèle. L'étape de démarrage du déploiement a une étape avec la commande echo, et le déploiement a maintenant une étape qui extrait une image docker de Nginx sur le nœud. Enfin, il y a une étape Prod avec une simple étape d'écho.
Le pipeline expliqué ci-dessus comporte des étapes qui comportent des étapes simples pour vous permettre de comprendre son fonctionnement. Une fois que vous avez appris à créer un pipeline, vous pouvez ajouter plus de complexité et créer également des pipelines complexes.
Une fois que vous avez le code dans l'onglet Pipeline, cliquez sur Apply and Save. Enfin, cliquez sur Construire maintenant pour commencer à créer le pipeline Jenkins que vous venez de créer.
Voici à quoi ressemblera l'interface utilisateur lorsque le pipeline s'exécutera. Si vous avez suivi toutes les étapes correctement, votre build réussira et il affiche une couleur bleue pour le build (# 27). S'il y a des erreurs dans la construction, cela donnera une couleur rouge à la construction (# 27).
Maintenant, cliquez sur # 27 build, puis sur Console Output pour vérifier ce qui s'est exactement passé dans le back-end lors de son exécution.
Voici à quoi ressemblera la sortie se terminant par un message SUCCESS.
Success Console Output
Started by user geekflare
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/First Pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo
Hi, GeekFlare. Starting to build the App.
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] input
Do you want to proceed?
Proceed or Abort
Approved by geekflare
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] parallel
[Pipeline] { (Branch: Deploy start )
[Pipeline] { (Branch: Deploying now)
[Pipeline] stage
[Pipeline] { (Deploy start )
[Pipeline] stage
[Pipeline] { (Deploying now)
[Pipeline] getContext
[Pipeline] isUnix
[Pipeline] sh
[Pipeline] echo
Start the deploy ..
[Pipeline] }
+ docker inspect -f . nginx
[Pipeline] // stage
[Pipeline] }
Error: No such object: nginx
[Pipeline] isUnix
[Pipeline] sh
+ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
8d691f585fa8: Pulling fs layer
5b07f4e08ad0: Pulling fs layer
abc291867bca: Pulling fs layer
abc291867bca: Verifying Checksum
abc291867bca: Download complete
5b07f4e08ad0: Verifying Checksum
5b07f4e08ad0: Download complete
8d691f585fa8: Verifying Checksum
8d691f585fa8: Download complete
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete
abc291867bca: Pull complete
Digest: sha256:922c815aa4df050d4df476e92daed4231f466acc8ee90e0e774951b0fd7195a4
Status: Downloaded newer image for nginx:latest
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 125:131 -w "/var/lib/jenkins/workspace/First Pipeline" -v "/var/lib/jenkins/workspace/First Pipeline:/var/lib/jenkins/workspace/First Pipeline:rw,z" -v "/var/lib/jenkins/workspace/First Pipeline@tmp:/var/lib/jenkins/workspace/First Pipeline@tmp:rw,z" -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** nginx cat
$ docker top 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943 -eo pid,comm
[Pipeline] {
[Pipeline] echo
Docker Created
[Pipeline] }
$ docker stop --time=1 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
$ docker rm -f 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Prod)
[Pipeline] echo
App is Prod Ready
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Le pipeline Jenkins ci-dessus a créé une image docker de Nginx. Vous pouvez le vérifier en exécutant la commande ci-dessous. Vous pouvez voir que l'image du docker Nginx est également répertoriée.
geekflare@chef-geekflare:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 540a289bab6c 2 weeks ago 126MB
httpd latest 7d85cc3b2d80 2 months ago 154MB
redis latest f7302e4ab3a8 2 months ago 98.2MB
geekflare_mongodb latest 095d17727ca0 3 months ago 325MB
Conclusion
J'espère que cela vous donne une idée de Pipeline Jenkins avantages et comment vous pouvez en créer un. Ce qui précède est une simple démonstration, et la meilleure façon d'apprendre est d'essayer de construire des pipelines complexes.