安装依赖项
在标准基础设施上安装软件包 #
要安装标准 precise、trusty、xenial 或 bionic 发行版中未包含的 Ubuntu 软件包,请在 .travis.yml
文件的 before_install
步骤中使用 apt-get。
before_install:
- sudo apt-get -y install libxml2-dev
默认情况下,apt-get update
不会自动运行。如果希望在每次构建时自动更新 apt-get update
,则有两种方法。第一种方法是在 before_install
步骤中显式运行 apt-get update
。
before_install:
- sudo apt-get update
- sudo apt-get -y install libxml2-dev
第二种方法是使用 APT 插件
before_install:
- sudo apt-get -y install libxml2-dev
addons:
apt:
update: true
不要在构建中运行
apt-get upgrade
,因为它会下载多达 500MB 的软件包,并显着延长构建时间。此外,某些软件包可能无法更新,这将导致构建失败。将
-y
参数与 apt-get 一起使用,以对 apt 工具的所有查询都假设为 yes。
从自定义 APT 存储库安装软件包 #
对于某些软件包,您可能会找到一个现有的存储库,该存储库尚未默认设置在我们的构建环境中。您可以轻松地将自定义存储库和 Launchpad PPA 添加到构建的一部分。
例如,要从 ubuntu-toolchain ppa 安装 gcc
before_install:
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
- sudo apt-get -q update
- sudo apt-get -y install gcc-4.8
对于不在 Launchpad 上托管的存储库,您还需要添加一个 GnuPG 密钥。
如果您以这种方式安装软件包,请确保下载适合您的环境的正确版本。
此示例将 Ubuntu 12.04 的 Varnish 3.0 的 APT 存储库添加到本地可用的 APT 源列表中,然后安装 varnish
软件包。
before_script:
- curl http://repo.varnish-cache.org/debian/GPG-key.txt | sudo apt-key add -
- echo "deb http://repo.varnish-cache.org/ubuntu/ precise varnish-3.0" | sudo tee -a /etc/apt/sources.list
- sudo apt-get -qq update
- sudo apt-get -y install varnish
在没有 APT 存储库的情况下安装软件包 #
对于某些项目,可能存在可用的 Debian/Ubuntu 软件包,但没有相应的 APT 存储库。这些仍然很容易安装,但需要额外的下载步骤。
如果您以这种方式安装软件包,请确保下载适合您的环境的正确版本。
假设您的项目需要 pngquant 工具来压缩 PNG 文件,以下是下载和安装 .deb 文件的方法
before_install:
- wget http://pngquant.org/pngquant_1.7.1-1_i386.deb
- sudo dpkg -i pngquant_1.7.1-1_i386.deb
使用 APT 插件安装软件包 #
您还可以使用 APT 插件安装软件包和源代码,而无需在 before_install
脚本中运行 apt-get
命令。
如果您的需求超出了正常安装范围,请使用上面描述的其他方法。
添加 APT 源 #
要添加 APT 源,您可以使用以下三种类型的条目之一
- 在 源安全列表 中定义的别名
sourceline
键值对将添加到/etc/apt/sources.list
中- 当 APT 源需要 GPG 密钥时,除了
sourceline
之外,您还可以使用key_url
对指定密钥。
以下代码段显示了这三种类型的 APT 源
addons:
apt:
sources:
- deadsnakes
- sourceline: 'ppa:ubuntu-toolchain-r/test'
- sourceline: 'deb https://packagecloud.io/chef/stable/ubuntu/precise main'
key_url: 'https://packagecloud.io/gpg.key'
添加 APT 软件包 #
在 addons.apt.packages
键下列出 APT 软件包
addons:
apt:
packages:
- cmake
- time
注意:当将 APT 源和软件包一起使用时,您需要确保它们位于 YAML 文件中的同一密钥空间下。例如:
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gcc-4.8
- g++-4.8
注意:如果
apt-get install
失败,则构建将标记为错误。
您还可以查看我们 Travis CI 构建配置参考 中的 Apt 部分。
使用 Snaps 插件安装 Snap 软件包 #
您可以使用我们的 Xenial 或 Bionic 镜像安装 snap 软件包
dist: xenial
或者
dist: bionic
Ubuntu Snap 商店提供许多由上游开发人员直接维护的软件包,这些软件包通常比 Apt 存档中提供的软件包版本更新。
您可以将 snaps 指定为一个 snap 规范数组,每个规范都采用两种可能的格式之一
-
snap 的名称,它将传递给
snap install
而不带其他标志。例如:dist: xenial addons: snaps: - hugo
这将导致
$ sudo snap install hugo
-
指定 snap 如何安装的映射。可能的键为:
name
、confinement
和channel
。confinement
键将用于添加--classic
或--devmode
标志,channel
将传递给--channel
标志。例如:dist: xenial addons: snaps: - name: aws-cli confinement: classic # or devmode channel: latest/edge # will be passed to --channel flag
这将导致
$ sudo snap install aws-cli --classic --channel=latest/edge
confinement
和channel
是可选的。
在 macOS 上安装软件包 #
要安装 默认 macOS 环境 中未包含的软件包,请使用 Homebrew。
为了方便起见,您可以在 .travis.yml
中使用 Homebrew 插件。例如,要安装 beanstalk
addons:
homebrew:
packages:
- beanstalk
默认情况下,Homebrew 插件在安装软件包之前不会运行 brew update
。brew update
可能需要很长时间,从而减慢构建速度。如果您需要比构建虚拟机上的快照更新的软件包版本,则可以在插件配置中添加 update: true
addons:
homebrew:
packages:
- beanstalk
update: true
安装 Casks #
Homebrew 插件还支持安装 casks。您可以将它们添加到 Homebrew 插件配置中的 casks
键以安装它们
addons:
homebrew:
casks:
- dotnet-sdk
从 Taps 安装 #
Homebrew 支持从称为 taps 的第三方存储库安装 casks 和软件包,您可以在 Homebrew 插件中使用它们。
例如,Homebrew 在 homebrew/cask-versions
中维护了某些 casks 的旧版本的 tap。如果您想在安装了 Java 10 的镜像上安装 Java 8,您可以添加该 tap,然后安装 java8
cask
osx_image: xcode10
addons:
homebrew:
taps: homebrew/cask-versions
casks: java8
使用 Brewfile #
在幕后,Homebrew 插件通过创建 ~/.Brewfile
并运行 brew bundle --global
来工作。您还可以使用该插件从您自己的 Brewfile 安装依赖项,该文件已检入到您的项目中。通过传递 brewfile: true
,插件将在项目的根目录中查找 Brewfile
addons:
homebrew:
brewfile: true
如果您的 Brewfile 位于其他位置,您也可以提供路径。
addons:
homebrew:
brewfile: Brewfile.travis
在旧版 macOS 镜像上不使用插件使用 Homebrew #
如果您直接在构建脚本中运行 brew
命令,并且您使用的是旧版 macOS 镜像,您可能会看到如下警告
Homebrew must be run under Ruby 2.3! You're running 2.0.0.
您需要更新到 Ruby 2.3 或更高版本
rvm use 2.3 --install --binary
brew update
brew install openssl
rvm use $TRAVIS_RUBY_VERSION # optionally, switch back to the Ruby version you need.
您也可以查看我们 Travis CI 构建配置参考 中的 Homebrew 部分。
在 FreeBSD 上安装软件包 #
要安装默认 FreeBSD 环境中未包含的软件包,请在 .travis.yml
文件的 before_install
步骤中使用 pkg
命令。
before_install:
- su -m root -c 'pkg install -y curl'
为了方便起见,您可以在 .travis.yml
文件中使用 pkg
附加组件。例如,要安装 go 和 curl:
addons:
pkg:
- go
- curl
在多个操作系统上安装依赖项 #
如果您同时在 Linux 和 macOS 上进行测试,则可以同时使用 APT 附加组件和 Homebrew 附加组件。每个附加组件仅在其相应的平台上运行。
addons:
apt:
packages: foo
homebrew:
packages: bar
如果您要手动安装软件包,请使用 $TRAVIS_OS_NAME
变量为每个操作系统分别安装依赖项。
install:
- if [ $TRAVIS_OS_NAME = linux ]; then sudo apt-get install foo; else brew install bar; fi
从源代码安装项目 #
某些依赖项只能从源代码包安装。构建可能需要更新的版本或 Ubuntu 软件包中不可用的工具或库。
您可以轻松地将构建步骤包含在您的 .travis.yml 文件中,或者(推荐的方法)通过运行脚本来处理安装过程。
以下是一个从二进制包安装 CasperJS 的简单示例:
before_script:
- wget https://github.com/n1k0/casperjs/archive/1.0.2.tar.gz -O /tmp/casper.tar.gz
- tar -xvf /tmp/casper.tar.gz
- export PATH=$PATH:$PWD/casperjs-1.0.2/bin/
请注意,当您更新
$PATH
环境变量时,该部分不能移动到 shell 脚本中,因为它只会更新运行脚本的子进程的变量。
要从源代码安装某些内容,您可以按照类似的步骤操作。以下是如何下载、编译和安装 protobuf 库的示例。
install:
- wget https://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz
- tar -xzvf protobuf-2.4.1.tar.gz
- pushd protobuf-2.4.1 && ./configure --prefix=/usr && make && sudo make install && popd
这三个命令可以提取到一个 shell 脚本中,我们将其命名为 install-protobuf.sh
。
#!/bin/sh
set -ex
wget https://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz
tar -xzvf protobuf-2.4.1.tar.gz
cd protobuf-2.4.1 && ./configure --prefix=/usr && make && sudo make install
将其添加到存储库后,您可以从 .travis.yml 文件中运行它。
before_install:
- ./install-protobuf.sh
请注意,第一个版本使用 pushd
和 popd
来确保在 install
部分完成后,工作目录将返回到其原始值。在 shell 脚本中,这没有必要,因为它在子 shell 中运行,因此不会更改原始工作目录。