如何用Jenkins http_request插件正确保存gzip格式压缩文件?
解决Jenkins http_request插件下载gzip压缩包后无法解压的问题
问题原因
你用http_request插件下载gzip压缩包时,直接通过response.content获取内容并以text参数写入文件,会导致二进制数据被当作文本处理(默认按UTF-8编码转换),破坏了原始gzip文件的字节结构,所以文件被识别为通用"data"格式,无法正常解压。
解决方案
方案1:直接用插件的outputFile参数保存(推荐)
http_request插件支持直接将响应内容写入文件,跳过字符串转换步骤,完美保留二进制结构:
httpRequest url: "https://github.com/pact-foundation/pact-ruby-standalone/releases/download/v1.91.0/pact-1.91.0-linux-x86_64.tar.gz", httpMode: 'GET', outputFile: 'pact-1.91.0-linux-x86_64.tar.gz'
方案2:通过字节数组写入文件
如果需要手动处理响应内容,使用response.contentBytes获取原始字节数组,再通过writeFile的bytes参数写入:
def response = httpRequest url: "https://github.com/pact-foundation/pact-ruby-standalone/releases/download/v1.91.0/pact-1.91.0-linux-x86_64.tar.gz", httpMode: 'GET' writeFile file: 'pact-1.91.0-linux-x86_64.tar.gz', bytes: response.contentBytes
验证方法
执行以下命令确认文件格式正常:
file pact-1.91.0-linux-x86_64.tar.gz
正常输出应为:pact-1.91.0-linux-x86_64.tar.gz: gzip compressed data,此时tar xzf pact-1.91.0-linux-x86_64.tar.gz即可正常解压。
关于已损坏文件的修复
如果已经生成了损坏的文件,由于二进制数据被文本编码转换破坏,几乎无法通过Linux命令完全恢复,建议直接重新下载。
内容的提问来源于stack exchange,提问作者Fabio Carriel Fonseca
相关产品推荐
相关产品推荐

