在多个 CPU 架构上构建

此功能处于测试阶段,我们 渴望收到您的反馈,包括 ArmIBM 的反馈。用于 .travis.yml 文件中的定义键可能会在短时间内进一步调整。

IBM PowerIBM Z 基于构建适用于开源存储库(在 travis-ci.com 上)。虽然适用于所有开源存储库,但在测试阶段,基于多个 CPU 架构的作业的并发性有限。

尝试对私有存储库运行 IBM PowerIBM Z 基于构建将导致

  • 在标准的 AMD 基于基础架构上运行构建,针对 IBM-Z
  • PPC64LE 基础架构上运行构建,但在正常系统条件下(包括任何适用费用),针对 IBM Power

对于在多架构构建可用之前与之相关的任何商业查询,请 联系我们

Arm 基于构建在 Arm64 CPU 上仅适用于开源存储库(在 travis-ci.com 上)。虽然适用于所有开源存储库,但在测试阶段,基于多个 CPU 架构的作业的并发性有限。

Arm 基于构建在 Arm64 Graviton2 CPU 上现在支持开源项目和商业项目。总并发能力有限,但可能会根据需求进行调整。

多 CPU 可用性 #

如果您的代码在多个 CPU 架构上使用,那么它应该在多个 CPU 架构上进行测试。Travis CI 可以在

  • amd64,
  • ppc64le(IBM Power CPU),
  • s390x(IBM Z CPU),
  • arm64(在 ARMv8 兼容 CPU 上运行)
  • arm64-graviton2(新一代 ARMv8 兼容 CPU,在 AWS 上,仅适用于 travis-ci.com

上进行测试,如果操作系统是 Linux。下表简要概述了 CPU 和项目类型组合

架构 开源 商业
amd64
ppc64le.
s390x
arm64(v8)
arm64-graviton2(v8)

目前,这两个 arm64 标签用于区分仅 OSS 支持(arch: arm64)和 OSS 和商业都支持(arch: arm64-graviton2)。

默认 CPU 架构 #

Travis CI 构建中使用的默认 CPU 架构是 amd64。在没有 arch 键的情况下使用它。

识别构建作业的 CPU 架构 #

您可以通过以下方式识别构建作业运行的 CPU 架构

  • GUI
    • 在构建作业列表中,有一个基于 arch 标签值的特定标签和架构名称
    • 在构建作业视图中,相同的特定标签显示在操作系统标识符附近
  • 在构建作业期间打印出的默认环境变量:$TRAVIS_CPU_ARCH(有关可用默认环境变量的完整列表,请参阅我们的 环境变量 - 默认环境变量 文档)。

在多个 CPU 架构上测试 #

要启用在多个 CPU 架构上进行测试,请将 arch 键添加到您的 .travis.yml

arch:
  - amd64
  - ppc64le
  - s390x
  - arm64  # please note arm64-graviton2 requires explicit virt: [lxd|vm] tag so it's recommended for jobs.include, see below
os: linux  # different CPU architectures are only supported on Linux

如果您已经使用 构建矩阵 来测试多个版本,则 arch 键也会将矩阵乘以。

  • 在与 LXD 兼容的 Linux 操作系统映像中运行 ppc64le(IBM Power)和 s390x(IBM Z)构建作业。
  • 在与 LXD 兼容的 Linux 操作系统映像中运行 arm64 CPU 架构构建作业。
  • arm64-graviton2 架构构建可以在 LXD 和常规“完整 VM”环境中运行。您 **需要** 通过使用 virt 键显式设置目标环境。 virt: vm 将构建作业路由到完整虚拟机设置,而 virt: lxd 将构建作业路由到 LXD 容器设置。
  • Travis CI 支持的默认 LXD 映像是 Ubuntu Xenial 16.04,并且通过使用 dist,您可以选择不同的受支持的 LXD 映像。另请参阅我们的 CI 环境概述 - 虚拟化环境与操作系统 文档。运行基于 LXD 的构建的 LXD 主机位于 Ubuntu 18.04 上。
  • amd64 CPU 架构构建作业当前作为常规“完整 VM”运行,并且将随着时间的推移过渡到使用与 LXD 兼容的 Linux 操作系统映像。

多架构构建矩阵示例 #

以下是在 .travis.yml 文件中使用 arch 键在 Linux 下编译针对 amd64arm64arm64-graviton2ppc64le(IBM Power)和 s390x(IBM Z)的示例,并使用 C 作为编程语言。

language: c

arch:
  - amd64
  - arm64  # please note arm64-graviton2 requires explicit virt: [lxd|vm] tag so it's recommended for jobs.include, see below
  - ppc64le
  - s390x

compiler:
  - gcc
  - clang

install: skip

script:
  - cd src
  - make all

上面的 .travis.yml 文件创建了一个 2x4 构建矩阵:编译器 x 每个架构。

有很多选项可用,使用 matrix.include 键对于包含任何特定条目至关重要。例如,此矩阵会将构建路由到 arm64 和 amd64 架构环境

请注意,group: edgearm64-graviton2 架构所必需的。

jobs:
  include:
   - os: linux
     arch: amd64
   - os: linux
     arch: arm64
   - os: linux
     arch: arm64-graviton2
     virt: lxd
     group: edge

类似地,此矩阵会将构建路由到 ppc64le(IBM Power)和 s390x(IBM Z)架构环境

jobs:
  include:
   - os: linux
     arch: ppc64le
   - os: linux
     arch: s390x

请注意,显式包含的构建将继承数组中的第一个值

arch:
  - amd64
  - arm64
  - ppc64le
  - s390x
jobs:
  include:
   - os: linux
     env: LIB_PATH="/usr/bin/shared/x86_64/v1"
   - os: linux
     env: LIB_PATH="/usr/bin/shared/x86_64/v2"

例如,上面的 .travis.yml 将导致运行分配了不同值的两个作业的环境变量 LIB_PATH 仅在 amd64 架构上运行。

在 LXD 容器中使用基于多个 CPU 架构的构建中的 Docker #

可以在 LXD 容器中使用基于多个 CPU 架构的构建中的 Docker。您可能需要一个特定 CPU 架构兼容的 Docker 映像作为基础,或者确保构建所需的库已添加到 Dockerfile 中。

从针对 arm64 调整的 Dockerfile 构建 Docker 映像的示例

arch: arm64
language: c
compiler: gcc
services:
  - docker
script: docker build -t my/test -f Dockerfile.arm64 .

运行 Docker 映像的示例

arch: arm64
services:
  - docker
script: docker run my/test #assuming docker image my/test is arm64v8 ready

您也可以尝试针对基于 ppc64le(IBM Power)和 s390x(IBM Z)的 Docker 构建,假设使用了所有依赖项和/或 CPU 架构兼容的基础 Docker 映像。

您也可以查看 在构建中使用 Docker

有关更多详细信息,请参阅 构建环境概述

合作伙伴队列解决方案 #

随着 Travis CI 引入新的计费系统,IBM 和 ARM64 基础设施的一部分将作为合作伙伴队列解决方案的一部分,继续免费提供给 OSS。有关更多详细信息,请参阅 计费概述 - 基于用量的计划 - 积分