Travis:有没有办法使用 env vars 在基于容器的基础设施上以编程方式安装包版本?

Lin*_*per 5 travis-ci

.travis.yml我的一个项目中,我根据我也在.travis.yml文件中设置的环境变量来确定要安装哪些包。它看起来像这样:

env:
 - CABALVER=1.18 GHCVER=7.8.1
 - CABALVER=1.18 GHCVER=7.8.2
 ...

before_install:
...
 - travis_retry sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER
...
Run Code Online (Sandbox Code Playgroud)

这是在遗留基础设施下。我想切换到基于容器的基础设施,这意味着用以下内容替换该before_install行:

addons:
  apt:
    packages:
    - cabal-install-$CABALVER
    - ghc-$GHCVER
Run Code Online (Sandbox Code Playgroud)

...除非这不起作用,因为直到 Travis 尝试安装请求的 apt 包之后,环境变量才会设置。因此,如果我尝试使用上述内容,我会收到关于我如何尝试安装名为cabal-install-and ghc-(带有结尾连字符,但减去版本后缀)的包的错误,这当然不存在。

有没有办法在基于容器的基础设施上完成我想要的?我可以尝试一次安装所有版本,然后使用 env vars 来确定在给定的工作中使用哪个版本,但是(即使我可以防止由于在一次)为每个构建作业安装所有这些真的很慢,这将否定切换到基于容器的基础设施的目的。