Ответ 1
Для успешного запуска Jenkinsfile из Git repo Jenkinsfile должен быть доступен в основном каталоге, но не в подкаталоге. Например:
.
├── .setting
├── project
└── Jenkinsfile
Файл Jenkins не должен находиться в Sub Directory.
Я хочу использовать следующий сценарий 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 правильно?
Для успешного запуска Jenkinsfile из Git repo Jenkinsfile должен быть доступен в основном каталоге, но не в подкаталоге. Например:
.
├── .setting
├── project
└── Jenkinsfile
Файл Jenkins не должен находиться в Sub Directory.
Дженкинс делает 2 проверки, когда ищет сценарий конвейера. С git, первый из них часто является легкой проверкой, которая получает только файл Jenkins, а не весь репо, но это две отдельные проверки. Вторая проверка - это реальная проверка для запуска файла Jenkins.
Причина, по которой он делает 2 проверки, состоит в том, что он должен сначала посмотреть на файл Jenkins, чтобы посмотреть, что вы хотите сделать, и проверить синтаксис и т.д. Если вы пропустите SCM-чек в своем скрипте, чтобы вы могли сделать это позже или по-другому, то он должен знать, чтобы не выполнять "настоящую" проверку. В этом случае вы могли бы теоретически вытащить ваш Jenkinsfile из одного репо, пропустить проверку SCM и вытащить совершенно другое репо (или ветвь или тег) и построить против него, но используя файл Jenkins с первой проверки.
Поэтому, говоря Jenkins, чтобы посмотреть в подкаталоге для Jenkinsfile, вы говорите ему, чтобы он смотрел в каком-то месте в оригинальной проверке, которая на самом деле не существует, потому что ваш Jenkinsfile действительно находится в корне вашего репликации git.
Когда вторая проверка выполняется в подкаталог, вам необходимо принять это во внимание в вашем файле Jenkins, потому что Jenkinsfile работает от корня рабочей области. Вам нужно будет установить в каталог, то есть dir ("mysubdirectory") {}, найти файлы сборки и т.д.
Попытайтесь опустить свой подкаталог с пути Sript.
Когда вы укажете подкаталог клонирования вашего проекта, Jenkins ищет файл конвейера в этом каталоге. В вашем случае Дженкинс ищет файл Jenkins в "mysubdirectory/mysubdirectory/Jenkinsfile"
Я получил ту же ошибку. Отключив Lightweight checkout
в конфигурации задания, ошибка была решена!
У меня была схожая проблема, но в моем случае несоответствие имен было веткой в Git. В настройках конвейера я указывал имя ветки в верхнем регистре, когда в репо, имя ветки было строчным. (Очевидно, это не решение исходной проблемы, но может оказаться полезным для какой-то другой бедной души!)
У меня была похожая проблема, когда я копировал конвейерную работу.
решено: удалить часть конвейера scm из скопированного задания конвейера. Сохранить изменения. построить один пустой раунд. затем создайте блок scm конвейера снова.
Моя проблема заключалась в том, что я написал j enkinsfile вместо J enkinsfile
Заглавная буква была той, которая решила проблему.
Проверьте, совпадают ли имена файлов Jenkins в конфигурации Jenkins и в вашем хранилище кода.