如何在jenkins 2管道中使用FileParameterValue

Tom*_*eyn 8 jenkins jenkins-pipeline jenkins-2

如何将当前项目工作空间中的文件作为参数传递给另一个项目.

例如:

build job: 'otherproject', parameters: [[$class: 'FileParameterValue', name: 'output.tar.gz', value: ??? ]], wait: false
Run Code Online (Sandbox Code Playgroud)

Mig*_*g82 0

我最近自己尝试过,但收效甚微。这似乎有问题。根据类 FileParameterValue 的文档,有一个构造函数接受java.io.File如下所示:

@DataBoundConstructor
FileParameterValue(String name,
                   org.apache.commons.fileupload.FileItem file)
Run Code Online (Sandbox Code Playgroud)

还有另一个期望FileItem像这样:

FileParameterValue(String name,
                   File file,
                   String originalFileName)
Run Code Online (Sandbox Code Playgroud)

@DataBoundConstructor但因为即使当我尝试在脚本中使用后者时,也只有前者被注释:

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

请注意,这需要脚本批准才能实例化java.io.File

...我收到以下错误:

java.lang.ClassCastException: hudson.model.FileParameterValue.file expects interface org.apache.commons.fileupload.FileItem but received class java.io.File
Run Code Online (Sandbox Code Playgroud)

据我所知,只有用户作为交互式运行时输入上传的文件才提供类型的对象org.apache.commons.fileupload.FileItem,因此最终我在第一个作业中归档文件并在下游作业中取消归档它,并解决了问题。当然,这并不理想,但如果您陷入困境,这是解决问题的最快方法。