使用 Crossbow 進行封裝和測試#
arrow/dev/tasks
目錄的內容旨在自動化 Arrow 封裝和整合測試的流程。
- 套件
適用於 Linux、macOS 和 Windows 的 C++ 和 Python conda-forge 套件
適用於 Linux、macOS 和 Windows 的 Python Wheels
適用於多個發行版的 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 提交,其中包含執行請求的建置所需的組態檔(例如 .travis.yml
、azure-pipelines.yml
或 crossbow.yml
,適用於 GitHub Actions )。
排程器#
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.com/<ghuser>/<ghrepo>/settings
確認分支建置的 自動取消 功能已關閉。這應該是預設設定。
安裝 Python(最低支援版本為 3.9)
建議使用 Miniconda,請參閱安裝說明安裝包含 crossbow 本身的 archery 工具集
$ pip install -e "arrow/dev/archery[crossbow]"
嘗試執行它
$ archery crossbow --help
用法#
腳本執行以下操作
偵測目前的儲存庫,因此支援分支。以下程式碼片段將建置 kszucs 的分支,而不是上游 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 提交,並根據 setuptools_scm 產生版本號碼。因此,若要建置特定分支,請在執行腳本之前簽出
$ git checkout ARROW-<ticket number> $ archery crossbow submit --dry-run conda-linux conda-osx
請注意,必須事先推送 arrow 分支,因為腳本將複製選定的分支。
讀取並呈現所需的建置組態,並替換參數。
為每個任務建立一個分支,並以任務 ID 為前綴。例如,若要在 Linux 上建置 conda 食譜,它將建立一個新分支:
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