精确构建环境

Precise 已被 Canonical 终止支持,请尝试更新到更新的镜像。它被视为 Travis CI 中已弃用的构建环境,并且不支持任何更新。过去的指南,仅供参考:Precise 到 Trusty 迁移指南Trusty 到 Xenial 迁移指南

本指南涵盖的内容 #

本指南解释了 Travis CI 环境(通常称为“CI 环境”)中可用的软件包、工具和设置。

概述 #

Travis CI 在隔离的虚拟机中运行构建,这些虚拟机为每个构建提供一个原始的构建环境。

这样做的好处是构建之间不会保留任何状态,从而提供了一个干净的状态,并确保您的测试在从头开始构建的环境中运行。

构建可以访问各种服务以进行数据存储和消息传递,并且可以安装运行所需的任何内容。

网络 #

传统环境中运行测试的虚拟机启用了 IPv6。它们没有任何外部 IPv4 地址,但能够与任何外部 IPv4 服务通信。基于容器的、macOS 和 GCE(Precise 和 Trusty)构建目前没有 IPv6 连接。

IPv6 堆栈可能会对 Java 服务产生一些影响,在某些情况下,可能需要设置标志 java.net.preferIPv4Stack 以强制 JVM 使用 IPv4 堆栈,如果服务出现无法启动或无法通过网络访问的问题: -Djava.net.preferIPv4Stack=true

大多数服务在与本地主机通信时都能正常工作,方法是使用 localhost127.0.0.1

所有 Precise 镜像通用的环境 #

您将在下面找到我们基于 Precise 的镜像的通用内容列表。

对于其他镜像,请参见下面的列表

版本控制 #

所有 VM 镜像都预装了以下内容

  • 来自 git-core PPA 的 Git 1.8 版本
  • Mercurial(官方 Ubuntu 软件包)
  • Subversion(官方 Ubuntu 软件包)

编译器和构建工具链 #

GCC、Clang、make、autotools、cmake、scons。

网络工具 #

curl、wget、OpenSSL、rsync

Go #

Go 编译器/构建工具。

运行时 #

每个工作器至少有一个版本的

  • Ruby
  • OpenJDK
  • Python
  • Node.js
  • Go 编译器/构建工具

以适应构建期间可能需要其中一个运行时的项目。

特定于语言的工作器具有其各自语言的多个运行时(例如,Ruby 工作器大约有 10 个 Ruby 版本/实现)。

数据存储 #

  • MySQL
  • PostgreSQL
  • SQLite
  • MongoDB
  • Redis
  • Riak
  • Apache Cassandra
  • Neo4j 社区版
  • ElasticSearch
  • CouchDB

Firefox #

所有虚拟环境都安装了最新版本的 Firefox,目前 Linux 环境为 31.0,macOS 环境为 25.0。

如果您需要特定版本的 Firefox,请使用 Firefox 附加组件在构建的 before_install 阶段安装它。

例如,要安装 17.0 版,请将以下内容添加到您的 .travis.yml 文件中

addons:
  firefox: "17.0"

请注意,该附加组件仅在 64 位 Linux 环境中有效。

消息传递技术 #

无头浏览器测试工具 #

环境变量 #

每个构建环境都提供了一个 默认环境变量列表

#

  • OpenSSL
  • ImageMagick

apt 配置 #

apt 配置为不需要确认(默认情况下假设 -y 开关),同时使用 DEBIAN_FRONTEND 环境变量和 apt 配置文件。这意味着可以使用 apt-get install -qq 而无需 -y 标志。

组成员身份 #

执行构建的用户($USER)属于从该用户派生的一个主组。如果您的项目需要额外的成员资格才能运行构建,请按照以下步骤操作

  1. 设置环境。这可以在构建生命周期的任何时间在构建脚本执行之前完成。

    1. 设置和导出环境变量。
    2. $USER 添加到所需的辅助组:sudo usermod -a -G SECONDARY_GROUP_1,SECONDARY_GROUP_2 $USER

    您可以使用 -g 修改用户的初级组。

  2. 您的 script 将如下所示

    script: sudo -E su $USER -c 'COMMAND1; COMMAND2; COMMAND3'
    

这会将环境变量传递到以 $USER 身份运行的 bash 进程,同时保留上面在 usermod 中定义的环境变量和属于辅助组的环境变量。

构建系统信息 #

在构建日志中,“构建系统信息”中显示了相关软件版本(包括可用的语言版本)。

Go VM 镜像 #

以下别名可用,建议使用它们以最大程度地减少镜像更新时的摩擦

  • go1go1.8 → 1.8.1
  • go1.0 → 1.0.3
  • go1.1.x → 1.1.2
  • go1.2 → 1.2.2
  • go1.2.x → 1.2.2
  • go1.3.x → 1.3.3
  • go1.4.x → 1.4.3
  • go1.5.x → 1.5.4
  • go1.6.x → 1.6.4
  • go1.7.x → 1.7.5
  • go1.8.x → 1.8.1
  • go1.x → 1.8.1
  • go1.x.x → 1.8.1

JVM(Clojure、Groovy、Java、Scala)VM 镜像 #

有关构建 JVM 项目的具体详细信息,请参阅 默认 JVM 选项

JDK #

  • Oracle JDK 7 (oraclejdk7)
  • OpenJDK 7 (openjdk7)
  • OpenJDK 6 (openjdk6)
  • Oracle JDK 8 (oraclejdk8)

Oracle JDK 7 是默认值,因为与 Ubuntu 存储库中的 OpenJDK 7 相比,我们的补丁级别更新得多。未提供 Sun/Oracle JDK 6,因为它在 2012 年秋季已结束生命周期。

当您为 JVM 镜像选择 jdk 值时,$JAVA_HOME 将被正确设置。

Maven 版本 #

使用标准的 Apache Maven 3.2.x,配置为使用 中央仓库Sonatype 镜像。

Leiningen 版本 #

Travis CI 同时拥有独立的(“uberjar”)Leiningen 1.7.x 版本,位于 /usr/local/bin/lein1,以及 Leiningen 2.4.x 版本,位于 /usr/local/bin/lein2。默认版本为 2.4.x;/usr/local/bin/lein 是指向 /usr/local/bin/lein2 的符号链接。

SBT 版本 #

由于强大的 sbt-extras 替代方案,Travis CI 理论上可以提供任何版本的 Simple Build Tool(sbt 或 SBT)。为了减少构建时间,一些常用的 sbt 版本已经预先安装(例如 0.13.5 或 0.12.4),但 sbt 命令能够动态检测并安装 Scala 项目所需的 sbt 版本。

有关使用 sbt 构建项目的具体细节,请参阅 默认 sbt 选项

Gradle 版本 #

Gradle 2.0。

Erlang VM 镜像 #

Erlang/OTP 版本 #

Erlang/OTP 版本使用 kerl 构建。

Rebar #

Travis CI 提供了最新版本的 Rebar。如果某个仓库在根目录下包含名为 ./rebar 的 Rebar 二进制文件,则会使用该文件,而不是预先提供的版本。

JavaScript 和 Node.js 镜像 #

Node.js 版本 #

Node.js 运行时环境使用 nvm 构建和安装。

SCons #

SCons

Haskell VM 镜像 #

Haskell 平台版本 #

Haskell 平台 2012.02 和 GHC 7.0、7.4、7.6 和 7.8。

Perl VM 镜像 #

Perl 版本通过 Perlbrew 安装。默认 Perl 版本为 5.14。

支持多线程的 Perl 运行时环境 #

一些 Perl 版本已编译为支持多线程。它们使用额外的编译标志 -Duseshrplib-Duseithreads 编译。

5.26-shrplib
5.24-shrplib
5.22-shrplib
5.20-shrplib
5.18-shrplib

预安装模块 #

cpanm (App::cpanminus)
Dist::Zilla
Dist::Zilla::Plugin::Bootstrap::lib
ExtUtils::MakeMaker
LWP
Module::Install
Moose
Test::Exception
Test::Kwalitee
Test::Most
Test::Pod
Test::Pod::Coverage

PHP VM 镜像 #

PHP 版本 #

PHP 运行时环境使用 php-build 构建。

XDebug #

已支持。

核心扩展 #

请参阅 默认配置选项 以了解已启用的核心扩展的概述。

扩展 #

[PHP Modules]
bcmath
bz2
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
intl
json
libxml
mbstring
mcrypt
mysql
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
sysvshm
tidy
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
zip
zlib

[Zend Modules]
Xdebug

PHP 的 Chef Cookbook #

如果您想了解我们如何构建和配置多个 PHP 安装的全部细节,请参阅我们的 php、phpenv 和 php-build Chef Cookbook

Python VM 镜像 #

Python 版本 #

每个 Python 版本都有一个单独的 virtualenv,其中包含 pipdistribute,并在运行构建之前激活。

Python 2.4 和 Jython 不受支持,并且将来也没有计划支持它们。

默认 Python 版本 #

如果您在 .travis.yml 中省略了 python 键,Travis CI 将使用 Python 2.7。

预安装的 pip 包 #

  • nose
  • py.test
  • mock
  • wheel

在所有版本(除了 pypy 和 pypy3)上,还包含 numpy

Ruby 镜像 #

Ruby 镜像包含以下最新版本:

  • Ruby:2.2.0、2.1.x、2.0.0、1.9.3、1.9.2 和 1.8.7
  • JRuby:1.7.x(1.8 和 1.9 模式)
  • Ruby Enterprise Edition:1.8.7 2012.02

Ruby 1.8.6 和 1.9.1 已不再受 Travis CI 支持。

预编译版本按需从以下地址下载:

Rubinius Ruby 已不再受 Precise 支持

Bundler 版本 #

最新的 1.7.x 版本(通常是最新的版本)

全局 gem 集中的 gem #

  • bundler
  • rake

其他 Ubuntu Linux 构建环境 #

您可以查看 Ubuntu Linux 概述页面 以了解您可以使用的不同 Ubuntu Linux 构建环境。