安装依赖项

在标准基础设施上安装软件包 #

要安装标准 precisetrustyxenialbionic 发行版中未包含的 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 源,您可以使用以下三种类型的条目之一

  1. 源安全列表 中定义的别名
  2. sourceline 键值对将添加到 /etc/apt/sources.list
  3. 当 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 规范数组,每个规范都采用两种可能的格式之一

  1. snap 的名称,它将传递给 snap install 而不带其他标志。例如:

       dist: xenial
       addons:
         snaps:
           - hugo
    

    这将导致

       $ sudo snap install hugo
    
  2. 指定 snap 如何安装的映射。可能的键为:nameconfinementchannelconfinement 键将用于添加 --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
    

    confinementchannel 是可选的。

在 macOS 上安装软件包 #

要安装 默认 macOS 环境 中未包含的软件包,请使用 Homebrew

为了方便起见,您可以在 .travis.yml 中使用 Homebrew 插件。例如,要安装 beanstalk

addons:
  homebrew:
    packages:
    - beanstalk

默认情况下,Homebrew 插件在安装软件包之前不会运行 brew updatebrew 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

请注意,第一个版本使用 pushdpopd 来确保在 install 部分完成后,工作目录将返回到其原始值。在 shell 脚本中,这没有必要,因为它在子 shell 中运行,因此不会更改原始工作目录。