如何将当前项目工作空间中的文件作为参数传递给另一个项目。
e.g。类似的东西:
vector<string> words;
string word = "";
ifstream infile("words.txt", ios::in);
while (infile >> word)
{
/*
you can process each word here like removing commas, periods
and such(if that is in fact what you want) before you add
them to the vector
*/
words.push_back(word);
}
string phrase = "";
for (int k = 0; k < words.size(); k++)
{
phrase += " " + words[k];
cout << phrase << endl;
}
答案 0 :(得分:0)
我最近自己尝试过,但收效甚微。这似乎有问题。根据{{3}},有一个构造函数接受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
类型的对象,所以最后我在第一个作业中使用了documentation for class FileParameterValue并且archiving the file它在下游工作,并解决了问题。它当然不是理想的,但如果你遇到麻烦,这是解决问题的最快方法。
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
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