buildbot持续集成工具的扩展

ursabot的Python项目详细描述


构建状态

Ursa Labs针对Apache Arrow的BuildBot配置

ursabot是一个基于 buildbot框架。Ursabot的主要关注点是 执行各种构建基准和打包任务 apache arrow但是ursabot可以用于任意项目。

显著功能

  • 一个独立的项目抽象,使项目配置模块 和可重用的,以及支持多个 项目
  • 通过命令行界面生成本地可复制的版本
  • 在生成失败时,将可附加到Docker Workers的交互式shell
  • Docker工人的本地源安装
  • Decrelerative Builder配置和Docker Builder,使其更容易 与Docker潜在员工合作
  • 通过github注释将github钩子扩展到驱动buildbot
  • 基于单击的注释分析器
  • 改进的更改筛选器,根据生成属性筛选更改
  • 重新实现的github记者:状态、评论和评论记者
  • 易于扩展的格式化程序类,可与重新实现的报告器一起使用
  • 基于新型外壳命令步骤实现的步骤
  • 将多个github令牌与github服务一起使用的令牌旋转器
  • 一个Docker图像工具,用于维护和构建分层Docker图像
  • 命令行界面和其他实用程序

驾驶Ursabot

允许公关评审员在评审中根据需要请求额外检查 过程使我们更容易在审查时进行额外审查 还可以通过使用人工专业知识来了解哪些检查是 需要。

通过评论

ursabot通过webhook接收github事件。它监听拉请求 提到@ursabot的评论。它遵循命令行的语义 接口,要查看可用的命令,请在拉取请求上添加注释: @ursabot--help

@ursabot github用户将对github上的对话作出响应或对评论中的想法作出反应 开始为您构建。命令解析器在 命令.py

当前可用的命令:

  • @ursabot build:触发所有ursabot测试。这些测试正在运行 自动生成,但这是强制重新生成的方便方法。
  • 代码> @ URSABOT基准< /代码>:触发C++基准,并将结果作为结果发送回 github注释并突出显示回归。
  • @ursabot crossbow test cpp python:触发cpp python测试组 定义于test.yml中,并用指向 github用户界面上提交的弩分支显示了构建状态。
  • @ursabot crossbow package-g wheel-g conda:触发condatasks.yml中定义的弩包装组
  • @ursabot crossbow package wheel-win-cp35m wheel-win-cp36m:仅触发 两项任务明确通过。

注意,如果提交消息包含 跳过模式,如[skip ci][ci skip]。为了驾驶乌尔萨布OT 用户必须具有"所有者"、"成员"或"参与者" 角色

通过网络用户界面

您还可以在 构建机器人用户界面。导航到构建>;构建器, 选择一个构建器,然后单击右上角的build apache/arrowbuttin。这个 触发强制调度程序,您可以在其中指定分支和/或提交到 建造。未来,专业建筑商将提供不同的领域 必要的信息。

通过cli

buildbot支持直接向集群提交本地补丁 触发特定生成器。tryscheduler是一种非常方便的测试方法 不污染git历史的本地更改:

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names

如果有人想使用此功能,请提出问题,因为 需要自定义凭据。

安装ursabot和cli

在本地运行它有助于开发和测试新功能和/或 在不接触生产实例的情况下调试问题。

安装至少需要Python3.6:

cd /path/to/ursabot
pip install -e .

现在可以使用ursabot命令在 当前目录。master.cfg可以通过--config显式传递 选项:

ursabot -c path/to/master.cfg

描述加载的主配置:

ursabot desc

描述加载的项目配置:

ursabot project desc  # for master configs with a single project
ursabot project -p arrow desc  # for master configs with multiple projects

如何验证配置

checkconfig命令在 主配置。大多数情况下是checkconfigpasses然后是master 可以成功运行(除非有一些变量仅在 运行时)。

ursabot checkconfig

ursabot命令默认从当前目录加载master.cfg,但是 --config参数可以被传递来显式定义配置文件。

ursabot -c arrow/master.cfg checkconfig

顶级master.cfg包含 因此它需要额外的依赖项,比如pass。 安装pass

which apt && sudo -H apt install -V -y pass
which brew && brew install pass

运行ursabot的本地实例

安装后必须初始化主数据库:

ursabot -v upgrade-master

启动/停止/重新启动主机:

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
0

定义配置环境(prod test)并启动服务:

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
1

然后在浏览器中打开http://localhost:8100

本地再现性指令

构建器可以在本地运行,而无需使用 ursabot project build命令。

测试<代码> AMD64 CONDA C++< /代码> Builder在Master:

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
2

测试<代码> AMD64 CONDA C++<代码> Builder用GITHUB拔出请求号140:

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
3

测试>代码> AMD64 CONDA C++<代码>本地存储库:

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
4

其中~/workspace/arrow是本地arrow存储库的路径,并且 是工作进程生成目录下的目标目录(在这种情况下: /buildbot/amd64空调

为生成传递多个buildbot属性:

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
5

失败时附加

ursabot支持调试带有附加普通外壳的失败生成 对于仍在运行的工作程序-以前生成失败的地方。

使用--attach on failure-a标志。

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
6

配置ursabot

buildmaster配置发生在master.cfg文件中。原来 buildbot加载名为buildmasterconfig的字典,但要使其更 flexible和moduler ursabot引入了projectconfigmasterconfig 抽象。 项目配置ig包含测试项目的所有相关信息 就像阿帕奇之箭或厄萨博本身。projectconfig可以单独运行,它必须 传递给masterconfig对象,该对象提供 原始的buildbotbuildmasterconfig。一个masterconfigcan 包含多个对象。 包括其他项目配置使之成为可能 在项目的存储库中维护与项目相关的设置 而不是为buildmaster专用的分离的。

添加新生成(ER)

与ursabot中基于yaml的传统ci配置最接近的抽象是 建筑工人。在最简单的情况下,生成器由一系列步骤定义 它们作为shell命令在worker上执行。 下面的示例生成器假设apt getgit可用 在工人身上。

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
7

dockerbuilder提供了更大的灵活性、更快的构建和更好的工作人员 隔离,ursabot广泛使用dockerbuilders

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
8

定义Docker图像

arrow支持多种平台,具有多种功能,因此 依赖关系。在每个构建中安装它们需要时间和资源 消耗,因此ursabot将Docker图像用于可重用性。

ursabot.docker模块中有一个小的docker实用程序来定义 等级图像。它使用用python实现的dsl而不是普通的dsl 档案。一个小例子来演示:

buildbot try \
  --connect=pb \
  --master=... \
  --username=... \
  --passwd=... \
  --get-builder-names
9

尝试在预安装pyarrow的情况下运行jupyter:

cd /path/to/ursabot
pip install -e .
0

ursabot有一个cli接口来构建docker映像:

cd /path/to/ursabot
pip install -e .
1

列出箭头C++AMD64condac p p图像:

cd /path/to/ursabot
pip install -e .
2

附加过滤:

cd /path/to/ursabot
pip install -e .
3

构建并按下箭头C++AMD64condac p p图像:

cd /path/to/ursabot
pip install -e .
4

要构建和推送所有ARM64V8Alpine图像:

cd /path/to/ursabot
pip install -e .
5

开发ursabot

buildbot不使用二进制轮子分发其测试套件,因此 要运行单元测试,必须从源安装buildbot:

cd /path/to/ursabot
pip install -e .
6

预提交挂钩

安装预提交,然后设置git 挂钩运行预提交安装

向ci.ursalabs.org添加新工人

添加Docker潜在Workers需要在workers.yaml配置中有一个Worker条目。 名称、架构和docker主机(buildmaster可以访问)是 必需,请参阅workers.yaml中的示例。 也可以添加非Docker Workers,但必须在 master.cfg

可能的进一步改进

这些都已经讨论过了,很有价值,但肯定是 "很高兴拥有",应该推迟到主要目标实现为止。

  • 用于存储基准测试结果的数据库
  • 用于托管生成工件的中心站
  • 显示所有平台和配置的构建运行状况的仪表板

更密切的关系:

  • 缩放的多主设置
  • 设置wamp/crossbar以在不取消运行的情况下重新启动buildmaster 建立
  • Windows容器和工作程序(虚拟化节点中的Docker)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java文件分块,获取长度字节   java嵌入式Tomcat不执行jsf页面   java我的数据库中有2个实体,但hibernate返回其中6个。   java如何基于逗号拆分字符串   java取消已经运行的CompletableFutures的预期模式是什么   java如何在informix中从另一个数据库复制表ddl和数据   为什么图片是黑色的?   java根据字符串数组中的单词筛选列表   Java8的集合。平行流有效吗?   Kotlin中的java静态内部类   java如何在GUI中生成一列字符串   javafx如何正确使用高对比度主题?   带空格的javascript Httpurlconnection参数   java如何设置GridBagLayout的约束   java如何在一个线程可能尚未初始化时关闭另一个线程   java将简单时间格式转换为特殊时间格式(hhmmt)   安卓/java阵列重复过滤器的问题   java在队列的链接实现下,入队和出队是如何工作的   java更新sql外键约束