Как использовать FileParameterValue в конвейере jenkins 2

Как передать файл из рабочей области текущего проекта в качестве параметра в другой проект.

например что-то вроде:

build job: 'otherproject', parameters: [[$class: 'FileParameterValue', name: 'output.tar.gz', value: ??? ]], wait: false

person Tom Deseyn    schedule 18.05.2016    source источник


Ответы (4)


Я пробовал это сам недавно с небольшим успехом. Кажется, с этим есть проблема. Согласно документации для класса FileParameterValue существует конструктор, который принимает java.io.File вот так:

@DataBoundConstructor
FileParameterValue(String name,
                   org.apache.commons.fileupload.FileItem file)

Есть еще один, который ожидает FileItem вот так:

FileParameterValue(String name,
                   File file,
                   String originalFileName)

Но так как только первый аннотируется @DataBoundConstructor, даже когда я пытаюсь использовать последний в скрипте:

file = new File(pwd(), 'test.txt');
build(
    job: 'jobB',
    parameters: [
        [$class: "FileParameterValue", name: "TEST_FILE", file: file, originalFileName: 'test.txt']
    ]
)

Обратите внимание, что для создания экземпляра java.io.File требуется утверждение сценария.

... Я получаю следующую ошибку:

java.lang.ClassCastException: hudson.model.FileParameterValue.file expects interface org.apache.commons.fileupload.FileItem but received class java.io.File

Я понимаю, что только файл, загруженный пользователем в качестве интерактивного ввода во время выполнения, предоставляет объект типа org.apache.commons.fileupload.FileItem, поэтому в конце концов я прибегнул к архивирование файла в первом задании и разархивировать его в нижестоящем задании и обойти проблему. Конечно, это не идеально, но если вы в затруднительном положении, это самый быстрый способ разобраться.

person Mig82    schedule 01.06.2017

Вы не можете. Вот ошибка Дженкинса. Обновите эту тему, как только ошибка будет исправлена. А пока войдите в систему и проголосуйте за эту проблему, а также попросите их добавить документацию для параметров задания сборки конвейера.

https://issues.jenkins-ci.org/browse/JENKINS-27413

Ссылка отсюда: http://jenkins-ci.361315.n4.nabble.com/pipeline-build-job-with-FileParameterValue-td4861199.html

Вот документация для разных типов параметров (ссылка на FileParameterValue)

http://javadoc.jenkins.io/hudson/model/FileParameterValue.html

person TheJeff    schedule 30.10.2017

Попробуйте передать экземпляр FileParameterValue в параметры (у меня сработало):

import hudson.model.*

def param_file = new File("path/to/file")

build job: 'otherproject', parameters: [new FileParameterValue('file_param_name', param_file, 'original_file_name')], wait: false
person Artem Panchenko    schedule 29.11.2017

Объект java.File может восстанавливать файлы только с главного узла.
Таким образом, чтобы загрузить файлы как объекты java.File, мы используем мастер-узел для извлечения необходимых файлов, затем мы обертываем их как файловые объекты и, наконец, отправляем их как объекты FileParameterValue.

node("myNode") {
    sh " my-commands -f myFile.any " // This command create a new file.
    stash includes: "*.any", name: "my-custom-name", useDefaultExcludes: true
}

node("master") {
    unstash "my-custom-name"
    def myFile = new File("${WORKSPACE}/myFile.any")
    def myJob = build(job: "my-job", parameters: 
                    [ string(name: 'required-param-1', value: "myValue1"),
                      new FileParameterValue("myFile.any", myFile, "myFile.any")
                    ], propagate: false)

    print "The Job execution status is: ${myJob.result}."

    if(myJob.result == "FAILURE") {
      error("The Job execution has failed.")
    }
    else {
      print "The Job was executed successfully."
    }
}

Вы можете пропустить главный узел, если файл, который вам нужно отправить, содержит только текст.

def myFileContent = readFile("myFile.txt")
FilePath fp = new FilePath(new File("${WORKSPACE}","myFile.txt"))
if(fp!=null){
    fp.write(myFileContent, null)
}
def file = new File("${WORKSPACE}/myFile.txt")

Затем используйте файл в объекте FileParameterValue как обычно.
Не забудьте импортировать объект FilePath -> import hudson.FilePath

person Jose Luis Choque Chavez    schedule 02.07.2018