web-dev-qa-db-fra.com

Jenkins Pipeline Build Trigger avec git pull, comment?

J'ai un maven, un projet Java et j'utilise git . Je veux utiliser jenkins pour build + test + deploy (fichier .war) sur le serveur Tomcat (sur le même appareil).

Ma question actuelle concerne le déclenchement de la construction en transmettant les modifications dans le maître du référentiel git. Cependant, cela a fonctionné avec le projet Jenkins Freestyle. Là, je pouvais configurer mon référentiel git, afin de détecter tout changement et d’exécuter la construction.

Mais dans la mesure où je pourrais faire mes recherches en utilisant un "pipeline", il serait préférable de lancer le processus avec build + test + deploy. J'ai donc créé un pipeline et également écrit un fichier jenkins.

pipeline {
    agent any

    stages {
        stage('Compile Stage') {
            steps {
               withMaven(maven: 'maven_3_5_1'){
               bat 'mvn clean compile'
               }
            }
        }
        stage('Testing Stage') {
            steps {
                withMaven(maven: 'maven_3_5_1'){
                    bat 'mvn test'
                }
            }
        }
        stage('Deployment Stage (WAR)') {
            steps {
                withMaven(maven: 'maven_3_5_1'){
                    bat 'mvn deploy'
                }
            }
        }
    }
}

Le problème actuel est qu’à l’intérieur d’un projet de pipeline, je n’ai pas trouvé d’option permettant de configurer le référentiel git. Actuellement, jenkins ne suit pas les changements dans git, quand j'applique un changement.

Ce que j'ai à faire, alors jenkins exécute la construction lorsque des modifications sont détectées dans git (comme dans le projet freestyle)?

Je vous remercie beaucoup d'avance.

7
aydogdu

Définition à l'intérieur du référentiel (Jenkinsfile)

Vous devez placer la définition du pipeline dans un fichier appelé Jenkinsfile dans votre référentiel.

Cela présente le grand avantage que votre pipeline est également versionné. En utilisant le projet Multibranch, vous pouvez indiquer Jenkins à votre dépôt Git et celui-ci découvre automatiquement toutes les branches contenant ce type Jenkinsfile (et crée un travail pour chacune d’elles). Vous trouverez plus d'informations dans la documentation .

Si vous ne voulez pas de travaux pour différentes branches, vous pouvez également configurer le travail pour qu'il prenne la définition de pipeline de SCM:

enter image description here

Si cela est spécifié, vous pouvez configurer le travail pour qu'il interroge régulièrement les modifications apportées au SCM:

enter image description here


Définition dans le métier

Si vous ne voulez vraiment pas placer votre pipeline dans le référentiel (je ne le recommande pas), vous pouvez utiliser l'étape checkout pour obtenir votre code:

pipeline {
    agent any
    stages {
        stage('Compile Stage') {
            steps {
                checkout('https://git.example.com/repo.git')
                withMaven(maven: 'maven_3_5_1') {
                    bat 'mvn clean compile'
                }
            }
        }
// ...

Vous trouverez plus d'options pour le paiement (par exemple, d'autres branches) dans la documentation de l'étape .

Enfin, modifiez le travail à construire à intervalles réguliers:

enter image description here

Et maintenant vient le point où je me bats (en modifiant le post): Cela construit probablement le projet à chaque fois (5min dans l'exemple). Je ne suis pas sûr si currentBuild.changeSets contient les modifications explicitement extraites avec checkout. Si tel est le cas, vous pouvez alors vérifier s’il contient des modifications et, dans ce cas, abandonner la construction. Tous pas très gentils ...

1
StephenKing