Запустите трубу Дженкинса с кодом от Git

Я хочу использовать следующий сценарий Pipeline из 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$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

Что я делаю неправильно?

Как я могу запустить Jenkins Script из git правильно?

Ответ 1

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

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

Файл Jenkins не должен находиться в Sub Directory.

Ответ 2

Дженкинс делает 2 проверки, когда ищет сценарий конвейера. С git, первый из них часто является легкой проверкой, которая получает только файл Jenkins, а не весь репо, но это две отдельные проверки. Вторая проверка - это реальная проверка для запуска файла Jenkins.

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

Поэтому, говоря Jenkins, чтобы посмотреть в подкаталоге для Jenkinsfile, вы говорите ему, чтобы он смотрел в каком-то месте в оригинальной проверке, которая на самом деле не существует, потому что ваш Jenkinsfile действительно находится в корне вашего репликации git.

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

Ответ 3

Попытайтесь опустить свой подкаталог с пути Sript.

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

Ответ 4

Я получил ту же ошибку. Отключив Lightweight checkout в конфигурации задания, ошибка была решена!

Ответ 5

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

Ответ 6

У меня была похожая проблема, когда я копировал конвейерную работу.

решено: удалить часть конвейера scm из скопированного задания конвейера. Сохранить изменения. построить один пустой раунд. затем создайте блок scm конвейера снова.

Ответ 7

Моя проблема заключалась в том, что я написал j enkinsfile вместо J enkinsfile

Заглавная буква была той, которая решила проблему.

Ответ 8

Проверьте, совпадают ли имена файлов Jenkins в конфигурации Jenkins и в вашем хранилище кода.