У нас есть несколько конвейерных заданий с одинаковой структурой и поведением: обновить доступный репозиторий, выполнить плейбук с некоторыми параметрами, значение которых зависит от среды, и протестировать с проверкой выполнения. Мы попытались абстрагировать общее поведение во внешнем файле.
ДженкинсфилеАнсибл:
#!/usr/bin/env groovy
import groovy.json.JsonOutput
node {
}
def executePlaybook(environment){
pipeline{
agent any
stages{
stage('Update repository'){
...
}
stage('Esecute playbook'){
...
}
stage('Execute tests'){
...
}
}
}
}
return this
Каждая среда будет иметь определенный Jenkinsfile, который задает параметры и загружает общий Jenkinsfile для выполнения конвейера.
ДженкинсфайлДев:
#!/usr/bin/env groovy
import groovy.json.JsonOutput
node{
checkout scm
def ansible = load "../JenkinsfileAnsible"
ansible.execute_playbook("development")
}
Код был упрощен, и у нас нет проблем с загрузкой внешнего файла или выполнением определенных функций. Проблема в том, что мы хотели определить конвейер внутри общего файла, который одинаков для каждой среды, и просто вызвать его, но мы не можем заставить его работать.
Мы столкнулись с ошибками, поскольку Jenkins не может распознать определение конвейера во внешнем файле.
Любой совет? Неужели нельзя сделать? Есть ли что-то, что нам не хватает?