我有一个需要为多个平台构建的程序。现在我正在做类似的事情:
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的方法---文档对于精确的语法非常不清楚。这是可能的,如果是的话,怎么样?
答案 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能够在某个时候提供官方解决方案。