构建环境概述
本指南涵盖的内容 #
本指南概述了 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 : 仅 LXDarch: arm64-graviton2 : LXD 和完整 VMarch: ppc64le : 仅 LXDarch: s390x : 仅 LXD |
Ubuntu Bionic 18.04 | arch: amd64 : 仅完整 VM,默认选项arch: arm64 : 仅 LXDarch: arm64-graviton2 : 仅 LXDarch: ppc64le : 仅 LXDarch: s390x : 仅 LXD |
Ubuntu Xenial 16.04 默认 | arch: amd64 : 仅完整 VM,默认选项arch: arm64 : 仅 LXDarch: arm64-graviton2 : 仅 LXDarch: ppc64le : 仅 LXDarch: s390x : 仅 LXD |
Ubuntu Trusty 14.04 | arch: amd64 : 仅完整 VM,默认选项 |
Ubuntu Precise 12.04 | arch: amd64 : 仅完整 VM,默认选项 |
适用于 arm64 的 LXD 兼容操作系统镜像在 AWS 和 Packet 上运行。适用于 IBM Power 和 Z 的 LXD 兼容操作系统镜像在 IBM Cloud 上运行。有关更多信息,请参阅 在多个 CPU 架构上构建.
您可以通过将 virt
标签设置为 vm
或 lxd
来选择 Linux 虚拟化类型。请参阅相关 .travis.yml
示例 如下.
macOS #
一个 macOS 环境,用于 Objective-C 和其他 macOS 特定项目。
Windows #
运行 Windows Server 版本 1803 的 Windows 环境。
虚拟化环境与操作系统 #
下表总结了虚拟环境和操作系统之间的差异。
Ubuntu Linux (Focal、Bionic、Xenial 、Trusty、Precise) | macOS | Windows | Ubuntu Linux / LXD 容器 (Focal、Bionic、Xenial) | |
---|---|---|---|---|
名称 | 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
。
我的环境运行在什么基础设施上? #
通常,了解来自 上表 的虚拟化环境特征就足够了。
但是,如果您需要更多详细信息,您有以下两个问题之一
- 您想查看 完成的构建 运行在什么基础设施上。
- 您想确定 特定的
.travis.yml
配置 将运行在什么基础设施上。
对于完成的构建 #
要查看完成的构建运行在什么基础设施上,请查看构建日志顶部的主机名
如果它包含
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 提供了以下虚拟化环境。
- Trusty 基于容器的环境:在 2017 年 7 月 和 2018 年 12 月 之间可用。
- Precise 基于容器的环境:在 2014 年 12 月 和 2017 年 9 月 之间可用。
- 传统 Linux 环境:在 2015 年 12 月 之前可用。
如果你尝试在你的 travis.yml
中使用 sudo: false
或 dist: precise
键,我们建议你删除它们并切换到我们当前的 Xenial Linux 基础设施。
构建配置参考 #
你可以在我们的 Travis CI 构建配置参考 中找到有关 操作系统 的构建配置格式的更多信息。