使用 YAML 作为构建配置语言

Travis CI 使用 YAML 作为构建配置的主要语言,存储在主 .travis.yml 构建配置文件中,以及使用 构建配置导入 功能导入的其他配置源。

此页面记录了有关 Travis CI 如何使用 YAML 的一些值得注意的信息。

YAML 锚点和别名的用法 #

在更高级的用例中,为了减少大型构建配置文件中的重复,一个好的做法是使用 YAML 的机制来定义和重用共享配置部分作为 YAML 锚点和别名。

例如,不要重复像这样针对两个不同部署目标的部署配置

deploy:
- provider: heroku
  api_key: ...
  app: app-production
  on:
    branch: master
- provider: heroku
  api_key: ...
  app: app-staging
  on:
    branch: staging

可以重用像这样的一段 YAML

deploy:
- &deploy
  provider: heroku
  api_key: ...
  app: app-production
  on:
    branch: master
- <<: *deploy
  app: app-staging
  on:
    branch: staging

私钥作为 YAML 锚点和别名以及外部工具 #

在某些情况下,最好在不同的位置定义共享的 YAML 配置部分,而不是在使用它的位置定义,例如为了提高可读性。

例如,可以通过重用共享的 YAML 部分来定义多个作业,如下所示

_shared_job: &shared_job
  script: echo "shared script config"
  # ...
jobs:
  include:
  - name: Job 1
    <<: *shared_job
  - name: Job 2
    <<: *shared_job

根据 Travis CI 的 构建配置架构,额外的键 _shared_job 是一个未知键。在其他情况下,一些用于 Travis CI 的外部工具依赖于在 Travis CI 的构建配置文件中存储配置,也添加了未知键。

建议使用下划线作为前缀,将其标记为私有配置键,避免与将来添加到构建配置架构中的键发生可能的命名冲突。

版本号 #

Travis CI 曾经使用了一个简单的 Ruby YAML 解析器来解析作为 YAML 给出的构建配置,很长时间。这导致以 YAML 数字形式给出的版本号有时会以意外的方式被截断。反过来,我们的文档以及许多外部文章和帖子建议引用版本号,以便 YAML 解析器将其解释为字符串。

这不再适用,如果功能 构建配置验证 对于给定的存储库处于活动状态。

例如,指定 Node.js 版本为 node_js: 9.10 将被解析为 9.0,与预期版本不匹配。作为解决方案,我们建议改为指定 node_js: "9.10"

随着作为 构建配置验证 功能的一部分引入新的 YAML 解析器,不再需要此操作,因为此解析器将 YAML 数字转换为 Ruby 字符串,只有在我们的 构建配置架构 需要时才会在稍后进行类型转换。