构建环境概述

本指南涵盖的内容 #

本指南概述了 Travis CI 可以运行构建的不同环境,以及为什么要选择一个环境而不是另一个环境。

虚拟化环境 #

每个构建都在以下虚拟环境之一中运行。

Linux #

Travis CI 支持两种类型的 Linux 构建虚拟化:‘完整 VM’ 和 ‘LXD’。除此之外,Linux 构建可以在 多个 CPU 架构 上运行。

完整 VM #

这是一个支持 sudo 的完整虚拟机,每个构建都运行 Linux。

  • 启动速度慢(与 LXD 容器相比构建时间增加),但没有任何 限制.
  • 它具有固定的 vCPU 和 RAM 数量。

LXD 容器 #

这是一个支持 sudo 的 LXD 容器构建环境,与容器世界中的虚拟机尽可能接近。Linux 环境在无特权的 LXD 容器中运行。

  • 启动速度快(与完整 VM 相比构建时间减少),但有一些 限制 适用。
  • 它从最小 2 个 vCPU 开始,如果还有更多的计算时间可用,主机可以动态分配它以加速您的构建。

我使用哪一个? #

对于大多数情况,只要可用,我们建议使用基于 LXD 的容器。

仅当 LXD 不可用或您需要时使用完整 VM

  • 特权文件系统访问
  • 特定系统调用拦截
  • 巨页支持(可能会随时更改)

下表总结了每个 CPU 架构可用的 Ubuntu 环境和虚拟化类型。

Ubuntu 版本 Linux 虚拟化类型
Ubuntu Focal 20.04 arch: amd64: 仅完整 VM,默认选项
arch: arm64: 仅 LXD
arch: arm64-graviton2: LXD 和完整 VM
arch: ppc64le: 仅 LXD
arch: s390x: 仅 LXD
Ubuntu Bionic 18.04 arch: amd64: 仅完整 VM,默认选项
arch: arm64: 仅 LXD
arch: arm64-graviton2: 仅 LXD
arch: ppc64le: 仅 LXD
arch: s390x: 仅 LXD
Ubuntu Xenial 16.04 默认 arch: amd64: 仅完整 VM,默认选项
arch: arm64: 仅 LXD
arch: arm64-graviton2: 仅 LXD
arch: ppc64le: 仅 LXD
arch: s390x: 仅 LXD
Ubuntu Trusty 14.04 arch: amd64: 仅完整 VM,默认选项
Ubuntu Precise 12.04 arch: amd64: 仅完整 VM,默认选项

适用于 arm64 的 LXD 兼容操作系统镜像在 AWSPacket 上运行。适用于 IBM Power 和 Z 的 LXD 兼容操作系统镜像在 IBM Cloud 上运行。有关更多信息,请参阅 在多个 CPU 架构上构建.

您可以通过将 virt 标签设置为 vmlxd 来选择 Linux 虚拟化类型。请参阅相关 .travis.yml 示例 如下.

macOS #

一个 macOS 环境,用于 Objective-C 和其他 macOS 特定项目。

Windows #

运行 Windows Server 版本 1803 的 Windows 环境。

虚拟化环境与操作系统 #

下表总结了虚拟环境和操作系统之间的差异。

  Ubuntu Linux (FocalBionicXenialTrustyPrecise) macOS Windows Ubuntu Linux / LXD 容器 (FocalBionicXenial)
名称 Ubuntu macOS Windows Ubuntu
状态 当前 当前 早期发布 测试版
基础设施 GCE 或 AWS 上的虚拟机 虚拟机 GCE 上的虚拟机 ARM:Packet 或 AWS 上的 LXD 容器
IBM Power:IBM Cloud 上的 LXD 容器
IBM Z:IBM Cloud 上的 LXD 容器
CPU 架构 amd64
arm64-graviton2
amd64 amd64 arm64 (armv8)
arm64-graviton2
ppc64le (IBM Power)
s390x (IBM Z)
.travis.yml 请参阅 示例 os: osx os: windows 请参阅 示例
允许 sudo
大约启动时间 20-50 秒 60-90 秒 60-120 秒 <10 秒
文件系统 EXT4 HFS+ NTFS EXT4
操作系统 Ubuntu Linux macOS Windows Server 2016 Ubuntu Linux
内存 7.5 GB 4 GB 8 GB 约 4 GB
核心 2 2 2 2
IPv4 网络 IPv4 可用 IPv4 可用 IPv4 可用 IPv4 可用
IPv6 网络 IPv6 不可用 IPv6 不可用 IPv6 不可用 IPv6 可用
可用磁盘空间 约 50 GB 约 41 GB 约 40 GB 约 18 GB (Arm、IBM Power、IBM Z)

可用磁盘空间近似,具体取决于您的项目的基准映像和语言选择。确定特定映像上可用空间的最佳方法是作为构建脚本的一部分运行 df -h

我的环境运行在什么基础设施上? #

通常,了解来自 上表 的虚拟化环境特征就足够了。

但是,如果您需要更多详细信息,您有以下两个问题之一

对于完成的构建 #

要查看完成的构建运行在什么基础设施上,请查看构建日志顶部的主机名

Infrastructure shown in hostname

如果它包含

  • aws → 构建在 Amazon Web Services (AWS) 上运行。
  • gce → 构建在 Google Compute Engine 上的虚拟机中运行。
  • wjb → 构建在 macOS 上运行。
  • 1803-containers → 构建在 Windows 上运行。
  • lxd-arm64 → 构建在 Arm64 基礎架構的 LXD 容器中运行(目前由 Equinix Metal 提供,以前称为 Packet)
  • lxd-ppc64le → 构建在基于 Power 的基础设施的 LXD 容器中运行(目前由 IBM 提供)
  • lxd-s390x → 构建在基于 Z 的基础设施的 LXD 容器中运行(目前由 IBM 提供)

如果实例主机名正下方包含 ec2 → 构建在 AWS Arm64 Graviton2 基础设施的 LXD 容器或作为 ‘完整 VM’ 运行。

对于特定的 .travis.yml 配置 #

  • 我们的默认基础设施是在 Google Compute Engine 上运行的 AMD64 架构 (arch: amd64) 的 Ubuntu Linux (os: linux) 虚拟机。您可以使用 dist 键指定 Ubuntu 的版本。

  • 使用 os: osx、使用 osx_image: 设置 Xcode 的版本,或使用 macOS 特定语言(例如 language: objective-c)会将您的构建路由到 macOS 基础设施。

  • 使用 os: windows 会将您的构建路由到 Windows 基础设施。

  • 使用 arch: arm64 会将您的构建路由到基于 Arm 的 LXD 容器。您可以使用 dist 键指定 Ubuntu 的版本。

  • 使用 arch: arm64-graviton2 将你的构建路由到基于 Arm 的基础设施。你必须使用 virt 键指定目标虚拟化环境(虚拟机或 LXD 容器)。

  • 使用 arch: ppc64le 将你的构建路由到基于 IBM Power 的 LXD 容器。你可以使用 dist 键指定 Ubuntu 的版本。

  • 使用 arch: s390x 将你的构建路由到基于 IBM Z 的 LXD 容器。你可以使用 dist 键指定 Ubuntu 的版本。

  • 使用 arch: arm64-graviton2 将你路由到由 Arm64 Graviton2 CPU 支持的 AWS 环境。可用的 Ubuntu 版本取决于虚拟化类型 (lxd/vm)。

  • 如果你已将 os: 键设置为目标 Linux 环境,你可以使用 virt: 键进一步指定环境类型。

为了避免错误的键,你可以使用 构建配置验证 验证你的 .travis.yml 文件。

合作伙伴队列解决方案 #

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

Linux: .travis.yml 示例 #

AMD64 构建 #

arch: amd64          # optional, this is default, routes to a full VM
os: linux            # optional, this is default
dist: focal          # or bionic | xenial | trusty | precise with xenial as default

Arm64 构建 #

arch: arm64           # LXD container based build for OSS only
os: linux             # required for arch different than amd64
dist: focal           # or bionic | xenial with xenial as default
arch: arm64-graviton2 # in AWS over Graviton2 CPU
virt: lxd             # required, routes to an LXD container
os: linux             # required for arch different than amd64
dist: focal           # or bionic | xenial with xenial as default
group: edge
arch: arm64-graviton2 # in AWS over Graviton2 CPU
virt: vm              # required, routes to a 'full VM' instance
os: linux             # required for arch different than amd64
dist: focal
group: edge

IBM Power 和 Z 构建 #

arch: ppc64le         # The IBM Power LXD container based build for OSS only
os: linux             # required for arch different than amd64
dist: focal           # or bionic | xenial with xenial as default
arch: s390x           # The IBM Z LXD container based build for OSS only
os: linux             # required for arch different than amd64
dist: focal           # or bionic | xenial with xenial as default

Linux: 安全性和 LXD 容器 #

如果你在 virt: vm(虚拟机)环境中运行构建,则这些限制不适用。但是,请注意,与容器(LXD)相比,VM 启动速度较慢,并且分配了固定的计算能力。

访问特权 fs/功能 (Apparmor) #

出于安全原因,在 LXD 容器中运行的构建将被拒绝访问特权文件系统和路径 - 具有对例如 /sys/kernel/debugfs 的写入权限的特权容器可能会弄乱 LXD 主机。

结果,例如,在 .travis.yml 中的命令,如

sudo docker run --privileged --rm -t -v /sys/kernel/debug:/sys/kernel/debug:rw

将导致错误。

还可以查看与该主题相关的 Github 问题 以及 LXD apparmor 设置 以了解更多详细信息。

系统调用拦截 #

如果你遇到以下消息

系统不支持系统调用拦截

这很可能意味着系统调用拦截不在被认为安全的系统调用列表中(LXD 可以允许系统调用拦截 如果它被认为是安全的)。

Linux: 来自 LXD 容器内部的巨页支持 #

截至目前,Travis CI 未配置为允许在无特权容器中使用巨页。这可能会在短时间内发生变化。

无特权容器对巨页的访问由优秀的 Linux 和 LXD 团队添加。为了了解为了避免 LXD 容器的内存问题需要解决什么问题,请查看以下资源

VM 实例大小 #

如果你需要超过默认的 2 个 vCPU 和 RAM,你可以在更大的实例大小上运行构建。可变实例大小仅适用于“full-vm”构建作业。你只需使用以下标签和可用值之一,将适当的实例大小键入到你的 .travis.yml 中即可

vm:
  size: [large|x-large|2x-large]

可用的实例大小可以选择以下构建作业

  • 操作系统为 Linux、FreeBSD 或 Windows
  • CPU 架构为 amd64

在其他情况下,你可能会发现你的作业被重新路由到 Google Cloud 中的默认 Linux 队列。对 arm64 Graviton2 更大实例的支持正在进行中。

请注意,使用 VM 实例大小需要用户帐户中有一些积分。阅读更多关于我们的 计费概述

每个实例大小层级都会提供更多可供你随意使用的 vCPU 和 RAM 资源。默认值为“medium”,它映射到我们基础设施提供商中的任何基本实例,通常为 2 个 vCPU 以及大约 4 或 8 GB 的 RAM。无需明确调用它,“medium”会自动分配给你的构建作业。

大小 vCPU 内存 GiB 注释
large 4 ~16 需要积分才能使用
x-large 8 ~32 需要积分才能使用
2x-large 16 ~64 需要积分才能使用;可能仅限于某些计划

GPU VM 实例大小 #

你可以选择在各种 GPU“大小”上运行你的 GPU 构建。你只需使用以下标签和可用值之一,将适当的实例大小键入到你的 .travis.yml 中即可

vm:
 size: [gpu-medium | gpu-xlarge] #new values in the schema for existing key

可用的实例大小可以选择以下构建作业

  • 操作系统为 Linux
  • CPU 架构为 amd64

请注意,使用 GPU VM 实例大小需要用户帐户中有可用的积分。阅读更多关于我们的 计费概述

大小 vCPU HDD 内存 GB 内存类型 RAM GPU 注释
gpu-medium 8 ~300 16 GB GDDR6 30GB n1-standard-8 + NVIDIA T4 需要积分才能使用
gpu-xlarge 8 ~300 16 GB HBM2 30GB n1-standard-8 + NVIDIA V100 需要积分才能使用

已弃用的虚拟化环境 #

从历史上看,Travis CI 提供了以下虚拟化环境。

如果你尝试在你的 travis.yml 中使用 sudo: falsedist: precise 键,我们建议你删除它们并切换到我们当前的 Xenial Linux 基础设施

构建配置参考 #

你可以在我们的 Travis CI 构建配置参考 中找到有关 操作系统 的构建配置格式的更多信息。