Коллеги, помогите решить задачку. есть jenkins pipeline. первым шагом он клонирует гит репозиторий. в этом репозитории лежит jenkinsfile. вторым шагом мне надо запустить этот jenkinsfile на выполнение.
если с первым шагом проблем нет, то со вторым начинаются
pipeline {
agent none
stages {
stage('Clone Repository') {
agent{
node{
label 'node1'
}
}
steps {
dir('master'){
git url: "https://test.ru/tests.git", credentialsId: 'gitlab.login.password'
}
}
}
stage('Run Pipeline from Cloned Repository') {
agent{
node{
label 'node1'
}
}
steps {
// script {
// def Jfile= pwd() + "/master" + "/Jenkinsfiles/Jenkinsfile"
// def customWorkspace = build job: "${Jfile}", propagate: false
// if (customWorkspace.resultIsBetterOrEqualTo(Result.FAILURE)) {
// error("Failed to run the pipeline from the cloned repository")
// }
// }
script {
def customWorkspace = pwd() + '/master'
def jenkinsfile = load "${customWorkspace}/Jenkinsfiles/Jenkinsfile"
jenkinsfile()
}
}
}
}
}
В приведённом примере две мои попытки запустить пайплайн из файла.
при закоменченном варианте происходит ошибка что item не найден, хотя файл на месте и команда cat спокойно выводит его в лог.
не закоменченный вариант заканчивается ошибкой: java.lang.IllegalStateException: Only one pipeline { ... } block can be executed in a single run.
Вообще возможно ли так вызвать?
Зачем такие сложности, если можно просто сказать Дженкинсу возьми файл из scm и выполни? Беда в том что по не выявленным пока причинам гит периодически глючит и отказывает в подключении. и соответственно пайп на первом же этапе(первичное клонирование репо) проваливается. я хочу разделить эти шаги, сделать чтобы этот пайп хранился в самом jenkins и не зависел от гита, клонировал нужный репо и запускал дальнейшее выполнение из jenkinsfile. в таком случае я могу контролировать процесс на любом этапе. отказал гит? повтори через минуту клонирование, провалился запущеный пайп перезапусти в случае каких то ошибок, либо останови выполнение.