XRAY:如何自动扫描以前部署的版本?

依琳娜Floim
2023-01-22十一10

作品简介:

虽然Xray允许对存储库执行历史扫描,但这并不适用于构建。可以使用JFrog CLI扫描以前部署的尚未扫描的构建,通过运行以下命令,包括构建名称和构建号:

Jfrog rt bs build-name build-number

例如,扫描测试版本的build-id 3:

Jfrog rt bs测试3

这是一种扫描特定构建的简单方法,但是,当需要扫描数十个或数百个构建时,手动执行这样的任务可能会很乏味。本文将演示如何使用AQL、JFrog CLI和python自动化此任务。

先决条件:

准备:

在执行脚本扫描构建之前,我们应该首先准备所需的构建信息,这些信息将被用作脚本的输入。我们将使用AQL从Artifactory检索构建列表,使用jq解析结果,然后将解析后的信息附加到一个名为builds.json的文件中:

curl -uadmin:password -X POST -H 'Content-Type:text/plain' http://JFROG_URL/artifactory/api/search/aql——data "builds.find()"| jq -cr > builds.json

可以根据所需的结果使用AQL查询。上面的结果将返回所有的构建,重要的是要注意,如果Artifactory拥有大量的构建,这样的AQL请求可能是资源密集型的。

按照上面的步骤,还可以获得一个特定的构建列表(例如,基于它们被部署的日期、特定的属性等等)。例如,这个AQL查询将返回2021年12月31日之后创建的所有构建:

构建。Find ({"created": {"$gt": "2021-12-31"}})

这个AQL查询将返回所有生成Apache许可证项的构建:

builds.find({“module.artifact.item .@license”:{" $匹配”:“Apache *”}})

更多的信息可以在实体和字段部分。

的构建。Json文件应该包含构建列表,看起来应该类似于:

{“结果”:[{“build.created”:“2022 - 02 - 17 t10:35:03.839z”、“build.created_by”:“admin”、“build.name”:“新管道”、“build.number”:“38”、“build.repo”:“artifactory-build-info”、“build.started”:“2022 - 02 - 17 t10:34:56.326z”、“build.url”:“http://localhost: 8080 /工作/新管道/ 38 /”},{“build.created”:“2022 - 02 - 17 t10:36:24.418z”、“build.created_by”:“admin”、“build.name”:“新管道”、“build.number”:“39”、“build.repo”:“artifactory-build-info”、“build.started”:“2022 - 02 - 17 t10:36:17.398z”、“build.url”:“http://localhost8080 /工作/新管道/ 39 /”},{“build.created”:“2022 - 02 - 22 t07:19:00.042z”、“build.created_by”:“admin”、“build.name”:“新管道”、“build.number”:“40”、“build.repo”:“artifactory-build-info”、“build.started”:“2022 - 02 - 22 t07:18:49.973z”、“build.url”:“http://localhost: 8080 /工作/新管道/ 40 / "},



“build.started”:“2022 - 02 - 22 t08:20:15.765z”、“build.url”:“http://localhost: 8080 /工作/ test2/5”}],“范围”:{“start_pos”:0,“end_pos”:19日,“总”:19}}

执行

使用IDE创建一个包含以下脚本的python文件:

进口json
多处理。连接导入等待
进口操作系统
导入的时间

使用open ("/Users/elinaf/elina.json")作为stud:
buildList = json.load(stud)
#获取JSON文件的结果
a = buildList。(“结果”,没有一个)

对于内置a:
#打印每个版本的名称和编号
print(构建“build.name”,构建[" build.number "])
#使用jfrog命令行扫描每个构建名称和编号
操作系统。系统(f"jfrog rt bs {build['build.name']} {build['build.number']}")
打印(“在扫描下一个构建之前等待60秒…”)
time . sleep (60)

注意:这个脚本假设JFrog CLI已经在机器上配置好了,并且指向Artifactory服务器。如果CLI还没有被配置为指向Artifactory,那么可以使用c add命令执行脚本。

脚本执行的输出应该如下所示:

用户添加图片

每个构建将被扫描60秒,以避免同时扫描x射线过载。为了避免潜在的性能影响,请在Xray和Artifactory加载较少的时候运行脚本(例如在下班后或周末)。