最后一个阶段外部指纹存储项目已经结束了,最后,我们发布了一个更多的指纹存储插件:PostgreSQL指纹存储插件

这篇文章强调了第三阶段所取得的进展。如欲了解项目的内容及过去的进展,请参阅第一期文章第二阶段后

介绍PostgreSQL指纹存储插件

为什么PostgreSQL ?

有几个原因可以解释为什么构建另一个参考实现是有意义的,特别是在PostgreSQL支持下。

Redis是一个键值存储,因此将指纹存储为blobs。PostgreSQL插件为指纹定义了一个关系结构。这为查询数据库中的指纹信息提供了一种更强大的方法。指纹facet可以在指纹内部存储额外的信息,这些信息在Redis中无法直接查询。PostgreSQL插件允许强大的索引和高效的查询策略,甚至可以查询facet元数据。

构建这个插件的另一个原因是为其他要构建的关系数据库插件提供基础。它还验证了我们外部指纹存储API的灵活性和设计。

由于PostgreSQL是一个传统的磁盘存储数据库,它更适合存储大量指纹的系统。

在关系数据库中,PostgreSQL非常流行,得到了广泛的支持,并且是开源的。我们希望新的实现能够推动更多的采用,并证明对社区是有益的。

安装:

插件可以使用实验更新中心.运行Jenkins后,请按照以下步骤下载并安装插件:必威国际有限公司

  1. 选择管理詹金斯必威国际有限公司

  2. 选择管理插件

  3. 先进的选项卡

  4. 将更新站点URL配置为:https://updates.必威国际有限公司jenkins.io/experimental/update-center.json

  5. 点击提交,然后按检查现在按钮。

  6. 可用选项卡。

  7. 搜索PostgreSQL指纹存储插件然后在旁边的方框上打勾。

  8. 点击安装没有重启

该插件现在应该安装在系统上。

使用

插件安装完成后,您可以按照以下步骤配置PostgreSQL服务器的详细信息:

  1. 选择管理詹金斯必威国际有限公司

  2. 选择配置系统

  3. 滚动到部分指纹并选择PostgreSQL指纹存储在下拉列表中指纹存储引擎

  4. 配置以下参数连接到PostgreSQL实例:

    配置复述,

    • 宿主—输入PostgreSQL运行的主机名

    • 港口—指定运行PostgreSQL的端口

    • SSL—如果已启用SSL,单击

    • 数据库名称—指定要使用的PostgreSQL实例中的数据库名称。请注意,数据库将不会由插件创建,用户必须创建数据库。

    • 连接超时—设置连接超时时间,单位为秒。

    • 套接字超时—设置socket超时时间,单位为秒。

    • 凭证—配置对PostgreSQL实例的用户名和密码鉴权。

  5. 使用测试PostgreSQL连接按钮来验证细节是否正确,Jenkins是否能够连接到PostgreSQL实例。必威国际有限公司

  6. 当第一次配置插件时,按下执行PostgreSQL架构初始化按钮是非常重要的。它将自动执行模式初始化并创建必要的索引。该按钮还可以用于删除数据库并需要重新创建模式的情况。

  7. 按下保存按钮。

  8. 现在,这个Jenkins实例产生的所有指纹都应该保存在配置好的PostgreSQL实例必威国际有限公司中!

查询指纹库

由于PostgreSQL定义的关系结构,它允许用户/开发人员查询指纹数据,这是使用Redis指纹存储插件无法实现的。

指纹存储可以作为多个Jenkins实例的统一存储。必威国际有限公司例如,要使用文件名在Jenkins实例之间搜索指纹id,可以使用以下查询:必威国际有限公司

SELECT fingerprint_id FROM fingerprint。指纹WHERE filename = 'random_file';

提供了一个示例查询,可以根据要搜索的参数进行调整:

SELECT * FROM指纹。指纹WHERE fingerprint_id = 'random_id' AND instance_id = 'random_jenkins_instance_id' AND filename = 'random_file' AND original_job_name = 'random_job' AND original_job_build_number = 'random_build_number' AND timestamp BETWEEN '2019-12-01 23:59:59'::timestamp AND now()::timestamp

facet在数据库中存储为jsonb.PostgreSQL支持查询jsonb.这对于查询存储在指纹面内部的信息特别有用。举个例子码头工人可追溯性插件在这些方面中存储Docker映像的名称等信息。这些可以通过Jenkins实例进行查询,如下所示:必威国际有限公司

SELECT * FROM指纹。指纹_facet_relation WHERE facet_entry->>'imageName' = 'random_container';

目前,这些查询需要数据库的工作知识。将来,这些查询可以通过插件和Jenkins中直接提供给用户的特性抽象出来。必威国际有限公司

演示

外部指纹存储演示

释放

我们发布了0.1α1版本的PostgreSQL指纹存储插件.请参阅更新日志为更多的信息。

Redis指纹存储插件1.0 -rc-3也被释放。的更新日志提供更多的细节。

在Jenkins核心中做了一些API更改必威国际有限公司必威国际有限公司詹金斯- 2.253.主要包括暴露插件的指纹范围集序列化方法。

未来的发展方向

插件的关系结构允许在执行清理时进行一些性能改进,以及改进add(String job, int buildNumber)指定指定的工作编号.对这些设计进行了讨论,并提出了未来改进的范围。

当前的外部指纹存储API支持将多个Jenkins实例配置为一个存储。必威国际有限公司这为开发可跟踪插件提供了可能,可以在Jenkins实例中跟踪指纹。必威国际有限公司

如果您觉得任何用例对您有益,或者您想分享一些新的用例,请考虑与我们联系。

确认

PostgreSQL指纹存储插件和Redis指纹存储插件由谷歌Summer of Code (GSoC)团队维护詹金斯的外部指纹存储必威国际有限公司.特别感谢奥列格Nenashev安德烈法迈克Cirioli蒂姆贾科姆以及整个Jenkins社区对这个项必威国际有限公司目的贡献。

最后,我们想指出外部化指纹存储有许多未来的方向和用例,如前一节所述,我们欢迎大家贡献自己的力量。

接触

请随时联系我们,以获得任何关于项目的问题、反馈等git通道或者是必威国际有限公司Jenkins开发者邮件列表.我们使用詹金斯必威国际有限公司Jira跟踪问题。你可以把问题提交到postgresql-fingerprint-storage-plugin或者是redis-fingerprint-storage-plugin组件依赖于插件。

关于作者
苏米特沙林

必威国际有限公司Jenkins谷歌代码2020暑期班学生。Sumit是德里大学Netaji Subhas理工学院工程专业的大四学生。他于2019年12月开始了对Jenkins的贡献之旅。必威国际有限公司他的微小贡献围绕着詹金斯指纹引擎。必威国际有限公司他目前正在从事建筑工作詹金斯的外部指纹存储必威国际有限公司