使用 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.ymlazure-pipelines.ymlcrossbow.yml,適用於 GitHub Actions )。

排程器#

Crossbow 處理版本產生、任務呈現和提交。tasks.yml 中定義了任務。

安裝#

以下指南取決於 GitHub,但理論上可以使用任何 git 伺服器。

如果您未使用 ursacomputing/crossbow 儲存庫,則需要完成前兩個步驟,否則請繼續步驟 3

  1. 建立佇列儲存庫

  2. 為新建立的佇列儲存庫啟用 Travis CIAzure Pipelines 整合。

  3. 如果您使用 ursacomputing/crossbow,請複製該儲存庫,否則請複製新建立的儲存庫到 arrow 儲存庫旁邊

    預設情況下,腳本會尋找 arrow 目錄旁邊的 crossbow 複製品,但可以透過命令列引數進行設定。

    git clone https://github.com/<user>/crossbow crossbow
    

    重要注意事項: Crossbow 僅支援基於 GitHub 令牌的驗證。儘管它會覆寫使用 ssh 協定提供的儲存庫 URL,但建議使用 HTTPS 儲存庫 URL。

  4. 建立個人存取令牌,並具有 repoworkflow 權限(不需要其他權限)

  5. 在本機將令牌匯出為環境變數

    export CROSSBOW_GITHUB_TOKEN=<token>
    

    或將其作為引數傳遞給 CLI 腳本 --github-token

  6. 將先前建立的 GitHub 令牌新增至 Travis CI

    使用 CROSSBOW_GITHUB_TOKEN 加密環境變數。您可以在以下 URL 設定它,其中 ghuser 是 GitHub 使用者名稱,ghrepo 是 GitHub 儲存庫名稱(通常為 crossbow

    https://travis-ci.com/<ghuser>/<ghrepo>/settings

    • 確認分支建置的 自動取消 功能已關閉。這應該是預設設定。

  7. 安裝 Python(最低支援版本為 3.9)

    建議使用 Miniconda,請參閱安裝說明
  8. 安裝包含 crossbow 本身的 archery 工具集

    $ pip install -e "arrow/dev/archery[crossbow]"
    
  9. 嘗試執行它

    $ archery crossbow --help
    

用法#

腳本執行以下操作

  1. 偵測目前的儲存庫,因此支援分支。以下程式碼片段將建置 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
    
  2. 取得目前簽出分支的 HEAD 提交,並根據 setuptools_scm 產生版本號碼。因此,若要建置特定分支,請在執行腳本之前簽出

    $ git checkout ARROW-<ticket number>
    $ archery crossbow submit --dry-run conda-linux conda-osx
    

    請注意,必須事先推送 arrow 分支,因為腳本將複製選定的分支。

  3. 讀取並呈現所需的建置組態,並替換參數。

  4. 為每個任務建立一個分支,並以任務 ID 為前綴。例如,若要在 Linux 上建置 conda 食譜,它將建立一個新分支:crossbow@build-<id>-conda-linux

  5. 將修改後的分支推送到 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