在我的一个项目的.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
...
传统基础设施下的情况。我想switch to the container-based infrastructure,这意味着用以下内容替换before_install
行:
addons:
apt:
packages:
- cabal-install-$CABALVER
- ghc-$GHCVER
...除了没有工作,因为在Travis尝试安装所请求的apt软件包之前,env vars不会被设置。因此,如果我尝试使用上述内容,我会收到一个错误,说明我是如何尝试安装名为cabal-install-
和ghc-
的包(带有结尾连字符,但减去版本后缀),这当然不存在。
有没有办法在基于容器的基础架构上实现我想要的东西?我可以尝试一次安装所有版本并稍后使用env vars来确定在给定作业上使用哪个版本,但是(即使我可以防止由于安装了多个GHC和Cabals而导致所有地狱崩溃曾经)为每个构建工作安装所有这些工作真的很慢,这将取消切换到基于容器的基础架构的目的。