Как передать файл из рабочей области текущего проекта в качестве параметра в другой проект.
например что-то вроде:
build job: 'otherproject', parameters: [[$class: 'FileParameterValue', name: 'output.tar.gz', value: ??? ]], wait: false
Как передать файл из рабочей области текущего проекта в качестве параметра в другой проект.
например что-то вроде:
build job: 'otherproject', parameters: [[$class: 'FileParameterValue', name: 'output.tar.gz', value: ??? ]], wait: false
Я пробовал это сам недавно с небольшим успехом. Кажется, с этим есть проблема. Согласно документации для класса 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
, поэтому в конце концов я прибегнул к архивирование файла в первом задании и разархивировать его в нижестоящем задании и обойти проблему. Конечно, это не идеально, но если вы в затруднительном положении, это самый быстрый способ разобраться.
Вы не можете. Вот ошибка Дженкинса. Обновите эту тему, как только ошибка будет исправлена. А пока войдите в систему и проголосуйте за эту проблему, а также попросите их добавить документацию для параметров задания сборки конвейера.
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
Попробуйте передать экземпляр 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
Объект 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