在多个 CPU 架构上构建
此功能处于测试阶段,我们 渴望收到您的反馈,包括
Arm
和IBM
的反馈。用于.travis.yml
文件中的定义键可能会在短时间内进一步调整。
IBM Power
和IBM Z
基于构建适用于开源存储库(在 travis-ci.com 上)。虽然适用于所有开源存储库,但在测试阶段,基于多个 CPU 架构的作业的并发性有限。尝试对私有存储库运行
IBM Power
和IBM 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 下编译针对 amd64
、arm64
、arm64-graviton2
、ppc64le
(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: edge
是arm64-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。
LXD 相关限制 #
有关更多详细信息,请参阅 构建环境概述。
合作伙伴队列解决方案 #
随着 Travis CI 引入新的计费系统,IBM 和 ARM64 基础设施的一部分将作为合作伙伴队列解决方案的一部分,继续免费提供给 OSS。有关更多详细信息,请参阅 计费概述 - 基于用量的计划 - 积分。