在构建矩阵中的before_install

时间:2015-10-28 22:46:54

标签: travis-ci

我有一个需要为多个平台构建的程序。现在我正在做类似的事情:

matrix:
  include:
    env: PLATFORM=foo
    env: PLATFORM=bar
    env: PLATFORM=baz
before_install:
  - install foo toolchain
  - install bar toolchain
  - install baz toolchain
script:
  - make PLATFORM=$PLATFORM

我宁愿不安装所有三个工具链,因为我只会使用一个;当上游可怕的工具链分发站点出现故障时,它会浪费资源并打破所有构建。

但是,我无法找到在构建矩阵中获得before_install的方法---文档对于精确的语法非常不清楚。这是可能的,如果是的话,怎么样?

1 个答案:

答案 0 :(得分:2)

在此特定示例中,您可以简单地利用您已创建的环境变量来动态扩展安装命令。

matrix:
  include:
    env: PLATFORM=foo
    env: PLATFORM=bar
    env: PLATFORM=baz
before_install:
  - install $PLATFORM toolchain
script:
  - make PLATFORM=$PLATFORM

对于可能会发现此问题的其他人搜索更复杂的情况,例如supporting ancient platforms inconsistent with modern travis environments,我使用专用脚本管理矩阵差异安装。

.
├── src
│   └── Foo.php
├── tests
│   ├── FooTest.php
│   └── travis
│       ├── install.bash
│       ├── install.legacy.bash
│       ├── script.bash
│       └── script.legacy.bash
└── .travis.yml

然后获取环境的相应脚本。

language: php
matrix:
  include:
  - php: "nightly"
    env: LEGACY=false
  - php: "7.0"
    env: LEGACY=false
  - php: "5.3.3"
    env: LEGACY=true
install:
  - if $LEGACY; then source ./tests/travis/install.legacy.bash;
    else source ./tests/travis/install.bash; fi
script:
  - if $LEGACY; then source ./tests/travis/script.legacy.bash;
    else source ./tests/travis/script.bash; fi

非常难看,所以我希望travis能够在某个时候提供官方解决方案。