研究jenkins parameters发现其提供了file 类型的参数。但是发现官方文档和我们大大小小的job,都没有推荐或使用这个参数。那么这个参数有用吗?还有为啥官网都没有示例,但是参数类型却在呢?
带着疑问,搜了下jenkins issues。发现这个参数其实很早就提出来了,但是一直还处于开发阶段,涉及到file,影响的点很多。我们能想到包含这些:IO,文件大小,文件类型,文件样式,文件解析,文件存储,异常处理等等。
但是有没有办法解决呢?有的。我去爬楼发现了这个方法:
在share library里配置以下信息(share library的配置可以看早期写的文章:https://www.jianshu.com/p/35b4fe64cebf
):
放在vars目录下面
import hudson.FilePath
import hudson.model.ParametersAction
import hudson.model.FileParameterValue
import hudson.model.Executor
def call(String name, String fname = null) {
def paramsAction = currentBuild.rawBuild.getAction(ParametersAction.class);
if (paramsAction != null) {
for (param in paramsAction.getParameters()) {
if (param.getName().equals(name)) {
if (! (param instanceof FileParameterValue)) {
error "unstashParam: not a file parameter: ${name}"
}
if (env['NODE_NAME'] == null) {
error "unstashParam: no node in current context"
}
if (env['WORKSPACE'] == null) {
error "unstashParam: no workspace in current context"
}
if (env['NODE_NAME'].equals("master")) {
workspace = new FilePath(null, env['WORKSPACE'])
}else{
workspace = new FilePath(Jenkins.getInstance().getComputer(env['NODE_NAME']).getChannel(), env['WORKSPACE'])
}
filename = fname == null ? param.getOriginalFileName() : fname
file = workspace.child(filename)
destFolder = file.getParent()
destFolder.mkdirs()
file.copyFrom(param.getFile())
return filename;
}
}
}
error "unstashParam: No file parameter named '${name}'"
}
使用的时候如下:
file(description: 'please upload the file', name: 'file')
uploadFile = unstashParam "file"
这样就可以读出上传文件的内容了。
网友评论