环境变量

自定义构建过程的一种常见方法是定义环境变量,这些变量可以从构建过程中的任何阶段访问。

定义环境变量的最佳方法取决于它将包含的信息类型以及您需要更改它的时间

在 .travis.yml 中定义公共变量 #

.travis.yml 中定义的公共变量与特定提交相关联。更改它们需要新的提交,重新启动旧的构建将使用旧的值。它们也自动在仓库的分支中可用。

.travis.yml 中定义变量,这些变量

  • 构建运行所需的变量,并且不包含敏感数据。例如,针对 Ruby 应用程序的测试套件可能需要将 $RACK_ENV 设置为 test
  • 每个分支不同。
  • 每个作业不同。

.travis.yml 文件的 env 键中定义环境变量,对特殊字符(如星号 (*))进行引用。每个 env 数组中的行都会触发一次构建。

env:
  - DB=postgres
  - SH=bash
  - PACKAGE_VERSION="1.0.*"

如果您在 .travis.yml 和仓库设置中定义了相同名称的变量,则 .travis.yml 中的变量优先。如果您在 .travis.yml 中将变量定义为加密和未加密,则文件中最后定义的变量优先。

变量的值将逐字传递给生成的构建脚本。因此请确保相应地转义所有 Bash 特殊字符。特别是,如果某个值包含空格,则需要在该值周围加上引号。例如,a long phrase 应写为 "a long phrase"

每个项目定义多个变量 #

如果您需要为每个构建指定多个环境变量,请将它们全部放在 env 数组中同一行

rvm:
  - 1.9.3
  - rbx-3
env:
  - FOO=foo BAR=bar
  - FOO=bar BAR=foo

此配置会触发 **4 个单独的构建**

  1. Ruby 1.9.3 具有 FOO=fooBAR=bar
  2. Ruby 1.9.3 具有 FOO=barBAR=foo
  3. Rubinius 最新版本 (rbx-3) 具有 FOO=fooBAR=bar
  4. Rubinius 最新版本 (rbx-3) 具有 FOO=barBAR=foo

全局变量 #

有时您可能希望使用对矩阵全局的环境变量,即它们被插入到每个矩阵行中。这可能包括密钥、令牌、URI 或其他数据,这些数据对于每个构建都是必需的。在这种情况下,您可以使用 globaljobs 键来区分这两种情况,而不是手动将这些键添加到矩阵中的每个 env 行中。例如

env:
  global:
    - CAMPFIRE_TOKEN=abc123
    - TIMEOUT=1000
  jobs:
    - USE_NETWORK=true
    - USE_NETWORK=false

触发具有以下 env 行的构建

USE_NETWORK=true CAMPFIRE_TOKEN=abc123 TIMEOUT=1000
USE_NETWORK=false CAMPFIRE_TOKEN=abc123 TIMEOUT=1000

在 .travis.yml 中定义加密变量 #

在将敏感数据(如 API 凭据)添加到您的 .travis.yml 之前,您需要对其进行加密。加密变量不可用于不可信的构建,例如来自另一个仓库的拉取请求。

包含加密变量的 .travis.yml 文件如下所示

env:
  global:
    - secure: mcUCykGm4bUZ3CaW6AxrIMFzuAYjA98VIz6YmYTmM0/8sp/B/54JtQS/j0ehCD6B5BwyW6diVcaQA2c7bovI23GyeTT+TgfkuKRkzDcoY51ZsMDdsflJ94zV7TEIS31eCeq42IBYdHZeVZp/L7EXOzFjVmvYhboJiwnsPybpCfpIH369fjYKuVmutccD890nP8Bzg8iegssVldgsqDagkuLy0wObAVH0FKnqiIPtFoMf3mDeVmK2AkF1Xri1edsPl4wDIu1Ko3RCRgfr6NxzuNSh6f4Z6zmJLB4ONkpb3fAa9Lt+VjJjdSjCBT1OGhJdP7NlO5vSnS5TCYvgFqNSXqqJx9BNzZ9/esszP7DJBe1yq1aNwAvJ7DlSzh5rvLyXR4VWHXRIR3hOWDTRwCsJQJctCLpbDAFJupuZDcvqvPNj8dY5MSCu6NroXMMFmxJHIt3Hdzr+hV9RNJkQRR4K5bR+ewbJ/6h9rjX6Ot6kIsjJkmEwx1jllxi4+gSRtNQ/O4NCi3fvHmpG2pCr7Jz0+eNL2d9wm4ZxX1s18ZSAZ5XcVJdx8zL4vjSnwAQoFXzmx0LcpK6knEgw/hsTFovSpe5p3oLcERfSd7GmPm84Qr8U4YFKXpeQlb9k5BK9MaQVqI4LyaM2h4Xx+wc0QlEQlUOfwD4B2XrAYXFIq1PAEic=
  jobs:
    - USE_NETWORK=true
    - USE_NETWORK=false
    - secure: <you can also put encrypted vars inside matrix>

加密环境变量不可用于来自分支的拉取请求,因为将此类信息公开给未知代码存在安全风险。

如果您在 .travis.yml 和仓库设置中定义了相同名称的变量,则 .travis.yml 中的变量优先。如果您在 .travis.yml 中将变量定义为加密和未加密,则文件中最后定义的变量优先。

加密环境变量 #

使用与您的仓库关联的公钥使用 travis gem 加密环境变量

  1. 如果您尚未安装 travis gem,请运行 gem install travis(或在 macOS 上运行 brew install travis)。

  2. 在您的仓库目录中

    • 如果您使用的是 https://travis-ci.cn,请参阅 加密密钥 - 用法
    • 如果您使用的是 https://travis-ci.org,请运行

        travis encrypt MY_SECRET_ENV=super_secret --add env.global
      
  3. 将更改提交到您的 .travis.yml

加密和解密密钥与仓库相关联。如果您分叉了项目并将其添加到 Travis CI,它 *将* 无法访问加密变量。

加密方案在 加密密钥 中有更详细的解释。

在仓库设置中定义变量 #

在仓库设置中定义的变量对于所有构建都是相同的,当您重新启动旧的构建时,它将使用最新的值。这些变量不会自动在分支中可用。

在仓库设置中定义变量,这些变量

  • 每个仓库不同。
  • 包含敏感数据,例如第三方凭据。

要在仓库设置中定义变量,请确保您已登录,导航到相应的仓库,从“更多选项”菜单中选择“设置”,然后单击“环境变量”部分中的“添加新变量”。通过选择该变量应可用的分支来将其限制为特定分支。

Screenshot of environment variables in settings
仓库设置中的环境变量

请参阅 上面的注释,了解如何正确格式化变量的值。

默认情况下,这些新环境变量的值在日志中的 export 行中隐藏。这对应于在您的 .travis.yml加密变量 的行为。这些变量在我们的系统中以加密方式存储,并在生成构建脚本时解密。

同样,我们不会将这些值提供给不可信的构建,这些构建由来自另一个仓库的拉取请求触发。

作为 Web 界面的一种替代方法,您也可以使用 CLI 的 env 命令。

如果您在 .travis.yml 和仓库设置中定义了相同名称的变量,则 .travis.yml 中的变量优先。

构建配置参考 #

您可以在我们的 Travis CI 构建配置参考 中找到有关 环境变量 的构建配置格式的更多信息。

默认环境变量 #

以下默认环境变量可用于所有构建。

  • CI=true
  • TZ=UTC
  • TRAVIS=true
  • CONTINUOUS_INTEGRATION=true
  • DEBIAN_FRONTEND=noninteractive
  • HAS_JOSH_K_SEAL_OF_APPROVAL=true
  • USER=travis
  • HOME 在 Linux 上设置为 /home/travis,在 MacOS 上设置为 /Users/travis,在 Windows 上设置为 /c/Users/travis
  • LANG=en_US.UTF-8
  • LC_ALL=en_US.UTF-8
  • RAILS_ENV=test
  • RACK_ENV=test
  • MERB_ENV=test
  • JRUBY_OPTS="--server -Dcext.enabled=false -Xcompile.invokedynamic=false"
  • JAVA_HOME 设置为适当的值。

此外,Travis CI 还设置了您可以在构建中使用的环境变量,例如,用于标记构建或运行构建后部署。

  • TRAVIS_ALLOW_FAILURE:
    • 如果允许作业失败,则设置为 true
    • 如果不允许作业失败,则设置为 false
  • TRAVIS_APP_HOST: 编译构建脚本的服务器名称。此服务器从 /files 提供某些帮助文件(例如 gimmenvmsbt),以避免外部网络调用;例如,curl -O $TRAVIS_APP_HOST/files/gimme
  • TRAVIS_BRANCH:
    • 对于推送到分支的构建,或未由拉取请求触发的构建,此为分支名称。
    • 对于由拉取请求触发的构建,此为拉取请求的目标分支名称。
    • 对于由标签触发的构建,此与标签名称相同 (TRAVIS_TAG)。

      请注意,对于标签,git 不会存储从其中标记提交的分支。

  • TRAVIS_BUILD_DIR: 正在构建的存储库已复制到工作节点的目录的绝对路径。
  • TRAVIS_BUILD_ID: Travis CI 内部使用的当前构建的 ID。
  • TRAVIS_BUILD_NUMBER: 当前构建的编号(例如,“4”)。
  • TRAVIS_BUILD_WEB_URL: 构建日志的 URL。
  • TRAVIS_COMMIT: 当前构建正在测试的提交。
  • TRAVIS_COMMIT_MESSAGE: 提交主题和正文,未拆分。如果提供了它,将包含 *自定义提交消息*。
  • TRAVIS_COMMIT_RANGE: 推送或拉取请求中包含的提交范围。(请注意,对于由新分支的初始提交触发的构建,此为空)。
  • TRAVIS_COMPILER: 指示当前作业使用的编译器(例如,clanggcc)。
  • TRAVIS_DEBUG_MODE: 如果作业在 调试模式 下运行,则设置为 true
  • TRAVIS_DIST: 指示当前作业运行的发布版。
  • TRAVIS_EVENT_TYPE: 指示构建是如何触发的。其中之一:pushpull_requestapicron
  • TRAVIS_JOB_ID: Travis CI 内部使用的当前作业的 ID。
  • TRAVIS_JOB_NAME: 如果指定了 作业名称,则为作业名称,否则为 ""
  • TRAVIS_JOB_NUMBER: 当前作业的编号(例如,“4.1”)。
  • TRAVIS_JOB_WEB_URL: 作业日志的 URL。
  • TRAVIS_OS_NAME: 在多操作系统构建中,此值指示作业运行的平台。当前值为 linuxosxwindows(测试版),将来将扩展。
  • TRAVIS_CPU_ARCH: 在 多架构 构建中,此值指示作业运行的 CPU 架构。当前值为 amd64arm64ppc64les390x
  • TRAVIS_OSX_IMAGE: 在 .travis.yml 中配置的 osx_image 值。如果在 .travis.yml 中未设置此值,则为空。
  • TRAVIS_PULL_REQUEST: 如果当前作业是拉取请求,则为拉取请求编号;如果不是拉取请求,则为“false”。
  • TRAVIS_PULL_REQUEST_BRANCH:
    • 如果当前作业是拉取请求,则为 PR 来源分支的名称。
    • 如果当前作业是推送到分支的构建,则此变量为空 ("")。
  • TRAVIS_PULL_REQUEST_SHA:
    • 如果当前作业是拉取请求,则为 PR 的 HEAD 提交的提交 SHA。
    • 如果当前作业是推送到分支的构建,则此变量为空 ("")。
  • TRAVIS_PULL_REQUEST_SLUG:
    • 如果当前作业是拉取请求,则为 PR 来源存储库的 slug(格式为 owner_name/repo_name)。
    • 如果当前作业是推送到分支的构建,则此变量为空 ("")。
  • TRAVIS_PULL_REQUEST_IS_DRAFT:
    • 如果当前作业是拉取请求且关联的 PR 处于草稿状态,则设置为 true
    • 如果当前作业是拉取请求且关联的 PR 不处于草稿状态,则设置为 false
    • 如果当前作业是推送到分支的构建,则此变量为空 ("")。
  • TRAVIS_REPO_SLUG: 当前正在构建的存储库的 slug(格式:owner_name/repo_name)。
  • TRAVIS_SECURE_ENV_VARS:
    • 如果存在任何加密的环境变量,则设置为 true
    • 如果不存在任何加密的环境变量,则设置为 false
  • TRAVIS_SUDO: 基于 sudo 是否启用,设置为 truefalse
  • TRAVIS_TEST_RESULT: 如果 script 部分中的所有命令(直到引用此环境变量的点)都以 0 退出,则为 0;否则为 1
  • TRAVIS_TAG: 如果当前构建是针对 git 标签的,则此变量设置为标签的名称,否则为空 ("")。
  • TRAVIS_BUILD_STAGE_NAME: 构建阶段。如果构建不使用构建阶段,则此变量为空 ("")。
  • TRAVIS_JOB_RESTARTED:
    • 如果构建已重新启动,则设置为 true
    • 如果构建未重新启动,则设置为 false
  • TRAVIS_JOB_RESTARTED_BY: 触发重新启动的用户登录名。

特定语言的构建会公开其他环境变量,这些环境变量代表用于运行构建的当前版本。它们是否被设置取决于您使用的语言。

  • TRAVIS_DART_VERSION
  • TRAVIS_GO_VERSION
  • TRAVIS_HAXE_VERSION
  • TRAVIS_JDK_VERSION
  • TRAVIS_JULIA_VERSION
  • TRAVIS_NODE_VERSION
  • TRAVIS_OTP_RELEASE
  • TRAVIS_PERL_VERSION
  • TRAVIS_PHP_VERSION
  • TRAVIS_PYTHON_VERSION
  • TRAVIS_R_VERSION
  • TRAVIS_RUBY_VERSION
  • TRAVIS_RUST_VERSION
  • TRAVIS_SCALA_VERSION

在安装或启动软件或服务时,将设置其他特定软件的环境变量,它们包含版本号

  • TRAVIS_MARIADB_VERSION

以下环境变量可用于 Objective-C 构建。

  • TRAVIS_XCODE_SDK
  • TRAVIS_XCODE_SCHEME
  • TRAVIS_XCODE_PROJECT
  • TRAVIS_XCODE_WORKSPACE