使用 Crossbow 进行打包和测试#
arrow/dev/tasks
目录的内容旨在自动化 Arrow 打包和集成测试的过程。
- 软件包
适用于 Linux、macOS 和 Windows 的 C++ 和 Python conda-forge 软件包
适用于 Linux、macOS 和 Windows 的 Python Wheels
适用于多种 Linux 发行版的 C++ 和 GLib Linux 软件包
用于 Gandiva 的 Java
- 集成测试
各种 docker 测试
Pandas
Dask
Turbodbc
HDFS
Spark
架构#
执行器#
单个作业在公共 CI 服务上执行,目前:
Linux: GitHub Actions, Travis CI, Azure Pipelines
macOS: GitHub Actions, Azure Pipelines
Windows: GitHub Actions, Azure Pipelines
队列#
由于 CI 服务的工作方式,作业的调度通过一个额外的 git 存储库进行,该存储库充当任务的作业队列。 任何人都可以托管一个 queue
存储库(通常命名为 <ghuser>/crossbow
)。
一个作业是特定 git 分支上的一个 git commit,其中包含运行请求的构建所需的配置文件(例如 .travis.yml
、azure-pipelines.yml
或 GitHub Actions 的 crossbow.yml
)。
调度器#
Crossbow 处理版本生成、任务渲染和提交。 任务在 tasks.yml
中定义。
安装#
以下指南依赖于 GitHub,但理论上可以使用任何 git 服务器。
如果您未使用 ursacomputing/crossbow 存储库,您需要完成前两个步骤,否则继续执行步骤 3
为新创建的队列存储库启用 Travis CI 和 Azure Pipelines 集成。
如果您使用的是 ursacomputing/crossbow,则克隆它,或者将新创建的存储库克隆到 arrow 存储库旁边
默认情况下,脚本在
arrow
目录旁边查找crossbow
克隆,但这可以通过命令行参数进行配置。git clone https://github.com/<user>/crossbow crossbow
重要提示:Crossbow 仅支持基于 GitHub 令牌的身份验证。 尽管它会覆盖使用 ssh 协议提供的存储库 URL,但建议使用 HTTPS 存储库 URL。
创建一个具有
repo
和workflow
权限的个人访问令牌(不需要其他权限)在本地将令牌导出为环境变量
export CROSSBOW_GITHUB_TOKEN=<token>
或将其作为参数传递给 CLI 脚本
--github-token
将先前创建的 GitHub 令牌添加到 Travis CI
使用
CROSSBOW_GITHUB_TOKEN
加密环境变量。 您可以在以下 URL 设置它,其中ghuser
是 GitHub 用户名,ghrepo
是 GitHub 存储库名称(通常是crossbow
)https://travis-ci.cn/<ghuser>/<ghrepo>/settings
确认分支构建的 自动取消 功能已关闭。 这应该是默认设置。
安装 Python(最低支持版本为 3.9)
首选 Miniconda,请参阅安装说明安装包含 crossbow 本身的 archery 工具集
$ pip install -e "arrow/dev/archery[crossbow]"
尝试运行它
$ archery crossbow --help
用法#
该脚本执行以下操作
检测当前存储库,因此支持 fork。 以下代码段将构建 kszucs 的 fork,而不是上游的 apache/arrow 存储库。
$ git clone https://github.com/kszucs/arrow $ git clone https://github.com/kszucs/crossbow $ cd arrow/dev/tasks $ archery crossbow submit --help # show the available options $ archery crossbow submit conda-win conda-linux conda-osx
获取当前签出的分支的 HEAD commit,并根据 setuptools_scm 生成版本号。 因此,要构建特定分支,请在运行脚本之前检出
$ git checkout ARROW-<ticket number> $ archery crossbow submit --dry-run conda-linux conda-osx
请注意,必须预先推送 arrow 分支,因为脚本将克隆所选分支。
读取并渲染所需的构建配置,并替换参数。
为每个任务创建一个分支,以作业 ID 作为前缀。 例如,要在 linux 上构建 conda recipes,它将创建一个新分支:
crossbow@build-<id>-conda-linux
。将修改后的分支推送到 GitHub,从而触发构建。 对于身份验证,它使用安装部分中描述的 GitHub OAuth 令牌。
查询构建状态#
构建 ID(在队列存储库中具有相应的分支)由 submit
命令返回。
$ archery crossbow status <build id / branch name>
下载构建工件#
$ archery crossbow artifacts <build id / branch name>
示例#
Submit 命令接受任务名称列表和/或任务组名称列表,以选择要构建的任务。
运行多个构建
$ archery crossbow submit debian-stretch conda-linux-gcc-py37-r40
Repository: https://github.com/kszucs/arrow@tasks
Commit SHA: 810a718836bb3a8cefc053055600bdcc440e6702
Version: 0.9.1.dev48+g810a7188.d20180414
Pushed branches:
- debian-stretch
- conda-linux-gcc-py37-r40
仅渲染而不应用或提交更改
$ archery crossbow submit --dry-run task_name
仅运行 conda
软件包构建和一个 Linux 版本
$ archery crossbow submit --group conda centos-7
运行 wheel
构建
$ archery crossbow submit --group wheel
tasks.yml
中有多个任务组,例如 docker、integration 和 cpp-python,用于运行基于 docker 的测试。
archery crossbow submit
支持多个选项和参数,更多信息请参见其帮助页面
$ archery crossbow submit --help