如何将当前工作区的文件作为参数传递给构建作业,例如:
build job: 'other-project', parameters: [[$class: 'FileParameterValue', ????]]
如何将当前工作区的文件作为参数传递给构建作业,例如:
build job: 'other-project', parameters: [[$class: 'FileParameterValue', ????]]
真是个噩梦——没有文档,查看了jenkins代码等等。尝试了一切。
最终发现这目前不起作用。这里是jenkins的错误。
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
如果您要传递文件的完整路径,可以这样做:
node('master') {
//Read the workspace path
String path = pwd();
String pathFile = "${path}/exampleDir/fileExample.ext";
//Do whatever you wish with the file path
}
现在您可以使用最新的文件参数插件来实现它。
这里有一个简单的例子:
pipeline {
agent any
parameters {
base64File(name: 'testFileParent', description: 'Upload file test')
}
stages {
stage('Invoke Child Job') {
steps {
withFileParameter('testFileParent') {
script{
def fileContent = readFile(env.testFileParent)
build(job: 'test-child',
parameters: [base64File(name: 'testFileChild', base64: Base64.encoder.encodeToString(fileContent.bytes))])
}
}
}
}
}
}
pipeline {
agent any
parameters {
base64File(name: 'testFileChild', description: 'Upload file test')
}
stages {
stage('Show File') {
steps {
withFileParameter('testFileChild') {
sh("cat $testFileChild")
}
}
}
}
}
它的工作原理如下:
这种方法假设您在当前作业的工作空间中拥有该文件。
pipeline
{
agent any
stages {
stage('Pass file type param to build job') {
steps {
script {
def propertiesFilePath = "${env.WORKSPACE}/sample.properties"
build job: 'other-project',
parameters: [[$class: "FileParameterValue", name: "propertiesFile", file: new FileParameterValue.FileItemImpl(new File(propertiesFilePath))]]
}
}
}
}
}
这里下游/子作业的名称是“other-project”,此下游/子作业中文件类型参数的名称为“propertiesFile”。 类型FileParameterValue.FileItemImpl定义在类FileParameterValue中,在Jenkins内部用于处理FileItem,同时添加序列化支持。