Трубопровод запустить Дженкинс с кодом с помощью Git

Я хочу использовать следующий скрипт конвейера из git в jenkins

#!groovy
pipeline {
    agent any

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

Я установил URL репозитория правильно, в разделе " Дополнительные поведения "я добавил" проверить в подкаталог " и написал свой подкаталог там.

в "Script-Path" я написал: mysubdirectory/Jenkinsfile

когда я пытаюсь запустить его, я получаю следующую ошибку:

java.io.FileNotFoundException
    at jenkins.plugins.git.GitSCMFile.invoke(GitSCMFile.java:167)
    at jenkins.plugins.git.GitSCMFile.invoke(GitSCMFile.java:159)
    at jenkins.plugins.git.GitSCMFileSystem.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

что я делаю не так?

Как я могу правильно запустить сценарий Дженкинса из git?

4 ответов


для успешного запуска файла Jenkinsfile из Git repo файл Jenkinsfile должен быть доступен в основном каталоге, но не в подкаталоге. Например:

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

Jenkinsfile не должен находиться в подкаталоге.


Дженкинс делает 2 проверки, когда он ищет сценарий конвейера. С git первый часто представляет собой легкий чек, который получает только Jenkinsfile, а не весь РЕПО, Но это 2 отдельных чека. Вторая проверка-это настоящая проверка для запуска Jenkinsfile.

причина, по которой он делает 2 проверки, заключается в том, что он должен сначала посмотреть на файл Jenkinsfile, чтобы увидеть, что вы хотите сделать, и проверить синтаксис и т. д. Если вы пропускаете проверку SCM в своем скрипте, так вы можете сделать это позже или по-другому, тогда он должен знать, чтобы не делать "реальную" проверку. Если на то пошло, вы можете теоретически вытащить свой файл Jenkinsfile из одного РЕПО, пропустить проверку SCM и вытащить совершенно другое РЕПО (или ветвь, или тег) и построить против этого, но используя файл Jenkinsfile из первой проверки.

поэтому, говоря Дженкинсу искать в подкаталоге для файла Jenkinsfile, вы говорите ему искать в каком-то месте в оригинальной проверке, которая на самом деле не существует, потому что ваш Jenkinsfile действительно находится в корне вашего репозитория git.

когда вторая проверка выполняется в подкаталоге, вам нужно будет принять это во внимание в вашем Jenkinsfile, потому что Jenkinsfile запускается из корня рабочей области. Вам нужно будет установить в каталог, т. е. dir ("mysubdirectory") {}, чтобы найти файлы сборки и т. д.


попробуйте опустить подкаталог из Пути Sript.

когда вы указываете подкаталог для клонирования вашего проекта, Дженкинс ищет файл конвейера в этом каталоге. В вашем случае Дженкинс ищет файл Jenkinsfile в "mysubdirectory/mysubdirectory / Jenkinsfile"


У меня была аналогичная проблема, но в моем случае несоответствие имен было веткой в Git. В настройках конвейера я указывал имя ветви в верхнем регистре, когда в репо имя ветви было в нижнем регистре. (Очевидно, не решение первоначальной проблемы, но может оказаться полезным для какой-то другой бедной души!)