2017-10-04 44 views
0

给定一个相当异质矩阵,看起来像这样:我可以将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 

回答

1

恐怕你不能。

没有矩阵扩展,您可能期望在顶级没有发生在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号?)

+0

我的意思是,在我的'.travis.yml'文件中,字面上是15点的配置和,我想,以避免它们只是'调试/发布的缘故翻番'尺寸。我只展示了4个,证明每一个都足够独特,我认为我不能“排除”其中的任何东西,而且,AFAIK,我有点卡住拼写出来。因此,我希望我可以避免进一步拼写出来,最终得到30个配置。但似乎我没有选择。谢谢。 – screwnut

+0

但是这里有一个相关的问题:我能不能做一些像'env:PLATFORM = ... ARCH = ... TYPES = Debug,Release'和''script:'循环'TYPES'中的值吗? – screwnut

+0

对于特定的环境变量,您是否需要2个或15个值,问题不大。没有矩阵扩展,你必须全部写出来。 @renemilk所展示的工具可以缓解你的痛苦,但它仍然存在。 – banzaiman

0

我通常使用一个小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)))) 

extend example

相关问题