web-dev-qa-db-de.com

Führen Sie Jenkins Pipeline mit Code von Git aus

Ich möchte folgendes Pipeline-Skript von git in jenkins verwenden

#!groovy
pipeline {
    agent any

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

Ich habe die Repository-URL richtig eingestellt, unter "Zusätzliches Verhalten" habe ich "Auschecken in ein Unterverzeichnis" hinzugefügt und mein Unterverzeichnis dort geschrieben.

Bei "Script-Path" schrieb ich: mysubdirectory/Jenkinsfile

Wenn ich versuche, es auszuführen, erhalte ich folgende FEHLER:

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

Was mache ich falsch?

Wie kann ich ein Jenkins-Script korrekt von git ausführen?

14
J.Doe

Um die Jenkinsfile erfolgreich aus Git-Repo auszuführen, sollte Jenkinsfile im Hauptverzeichnispfad vorhanden sein, jedoch nicht im Unterverzeichnis ..__ 

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

Jenkinsfile sollte nicht im Unterverzeichnis sein.

17
Chandra Sekhar

Jenkins führt zwei Überprüfungen durch, wenn nach einem Pipeline-Skript gesucht wird. Bei git handelt es sich bei der ersten häufig um eine leichtgewichtige Kasse, die nur die Jenkins-Datei und nicht das gesamte Repo erhält, es sind jedoch zwei separate Prüfungen. Die zweite Kasse ist die eigentliche Kasse, um die Jenkinsfile auszuführen. 

Der Grund, warum 2 Checkouts durchgeführt werden, ist, dass das Jenkinsfile zuerst betrachtet werden muss, um zu sehen, was Sie tun möchten, und die Syntax zu überprüfen usw. Wenn Sie ein SCM-Checkout in Ihrem Skript überspringen, können Sie dies später oder anders ausführen. dann muss es wissen, dass die "echte" Kasse nicht durchgeführt wird. Für diese Angelegenheit könnten Sie theoretisch Ihr Jenkinsfile aus einem Repo ziehen, die SCM-Prüfung überspringen und ein völlig anderes Repo (oder einen Zweig oder ein Tag) ziehen und dagegen aufbauen, jedoch das Jenkinsfile von der ersten Kasse aus verwenden. 

Indem Sie Jenkins anweisen, im Unterverzeichnis nach der Jenkinsfile zu suchen, sagen Sie ihm, er solle an einer Stelle in der ursprünglichen Kasse nachschauen, die eigentlich nicht existiert, da Ihre Jenkinsfile wirklich in der Wurzel Ihres Git Repo liegt. 

Wenn der zweite Checkout in ein Unterverzeichnis erfolgt, müssen Sie dies in Ihrer Jenkins-Datei berücksichtigen, da die Jenkins-Datei vom Stamm des Arbeitsbereichs aus ausgeführt wird. Sie müssten in das Verzeichnis, d. H. Dir ("mysubdirectory") {}, wechseln, um Build-Dateien usw. zu finden. 

5
Rob Hales

Versuchen Sie, Ihr Unterverzeichnis im Sript-Pfad auszulassen.

Wenn Sie ein Unterverzeichnis zum Klonen Ihres Projekts angeben, durchsucht Jenkins die Pipeline-Datei in diesem Verzeichnis. In Ihrem Fall sucht Jenkins nach der Jenkinsfile in "mysubdirectory/mysubdirectory/Jenkinsfile".

1
Carlos Lucas

Ich habe den gleichen Fehler bekommen. Durch Deaktivieren von Lightweight checkout in der Jobkonfiguration wurde der Fehler behoben!

0
Coco

Ich hatte ein ähnliches Problem wie dieses, aber in meinem Fall war der Namensunterschied der Zweig in Git. In den Pipeline-Einstellungen habe ich den Zweignamen in Großbuchstaben angegeben, während der Zweigname im Repo Kleinbuchstaben war. (Offensichtlich nicht die Lösung des ursprünglichen Problems, kann sich aber für eine andere arme Seele als nützlich erweisen!)

0
Mike P

Ich hatte ein ähnliches Problem, als ich den Pipeline-Job kopierte.

gelöst: Entfernen des Pipeline-SCM-Teils aus dem kopierten Pipeline-Job. Änderungen speichern. Baue eine leere Runde. Erstellen Sie dann erneut den Pipeline-SCM-Block.

0
Kimi