在构建矩阵中的before_install

Dav*_*ven 11 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
Run Code Online (Sandbox Code Playgroud)

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

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

Jef*_*ett 2

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

\n\n
matrix:\n  include:\n    env: PLATFORM=foo\n    env: PLATFORM=bar\n    env: PLATFORM=baz\nbefore_install:\n  - install $PLATFORM toolchain\nscript:\n  - make PLATFORM=$PLATFORM\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于其他可能发现这个问题寻找更复杂场景的人,例如支持与现代 travis 环境不一致的古老平台,我使用专用脚本管理矩阵差异安装。

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Foo.php\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tests\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 FooTest.php\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 travis\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 install.bash\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 install.legacy.bash\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 script.bash\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 script.legacy.bash\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .travis.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Foo.php\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tests\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 FooTest.php\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 travis\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 install.bash\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 install.legacy.bash\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 script.bash\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 script.legacy.bash\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .travis.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n

相当丑陋,所以我希望 travis 能提供一个官方的解决方案。

\n