Трубопровод запустить Дженкинс с кодом с помощью 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. В настройках конвейера я указывал имя ветви в верхнем регистре, когда в репо имя ветви было в нижнем регистре. (Очевидно, не решение первоначальной проблемы, но может оказаться полезным для какой-то другой бедной души!)