我可以将matrix.include []中的选项与env选项相乘吗?
问题描述:
给定一个相当异质矩阵,看起来像这样:我可以将matrix.include []中的选项与env选项相乘吗?
matrix:
include:
- os: linux
compiler: gcc
env: PLATFORM=android ARCH=arm64-v8a
- os: linux
compiler: gcc
env: PLATFORM=linux ARCH=aarch64
- os: osx
compiler: clang
env: PLATFORM=darwin ARCH=x86_64 TEST=unit
- os: osx
compiler: clang
env: PLATFORM=ios ARCH=arm64
这将导致四个版本。我想用一个额外的环境变量TYPE=Debug/Release
将它乘以两。达到这种效果的最好方法是什么?考虑一下,我只显示了四种配置,但配置的实际数量是15.我希望我不必两次复制所有内容。
我试过以下,但它只是增加了两个版本,它不与基体结合:
env:
matrix:
- TYPE=Debug
- TYE=Release
同样的,这样的:
env:
- TYPE=Debug
- TYE=Release
答
恐怕你不能。
没有矩阵扩展,您可能期望在顶级没有发生在matrix.include
。
env
键仅形成构建矩阵的一个轴,并且不可能使用不同的env
值来构建构建矩阵。
达到你需要的是增加四个更多的就业机会什么的唯一方式:
matrix:
include:
- os: linux
compiler: gcc
env: PLATFORM=android ARCH=arm64-v8a TYPE=Debug
- os: linux
compiler: gcc
env: PLATFORM=linux ARCH=aarch64 TYPE=Debug
- os: osx
compiler: clang
env: PLATFORM=darwin ARCH=x86_64 TEST=unit TYPE=Debug
- os: osx
compiler: clang
env: PLATFORM=ios ARCH=arm64 TYPE=Debug
- os: linux
compiler: gcc
env: PLATFORM=android ARCH=arm64-v8a TYPE=Release
- os: linux
compiler: gcc
env: PLATFORM=linux ARCH=aarch64 TYPE=Release
- os: osx
compiler: clang
env: PLATFORM=darwin ARCH=x86_64 TEST=unit TYPE=Release
- os: osx
compiler: clang
env: PLATFORM=ios ARCH=arm64 TYPE=Release
(顺便说一句,你在哪里得到的15号?)
答
我通常使用一个小python脚本有(jinja)模板包含来生成我的travis配置。
#!/usr/bin/env python3
tpl = '''
script:
- some_stuff.bash
matrix:
include:
{%- for letter, number in vars %}
- env: TESTS={{number}} CONFIG={{letter}}
{%- endfor %}
'''
import os
import jinja2
from itertools import product
tpl = jinja2.Template(tpl)
ymlfn = os.path.join(os.path.dirname(__file__), '.travis.yml')
with open(ymlfn, 'wt') as yml:
yml.write(tpl.render(vars=product(['a', 'b'], range(5))))
我的意思是,在我的'.travis.yml'文件中,字面上是15点的配置和,我想,以避免它们只是'调试/发布的缘故翻番'尺寸。我只展示了4个,证明每一个都足够独特,我认为我不能“排除”其中的任何东西,而且,AFAIK,我有点卡住拼写出来。因此,我希望我可以避免进一步拼写出来,最终得到30个配置。但似乎我没有选择。谢谢。 – screwnut
但是这里有一个相关的问题:我能不能做一些像'env:PLATFORM = ... ARCH = ... TYPES = Debug,Release'和''script:'循环'TYPES'中的值吗? – screwnut
对于特定的环境变量,您是否需要2个或15个值,问题不大。没有矩阵扩展,你必须全部写出来。 @renemilk所展示的工具可以缓解你的痛苦,但它仍然存在。 – banzaiman