web-dev-qa-db-fra.com

Lancer Jenkins Pipeline avec le code de Git

Je souhaite utiliser le script de pipeline suivant de git dans jenkins

#!groovy
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

J'ai défini l'URL du référentiel à droite, sous "Autres comportements", j'ai ajouté "Extraire dans un sous-répertoire" et y ai écrit mon sous-répertoire.

A "Script-Path", j'ai écrit: mysubdirectory/Jenkinsfile

Lorsque j'essaie de l'exécuter, je reçois l'ERREUR suivante:

Java.io.FileNotFoundException
    at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.Java:167)
    at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.Java:159)
    at jenkins.plugins.git.GitSCMFileSystem$3.invoke(GitSCMFileSystem.Java:162)
    at org.jenkinsci.plugins.gitclient.AbstractGitAPIImpl.withRepository(AbstractGitAPIImpl.Java:29)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.withRepository(CliGitAPIImpl.Java:71)
    at jenkins.plugins.git.GitSCMFileSystem.invoke(GitSCMFileSystem.Java:158)
    at jenkins.plugins.git.GitSCMFile.content(GitSCMFile.Java:159)
    at jenkins.scm.api.SCMFile.contentAsString(SCMFile.Java:338)
    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.Java:101)
    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.Java:59)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.Java:262)
    at hudson.model.ResourceController.execute(ResourceController.Java:97)
    at hudson.model.Executor.run(Executor.Java:415)
Finished: FAILURE

Qu'est-ce que je fais mal?

Comment puis-je exécuter un script Jenkins à partir de git correctement?

14
J.Doe

Pour exécuter le fichier Jenkins avec succès à partir du référentiel Git Jenkinsfile doit être disponible dans le chemin du répertoire principal, mais pas dans le sous-répertoire . 

.
├── .setting
├── project
└── Jenkinsfile

Jenkinsfile ne devrait pas être dans le sous-répertoire.

17
Chandra Sekhar

Jenkins effectue 2 extractions lorsqu'il recherche un script de pipeline. Avec git, le premier est souvent une caisse légère qui n'obtient que le fichier Jenkins, plutôt que le référentiel entier, mais il s'agit de deux caisses séparées. La deuxième commande est la commande réelle pour exécuter le fichier Jenkins. 

La raison pour laquelle elle effectue 2 extractions est qu’elle doit d’abord consulter le fichier Jenkins pour savoir ce que vous voulez faire, valider la syntaxe, etc. alors il faut savoir ne pas faire la "vraie" caisse. D'ailleurs, vous pouvez théoriquement extraire votre Jenkinsfile d'un référentiel, ignorer la commande SCM, puis extraire un référentiel (ou une branche) complètement différent et construire contre cela, mais en utilisant le fichier Jenkins de la première. 

Donc, en demandant à Jenkins de regarder dans le sous-répertoire du fichier Jenkins, vous lui demandez de regarder quelque part dans la caisse d'origine qui n'existe pas, car votre fichier Jenkins est vraiment à la racine de votre dépôt git. 

Lorsque la deuxième extraction est effectuée dans un sous-répertoire, vous devez en tenir compte dans votre fichier Jenkins, car celui-ci s’exécute à partir de la racine de l’espace de travail. Vous devez définir le répertoire i.e. dir ("mysubdirectory") {}, pour trouver les fichiers de construction, etc. 

5
Rob Hales

Essayez d’omettre votre sous-répertoire du chemin Sript.

Lorsque vous spécifiez un sous-répertoire pour cloner votre projet, Jenkins recherche le fichier de pipeline dans ce répertoire. Dans votre cas, Jenkins recherche le fichier Jenkins dans "répertoire_my/répertoire_my/Jenkinsfile".

1
Carlos Lucas

J'ai eu la même erreur. En désactivant Lightweight checkout dans la configuration du travail, l'erreur a été résolue!

0
Coco

J'ai eu un problème similaire à celui-ci, mais dans mon cas l'inadéquation de nommage était la branche dans Git. Dans les paramètres du pipeline, je spécifiais le nom de la branche en majuscule, alors que dans le référentiel, le nom de la branche était en minuscule. (Évidemment pas la solution au problème initial, mais peut s'avérer utile à une autre âme pauvre!)

0
Mike P

J'ai eu un problème similaire lorsque j'ai copié un travail de pipeline.

résolu: retirer la partie de la procédure de gestion de pipeline du travail de pipeline copié. Sauvegarder les modifications. construire un tour vide. puis créez à nouveau pipeline scm block.

0
Kimi