Как создавать и редактировать файлы определения конвейера из Groovy-кода Jenkins Job DSL

У меня есть отличный код Job DSL (основной скрипт), который создает ~ 100 тестовых заданий. Подход состоит в том, чтобы их можно было выполнять вручную, а также мы хотим, чтобы конвейеры выполнялись в ночное время. Таким образом, будут созданы рабочие места конвейера (несколько). Не проблема.

Но так как основной Groovy-скрипт DSL будет довольно большим, я хочу, чтобы соответствующий конвейерный скрипт (который будут загружаться конвейерными заданиями) был помещен в отдельные файлы. Поскольку существует так много заданий, я уже поместил конфигурацию всех заданий в отдельный файл, где они определены в MAP. Логика для создания всех тестовых заданий помещена в основной сценарий, и он проходит через MAP, расположенный в отдельном файле. Работает отлично.

Не хотите, чтобы имена заданий, которые должны быть настроены в определении конвейера, были жестко запрограммированы (дублирующаяся информация)! Таким образом, план состоял в том, чтобы создать файлы определения конвейера на основе той же основной логики сценария, которая создает тестовые задания. Затем вся соответствующая информация, такая как имена заданий, целевой хост и т. Д., Доступна для каждой итерации через MAP.

Есть идеи, как можно создавать отдельные файлы сценариев конвейера и управлять ими из сценария dsl groovy job?

Я пробовал создавать файлы со стандартным отличным кодом. Но было очевидно, что они созданы в Jenkins Master. И это должно быть в раб.

def newFile = new File("${WORKSPACE}/scripts/jenkins_job_dsl/pipeline.conf")
print "${newFile}"

Я получил это в начальном задании, когда использовался «новый файл»:

...
/home/builduser/workspace/Test_and_demo/Richard_Test/seed_job_richard/scripts/jenkins_job_dsl/pipeline.conf
FATAL: No such file or directory
13:33:50 java.io.IOException: No such file or directory
...

person Richard Olsson    schedule 22.05.2019    source источник


Ответы (1)


У вас проблема с чтением файла pipeline.conf, который уже существует в начальном задании?

У вас должна быть возможность использовать readFileFromWorkspace, например:

// read the file release.groovy from the seed job's workspace
// and configure a Groovy build step using that script
def releaseScript = readFileFromWorkspace('release.groovy')
job('example-1') {
    steps {
        groovyCommand(releaseScript)
    }
}

// read the file run.bat from a workspace of job project-a
// and use it to configure another job
def runScript = readFileFromWorkspace('project-a', 'run.bat')
job('example-2') {
    steps {
        batchFile(runScript)
    }
}
person Fredrik Andersson    schedule 22.05.2019
comment
Нет, проблема действительно в создании файлов. - person Richard Olsson; 22.05.2019
comment
После дальнейших обсуждений, исследований и проб я пришел к следующему действующему решению: * Использование отдельного файла сценария конвейера общего шаблона. Этот файл имеет некоторые шаблоны, такие как метка, задания для вызова (= этапы), значения входных параметров по умолчанию и т. Д. * ReadFileFromWorkspace используется для считывания файла сценария конвейера в основную логику. Затем шаблоны в шаблоне заменяются в соответствии с требуемой конфигурацией. * Когда все задания созданы и настройка сценария конвейера завершена, фактический сценарий конвейера сопоставляется с конкретным заданием конвейера. - person Richard Olsson; 08.07.2019