Artifactory上传文件时使用校验和

28
如果您上传一个构件到Artifactory并且没有提供校验和,它会给出以下警告:

Screenshot, Artifactory, Fix Checksum

你如何使用 curl 上传并包含校验和?

4
我知道你特别问了有关使用curl上传的问题,并且已经得到了答案,但是如果这对你有用的话,在使用JFrog CLI上传时,它会自动计算并附加校验和到上传请求中。 - Eyal Ben Moshe
3个回答

44

这个功能当前文档不是很完善,可以在这个页面找到示例:

https://www.jfrog.com/knowledge-base/what-are-client-checksum-server-checksum-and-checksum-policy-in-local-repositories/

只需将以下内容添加到curl命令中:"--header "X-Checksum-<type>:${CHECKSUM}"

Sha1

CHECKSUM=$(shasum -a 1 foo.zip | awk '{ print $1 }')

curl --header "X-Checksum-Sha1:${CHECKSUM}" --upload-file "foo.zip -u "admin:<apikey>" -v https://artifactory.example.com/foo/

MD5

:MD5是一种常用的哈希算法,用于将任意长度的信息压缩成固定长度的消息摘要(通常为128位)。它具有较高的安全性和广泛的应用。
CHECKSUM=$(md5sum foo.zip | awk '{ print $1 }')

curl --header "X-Checksum-MD5:${CHECKSUM}" --upload-file "foo.zip -u "admin:<apikey>" -v https://artifactory.example.com/foo/

或者同时提供两个校验和


ARTIFACT_MD5_CHECKSUM=$(md5sum foo.zip | awk '{print $1}')
ARTIFACT_SHA1_CHECKSUM=$(shasum -a 1 foo.zip | awk '{ print $1 }')
curl --upload-file "foo.zip" \
--header "X-Checksum-MD5:${ARTIFACT_MD5_CHECKSUM}" \
--header "X-Checksum-Sha1:${ARTIFACT_SHA1_CHECKSUM}" \
-u "admin:<apikey>" \
-v https://artifactory.example.com/foo/

很不幸,使用sha256上传时,由于一个错误,无法使用curl进行上传


1
请注意,仅自Artifactory版本2.3.2起,使用标头上传校验和才可用。如果无法正常工作,请注意。参见:https://www.mail-archive.com/artifactory-users@lists.sourceforge.net/msg02203.html 对于早期版本,您需要单独上传检查点。 - Pedro
2
该链接似乎已被弃用。当前的文档似乎在 https://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API#ArtifactoryRESTAPI-DeployArtifactbyChecksum 上。 - shovavnik

15

对于 MD5、SHA1 和 SHA256,在 7.4.3 版本中这对我有效。

for file in $(find a_folder -type f)
do
    ARTIFACT_MD5_CHECKSUM=$(md5sum $file | awk '{print $1}')
    ARTIFACT_SHA1_CHECKSUM=$(shasum -a 1 $file | awk '{ print $1 }')
    ARTIFACT_SHA256_CHECKSUM=$(shasum -a 256 $file | awk '{ print $1 }')

    echo curl --upload-file $file \
            --header "X-Checksum-MD5:${ARTIFACT_MD5_CHECKSUM}" \
            --header "X-Checksum-Sha1:${ARTIFACT_SHA1_CHECKSUM}" \
            --header "X-Checksum-Sha256:${ARTIFACT_SHA256_CHECKSUM}" \
            -u "admin:${APIKEY}" \
            -v http://URL/$file
done

1
这个可行。为了消除警告,从Artifactory 6.18.1开始只需要SHA1和SHA256。MD5校验和被接受,但不是必需的。 - Geier

1

由于我没有评论的权限,我将通过回答来进行澄清。

这条评论 表示 Deploy Artifact by Checksum API 是关于带有校验和验证上传的文档。但是,这仅适用于 Artifactory 中已存在的工件上传。

正如文档所述, 它会拒绝新的工件上传并返回 404。


如果您尝试使用头部参数-H "X-Checksum-Deploy:true",那么只有在内容存在的情况下才会上传。请尝试不使用该头部参数或使用-H "X-Checksum-Deploy:false"。 - Neron Joseph
看起来现在已经记录了X-Checksum-Deploy头的行为。如果将X-Checksum-Deploy头设置为false,则无论之前是否存在,该工件都将成功上传并获得201响应,并且提交的校验和状态将为“已上传:相同”。 - gangefors

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接