Jenkins 2.60版本
我想使用指纹验证部署复制过程。我正在使用Jenkins API获取构建工件的指纹。我发现,当存在具有相同校验和的文件时,指纹数组中只显示其中一个文件。我需要一种方法来验证具有相同内容的其他文件的校验和。
范例:FileA和FileB具有相同的内容和相同的校验和。FileA在API指纹数组中列出,但FileB没有出现。我使用的URL是:https://jenkinshost/job/webapps/view/myview/job/myjob/1/api/json?tree=fingerprint[fileName,hash]
当我使用https://jenkinshost/fingerprint/49a681ceb33c90077fd3f49912c933ca/api/json直接检查指纹时,它返回fileName:FileA。
有没有什么方法可以验证Jenkins是否为FileB记录了相同的指纹?或者只验证校验和对作业有效而不担心文件名差异的想法?
1条答案
按热度按时间0md85ypi1#
更新:在以前的版本中,我错误地Assert匹配的哈希意味着匹配的文件名。这是错误的,因为指纹的
fileName
条目代表哈希的 * 第一次出现 * 的基础。看起来指纹识别不仅有缺陷,而且显然不是用来检查完整性或本地文件的,而只是用于 * 跟踪 * 对工件的访问。
除了文件名由于相同的哈希值而丢失之外,文件夹的详细信息也被省略了,所以即使没有模糊的文件名,您也可以得到完全误导的结果。
使用以下管道片段创建一些具有固定内容/哈希的文件,并将它们存储为工件:
字符串
比较实际的工件名称和指纹数据,你会得到这样的东西:
| 指数|工件名称|内容|指纹|
| --|--|--|--|
| 0 |
build/file_a
个|one
个|file_a
:5bbf5a52328e7439ae6e719dfe712200
|| 1 |
build/file_b
个|two
个|file_b
:c193497a1a06b2c72230e6146ff47080
|| 2 |
build/file_c
|two
个|file_b
:c193497a1a06b2c72230e6146ff47080
|| 3 |
build/folder1/file_a
个|four
个|file_a
:75ffdb827341e578959bfcabde3789d8
|| 4 |
build/folder1/file_d
个|three
个|file_d
:febe6995bad457991331348f7b9c85fa
|| 5 |
build/folder1/file_e
个|one
个|file_a
:5bbf5a52328e7439ae6e719dfe712200
|| 6 |
build/folder2/file_a
个|one
|file_a
:5bbf5a52328e7439ae6e719dfe712200
|| 7 |
build/folder2/file_b
|four
|file_a
:75ffdb827341e578959bfcabde3789d8
|| 8 |
build/folder2/file_d
|three
|file_d
:febe6995bad457991331348f7b9c85fa
|正如您所看到的,指纹列表中的
fileName
条目并不代表工件文件名,而只是第一次使用该散列进行指纹识别的工件的基本目录(即没有目录)!然而,看起来工件的 * 排序 * 列表和指纹的 * 未排序 *(即原始顺序)列表仍然对齐,因此您可以逐个获取工件名称和指纹哈希。
工件列表必须进行排序,因为工件文件名和指纹的文件名排序不同。对我来说,
sorted(artifacts)
的顺序与fingerprints
相同。这是我如何创建一个从(完整的)工件名称到哈希值的Map:
型