Jenkins-Groovy操作Jfrog Artifactory下载构件时MD5校验异常求助
解决Jenkins Groovy脚本下载Jfrog构件时MD5校验不匹配的问题
我来帮你梳理下这个MD5校验失败的问题,这通常是文件传输或处理环节出现了异常,咱们一步步排查:
你的上传&下载代码
stage("Upload Artifact to Jfrog"){ def server = Artifactory.server 'JfrogTAArtifactory' def uploadSpec = """{ "files": [ { "pattern": "${env.WORKSPACE}\\${artifactsfoldername}\\API-${env.BUILD_NUMBER}.zip", "target": "internal-repo/folderName/subFolder/", "props": "type=zip;status=ready" } ] }""" def buildInfo = server.upload(uploadSpec) server.publishBuildInfo(buildInfo) } stage("Download Artifacts"){ def server = Artifactory.server 'JfrogTAArtifactory' File folder = new File(downloadArtifactsPath) FileUtils.cleanDirectory(folder) def downloadSpec = """{ "files": [ { "pattern": "internal-repo/folderName/subFolder/API-${env.BUILD_NUMBER}.zip", "target": "${downloadArtifactsPath}/", "explode":"true", "flat": "true" } ] }""" def buildInfo = server.download(downloadSpec) server.publishBuildInfo(buildInfo) }
遇到的异常
java.io.IOException: Calculated MD5 checksum is different from original, Original: '09bb61772231822ebd37a2751c818f60' Calculated: '7e32b3f7e8149fbc8013fd7992f345e5' at org.jfrog.build.extractor.clientConfiguration.util.DependenciesDownloaderHelper.validateMd5Checksum(DependenciesDownloaderHelper.java:439)
可能的解决方案
1. 排查explode参数的影响
你在下载配置里设置了"explode":"true",这个参数会让Artifactory自动解压下载的zip包。但MD5校验是针对原始zip包的,解压过程中如果有文件权限变更、换行符转换(Windows和Linux的换行差异)等情况,可能会导致校验时的计算值和原始值不匹配。
建议先把explode改成false,先完整下载zip包,再用Groovy手动解压,比如:
// 下载zip包(不自动解压) def downloadSpec = """{ "files": [ { "pattern": "internal-repo/folderName/subFolder/API-${env.BUILD_NUMBER}.zip", "target": "${downloadArtifactsPath}/", "flat": "true" } ] }""" // 手动解压zip包 def zipFile = new File("${downloadArtifactsPath}/API-${env.BUILD_NUMBER}.zip") def destDir = new File(downloadArtifactsPath) ant.unzip(src: zipFile, dest: destDir)
2. 确认路径和文件完整性
- 打印
downloadArtifactsPath的实际值,确认路径没有空格或特殊字符(Windows路径容易出现转义问题):stage("Download Artifacts"){ println "Download path: ${downloadArtifactsPath}" // 其余代码... } - 登录Jfrog Artifactory界面,找到上传的
API-${env.BUILD_NUMBER}.zip,查看它的MD5值是否和异常信息中的Original值一致。如果不一致,说明上传环节就出了问题,可能是本地zip包被修改,或者上传路径错误传错了文件。
3. 临时跳过校验(仅用于排查)
如果想先确认文件能否正常下载,可以在downloadSpec中添加"checksumPolicy": "ignore"跳过校验,但这只是临时方案,建议找到根本原因后再恢复校验:
{ "files": [ { "pattern": "internal-repo/folderName/subFolder/API-${env.BUILD_NUMBER}.zip", "target": "${downloadArtifactsPath}/", "explode":"true", "flat": "true", "checksumPolicy": "ignore" } ] }
4. 检查目录清理操作的影响
你用FileUtils.cleanDirectory(folder)清理了目标目录,可能导致目录权限变化,使得下载的文件写入时被篡改。可以暂时注释掉这行代码,测试下载是否正常;如果正常,再检查目录的读写权限是否足够。
内容的提问来源于stack exchange,提问作者Gowtham.K.Reddy
相关产品推荐
相关产品推荐

