Planification d’un travail à Jenkins

Planifier un travail à Jenkins

1. introduction

Dans cet article, nous aborderons différentes manières de planifier des tâches dans Jenkins.

Nous commencerons par planifier une tâche simple qui effectue quelque chose d'aussi simple que l'impression d'un message en texte brut. Et nous allons faire évoluer l'exemple vers la planification d'une tâche qui est automatiquement déclenchée par des modifications dans un référentiel SCM tel que GitHub, Bitbucket, etc.

2. La configuration initiale

Nous supposons queJDK and Maven have been installed in Global Tool Configuration with names as JDK9.0.1 and Maven3.5.2, respectivement, sur le serveur Jenkins.

Cela suppose également quewe’ve got access to an SCM repository comme Bitbucket avec un projet Maven correctement configuré.

3. Planification d'un travail simple

Dans la page de configuration de la tâche, faisons défiler vers le bas jusqu'à la sectionBuild Triggers. Puisque nous avons l’intention de créer une tâche simple, cochez la caseBuild periodically. Dès que nous cochez cette case, une zone de texte s'affiche avec le libelléSchedule.

We have to provide value in a Cron-compliant format. De nombreuses informations sont disponibles sur la page si nous cliquons sur le point d'interrogation à côté de la case.

Tapons ici*/2 * * * *, ce qui représente un intervalle de deux minutes:

image

 

Lorsque vous quittez la zone de texte, vous pouvez voir des informations juste en dessous. Cela nous indique quand le travail sera exécuté ensuite.

Sauvegardons le travail - dans environ deux minutes, nous devrions voir l'état de la première exécution du travail:

image

Étant donné que nous avons configuré la tâche pour qu'elle s'exécute toutes les deux minutes, nous devrions voir plusieurs numéros de build lorsque nous revenons au tableau de bord de la tâche après avoir attendu un certain temps.

4. Création d'un travail qui interroge SCM

Avançons d'un pas en avant et créons une tâche qui extrait le code source du référentiel SCM tel que Bitbucket et effectue une compilation.

Créons une nouvelle tâche comme expliqué dans la section précédente, avec quelques modifications.

Dans la sectionBuild Triggers,instead of selecting Build Periodically, let’s select Poll SCM. Dès que nous faisons cela, nous devrions voir une zone de texte avec LabelSchedule.

Tapons*/5 * * * * dans cette zone, ce qui signifie que nous voulons planifier l'exécution de la tâche toutes les 5 minutes:

image

Faisons défiler jusqu'à la sectionSource Code Management. En sélectionnant le bouton radio à côté deGit, une nouvelle section apparaît intituléeRepositories.

This is where we need to configure details of our SCM repository. Tapons l'URL du référentiel SCM dans le champ de texteRepository URL:

image

Nous devons également fournir les informations d'identification de l'utilisateur afin que Jenkins puisse accéder au référentiel.

Cliquons sur le boutonAdd à côté des informations d'identification, qui affichera un écran contextuel pour créer les informations d'identification de l'utilisateur.

Sélectionnons lesKind commeUsername with Password. Nous devrons taper le nom d'utilisateur et le mot de passe dans les champs de texte désignés:

image

En cliquant sur le boutonAdd, nous sommes ramenés à la sectionSource Code Management.

Sélectionnez ces informations d'identification utilisateur dans la liste déroulante à côté deCredentials:

image

La dernière chose à faire est de configurer le script de construction.

Faisons défiler jusqu'à la sectionBuild, cliquez surAdd build step et sélectionnezExecute Shell. Puisque nous travaillons sur un projet Maven dans le référentiel SCM,we need to type mvn clean install, which will perform a Maven build.

Essayons de comprendre ce que nous avons fait ici.

Nous avons créé une tâche qui doit s'exécuter toutes les 5 minutes. The job’s been configured to pull source code from the master branch of the given Bitbucket repository.

Il utilisera les informations d'identification fournies pour se connecter à Bitbucket.

Après avoir extrait le code source, le travail exécutera le script contenant une commande Maven fournie.

Maintenant, si nous économisons et attendons environ cinq minutes, nous devrions voir l'exécution de la construction dans la sectionBuild History du tableau de bord du travail.

LesConsole Output doivent afficher la sortie de la compilation Maven. Nous pouvons voir dans la sortie de la console que le code source a été extrait de Bitbucket et que la commandemvn clean install a été exécutée:

image

Puisqu'il s'agit d'une version Maven,the console output might be very long depending on the number of Maven dependencies that are downloaded.

Mais à la fin de la sortie, nous devrions voir le messageBUILD SUCCESS.

5. Création d'un travail utilisant le pipeline comme script

Jusqu'à présent, nous avons vu comment créer des tâches qui s'exécutent à l'heure planifiée prédéfinie.

Maintenant, créons une tâche qui n'est liée à aucun calendrier particulier. Au lieu de cela, nous allons le configurer pour qu'il se déclenche automatiquement chaque fois qu'il y a un nouveau commit dans le référentiel SCM.

Pour revenir au tableau de bord Jenkins, cliquons surNew Item. Cette fois, au lieu deFreestyle project, nous sélectionneronsPipeline. Nommons cette tâchePipelineAsScriptJob.

En cliquant sur le bouton OK, nous serons redirigés vers la page de configuration du pipeline. Cette page comporte plusieurs sections telles que «General”Build Triggers”, «Advanced Project Options” et«Pipeline”.

Faisons défiler jusqu'à la section «Build Triggers” et la case à cocher de sélection à côté deBuild when a change is pushed to Bitbucket. This option will be available only if we’ve installed the Bitbucket Plugin:

image

Faisons défiler jusqu'à la sectionPipeline. Nous devons sélectionnerPipeline Script dans la liste déroulante à côté deDefinition.

La zone de texte située juste en dessous de cette liste déroulante attend que le script soit placé dans. Il y a deux façons de procéder.

Nous pouvons soit taper le script entier, soitwe can make use of a utility provided by Jenkins, which is known as Pipeline Syntax.

Choisissons la deuxième option:

image

Au clic dePipeline Syntax, comme mis en évidence dans le schéma ci-dessus, un nouvel onglet s'ouvre dans le navigateur. Il s'agit d'un utilitaire pratique où nous pouvons spécifier l'opération que nous souhaitons effectuer, etthe tool will generate the script in Groovy pour nous. Nous pouvons ensuite copier le script et le coller dans la configuration du pipeline.

Sélectionnonscheckout: General SCM dans la liste déroulanteSample Step. Après avoir fourni l'URL du repo SCM et les informations d'identification de l'utilisateur, nous devons cliquer sur le boutonGenerate Pipeline Script.

Cela génère le script dans la zone de texte:

image

Copions ce script et sauvegardons-le quelque part pour une utilisation ultérieure.

Sur la même page, faisons défiler vers le haut et sélectionnonswithMaven: Provide Maven environment dans la liste déroulanteSample Step. Il faut noter ici, quethis option will be available only if Pipeline Maven Integration Plugin is installed.

Nous devons sélectionner les noms des installations Maven et JDK en regard des listes déroulantes correspondantes. Nous devons cliquer sur le boutonGenerate Pipeline Script.

Cela génère le script dans la zone de texte:

image

Sauvegardons le script.

Il reste encore quelques scripts à générer. Sélectionneznode: Allocate node dans la liste déroulanteSample Step, typemaster dans le champ de texteLabel et cliquez surGenerate Pipeline Script:

image

Sauvegardons le script.

Et dernier.

Sélectionnonsstage: Stage dans la liste déroulanteSample Step, saisissezscm dans le champ de texteStage Name et cliquez surGenerate Pipeline Script:

image

Sauvegardons-le.

Il est temps de rassembler tous les scripts générés jusqu'à présent et de les assembler:

node('master') {
    stage('scm') {
        checkout([$class: 'GitSCM',
          branches: [[name: '*/master']],
          doGenerateSubmoduleConfigurations: false,
          extensions: [],
          submoduleCfg: [],
          userRemoteConfigs: [[credentialsId: 'e50f564f-fbb7-4660-9c95-52dc93fa26f7',
          url: 'https://[email protected]/projects/springpocrepo.git']]])
    }

    stage('build') {
        withMaven(jdk: 'JDK9.0.1', maven: 'Maven3.5.2') {
            sh 'mvn clean install'
        }
    }
}

La première instruction,node(‘master') dans le script ci-dessus,indicates that the job will be executed on a node named master, qui est le nœud par défaut sur le serveur Jenkins.

Copions le script ci-dessus dans la zone de texte de la sectionPipeline:

image

Sauvegardons cette configuration.

Désormais, il n’y a qu’une chose qui est laissée de côté. Nous devons configurer un Webhook dans Bitbucket. The Webhook is responsible for sending out a push notification to Jenkins server, whenever a particular event takes place in Bitbucket.

Voyons comment le configurer.

Connectez-vous à Bitbucket et sélectionnez un référentiel. Nous devrions voir une optionSettings dans la colonne de gauche. Cliquons dessus, et nous devrions voir une optionWebhooks dans la sectionWORKFLOW. Créons un nouveau Webhook.

Nous devons fournir un nom à ce webhook dans le champTitle. Nous devons également fournir une URL pour le webhook dans le champURL. Cette URL doit pointer vers un point de terminaison d'API REST particulier fourni par Jenkins, et ce point de terminaison estbitbucket-hook.

It must be noted that the URL MUST end with a trailing slash:

image

 

Lors de la configuration du Webhook ci-dessus, nous avons sélectionné l'optionRepository push. This means Bitbucket will send a notification to Jenkins server whenever a push happens.

Ce comportement peut être modifié. Il existe plusieurs options différentes à choisir.

Pour l'instant, allons-y avec l'option par défaut, c'est-à-direRepository Push.

We can setup webhook in Github, too; here fournit des informations utiles sur la façon de configurer cela.

En bref: nous avons créé un script de pipeline en langage Groovy -that should pull the source code from the master branch du référentiel SCM fourni (en utilisant les informations d'identification utilisateur fournies),whenever there’s a push in the repository puisexecute mvn clean install command on the Jenkins server.

Il faut noter que ce travail ne s’exécutera pas à un moment donné. Au lieu de cela, il va attendre jusqu'à ce qu'il y ait une poussée dans la branche principale du référentiel SCM.

Dès qu'il y aura un nouvel événement push, nous verrons une nouvelle exécution dans la section“Build History” du tableau de bord des tâches Jenkins.

Nous devrions voir une nouvelle construction lancée avec un statutpending à côté.

Dans quelques secondes, cette compilation devrait démarrer l’exécution et nous pourrons voir le journal complet dansConsole Output.

The first statement in the console output says “Started by Bitbucket push by..” – cela signifie que la construction a été déclenchée automatiquement lorsqu'un Push a eu lieu dans Bitbucket:

image

 

Si tout se passe bien, la construction devrait se terminer avec succès.

6. Créer un travail qui utilise Jenkinsfile

Il est possible de NE PAS écrire de script dans le pipeline Jenkins tout en réalisant l’exécution de la compilation déclenchée par le Webhook Bitbucket.

Pour ce faire,we have to create a new file in Bitbucket and name it as Jenkinsfile. Le script de pipeline doit être transféré dans ce fichier Jenkins avec une légère modification. Voyons exactement comment procéder.

Nous allons créer un nouveau pipeline dans Jenkins et le nommerPipelineWithJenkinsfile.

Sur la page de configuration du pipeline, nous sélectionneronsPipeline script from SCM à côté deDefinition dans la sectionPipeline. Nous verrons une liste déroulante avec différentes options à côté deSCM. ChoisissonsGit dans la liste déroulante.

Nous devons ensuite fournir l'URL du référentiel Bitbucket et les informations d'identification de l'utilisateur. Assurons-nous quethe text field next to Script Path contains the default value,i.e., Jenkinsfile:

image

 

En ce qui concerne Jenkins, c’est tout ce que nous devons configurer.

Cependant, nous devons créer le Jenkinsfile dans le référentiel; Alors, créons un nouveau fichier texte, nommez-le Jenkinsfile et utilisez ce simple script groovy:

node('master') {
    stage('scm') {
        checkout scm
    }
    stage('build') {
        withMaven(jdk: 'JDK9.0.1', maven: 'Maven3.5.2') {
            sh 'mvn clean install'
        }
    }
}

Ce script est presque identique au script de pipeline que nous avons créé dans la section précédente, avec une seule modification. L'instruction dansstage(‘scm') n'a pas besoin de l'URL et des informations d'identification de l'utilisateur. Au lieu de cela, tout ce dont il a besoin est decheckout scm.

Et c'est tout. The moment we commit this file into Bitbucket, it’ll trigger the build in Jenkins - et nous devrions voir la construction se déclencher dans lesBuild History.

La seule différence entre cette section et la précédente est quewe defined the pipeline script in the Bitbucket repository.

Donc,the build script is part of the source code of the project that needs to be built. Nous ne maintenons pas le script dans Jenkins lui-même.

Au lieu de cela, Jenkins a connaissance des détails du référentiel SCM et du fichier de script. Whenever there is a push to this repository, the script in Jenkinsfile gets executed on the Jenkins server.

7. Conclusion

Dans ce didacticiel, nous avons vu comment les tâches peuvent être configurées et planifiées dans Jenkins à l'aide de diverses stratégies.

Nous avons également vu comment configurer une tâche dans Jenkins pour qu'elle se déclenche automatiquement, en fonction de certaines actions effectuées dans le référentiel SCM tel que Bitbucket.