2017-10-04 51 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

相關問題