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
:触发轮
conda
tasks.yml中定义的弩包装组@ursabot crossbow package wheel-win-cp35m wheel-win-cp36m
:仅触发 两项任务明确通过。
注意,如果提交消息包含
跳过模式,如[skip ci]
或[ci skip]
。为了驾驶乌尔萨布OT
用户必须具有"所有者"、"成员"或"参与者"
角色
通过网络用户界面
您还可以在
构建机器人用户界面。导航到构建>;构建器,
选择一个构建器,然后单击右上角的build apache/arrow
buttin。这个
触发强制调度程序,您可以在其中指定分支和/或提交到
建造。未来,专业建筑商将提供不同的领域
必要的信息。
通过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命令在
主配置。大多数情况下是checkconfig
passes然后是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-names0
定义配置环境(prod test)并启动服务:
buildbot try \ --connect=pb \ --master=... \ --username=... \ --passwd=... \ --get-builder-names1
然后在浏览器中打开http://localhost:8100。
本地再现性指令
构建器可以在本地运行,而无需使用
ursabot project build
命令。
测试<代码> AMD64 CONDA C++< /代码> Builder在Master:
buildbot try \ --connect=pb \ --master=... \ --username=... \ --passwd=... \ --get-builder-names2
测试<代码> AMD64 CONDA C++<代码> Builder用GITHUB拔出请求号140:
buildbot try \ --connect=pb \ --master=... \ --username=... \ --passwd=... \ --get-builder-names3
测试>代码> AMD64 CONDA C++<代码>本地存储库:
buildbot try \ --connect=pb \ --master=... \ --username=... \ --passwd=... \ --get-builder-names4
其中~/workspace/arrow
是本地arrow存储库的路径,并且
是工作进程生成目录下的目标目录(在这种情况下:
/buildbot/amd64空调
)
为生成传递多个buildbot属性:
buildbot try \ --connect=pb \ --master=... \ --username=... \ --passwd=... \ --get-builder-names5
失败时附加
ursabot支持调试带有附加普通外壳的失败生成 对于仍在运行的工作程序-以前生成失败的地方。
使用--attach on failure
或-a
标志。
buildbot try \ --connect=pb \ --master=... \ --username=... \ --passwd=... \ --get-builder-names6
配置ursabot
buildmaster配置发生在master.cfg
文件中。原来
buildbot加载名为buildmasterconfig
的字典,但要使其更
flexible和moduler ursabot引入了projectconfig
和masterconfig
抽象。
项目配置ig
包含测试项目的所有相关信息
就像阿帕奇之箭或厄萨博本身。projectconfig
可以单独运行,它必须
传递给masterconfig
对象,该对象提供
原始的buildbotbuildmasterconfig
。一个masterconfig
can
包含多个对象。
包括其他项目配置使之成为可能
在项目的存储库中维护与项目相关的设置
而不是为buildmaster专用的分离的。
添加新生成(ER)
与ursabot中基于yaml的传统ci配置最接近的抽象是
建筑工人。在最简单的情况下,生成器由一系列步骤定义
它们作为shell命令在worker上执行。
下面的示例生成器假设apt get
和git
可用
在工人身上。
buildbot try \ --connect=pb \ --master=... \ --username=... \ --passwd=... \ --get-builder-names7
dockerbuilder提供了更大的灵活性、更快的构建和更好的工作人员 隔离,ursabot广泛使用dockerbuilders
buildbot try \ --connect=pb \ --master=... \ --username=... \ --passwd=... \ --get-builder-names8
定义Docker图像
arrow支持多种平台,具有多种功能,因此 依赖关系。在每个构建中安装它们需要时间和资源 消耗,因此ursabot将Docker图像用于可重用性。
在ursabot.docker
模块中有一个小的docker实用程序来定义
等级图像。它使用用python实现的dsl而不是普通的dsl
档案。一个小例子来演示:
buildbot try \ --connect=pb \ --master=... \ --username=... \ --passwd=... \ --get-builder-names9
尝试在预安装pyarrow的情况下运行jupyter:
cd /path/to/ursabot
pip install -e .
0
ursabot有一个cli接口来构建docker映像:
cd /path/to/ursabot
pip install -e .
1
列出箭头C++AMD64
conda
c p p
图像:
cd /path/to/ursabot
pip install -e .
2
附加过滤:
cd /path/to/ursabot
pip install -e .
3
构建并按下箭头C++AMD64
conda
c p p
图像:
cd /path/to/ursabot
pip install -e .
4
要构建和推送所有ARM64V8
Alpine
图像:
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)