8

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

例如:

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

4 回答 4

1

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 对象 -> 导入 hudson.FilePath

于 2018-07-02T22:48:00.487 回答
0

尝试将实例传递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
于 2017-11-29T17:17:16.497 回答
0

我最近自己尝试过,但收效甚微。这似乎有问题。根据类 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所以最后我诉诸于在第一个作业中存档文件并在下游作业中取消存档,并解决了这个问题。当然,这并不理想,但如果您遇到困难,这是解决问题的最快方法。

于 2017-06-01T10:01:36.183 回答
0

你不能。这是詹金斯错误。修复错误后更新此线程。同时,登录并投票支持此问题,并要求他们为管道构建作业参数添加文档。

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

于 2017-10-30T21:59:59.557 回答