我可以将matrix.include []中的选项与env选项相乘吗?

时间:2017-10-04 22:58:36

标签: travis-ci

给出一个看起来像这样的异质矩阵:

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

2 个答案:

答案 0 :(得分:2)

恐怕你不能。

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号?)

答案 1 :(得分:0)

我通常使用包含(jinja)模板的小python脚本来生成我的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