美文网首页
jenkins 应用file parameter

jenkins 应用file parameter

作者: jaymz明 | 来源:发表于2020-04-03 10:09 被阅读0次

    研究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"
    

    这样就可以读出上传文件的内容了。


    相关文章

      网友评论

          本文标题:jenkins 应用file parameter

          本文链接:https://www.haomeiwen.com/subject/amicphtx.html