Travis:定义OS特定的环境变量

Shi*_*shi 9 linux travis-ci

我在我的项目和Travis-CI中使用Go lang来构建它.

我想在每个操作系统(OSX,Linux,Windows)上构建它,所以我想使用GIMME_OSGIMME_ARCH环境变量(来自GIMME项目),但问题是Darwin不足以支持我的项目所以我必须在mac上本地构建我的项目.

我的方法是将OSX操作系统构建为VM(travis直接从.travis.yml文件支持),并使用交叉编译(GIMME)linux64,linux386和windows构建Linux.

现在,每次我定义一个环境变量时,它都会为我的构建矩阵创建一个新列.我想要的环境变量只能在linux构建部分中使用.

现在我的.travis.yml看起来像这样:

language: go

go:
    - 1.4.2

os:
    - osx
    - linux

env:
    - GIMME_OS=windows GIMME_ARCH=amd64
    - GIMME_OS=linux GIMME_ARCH=amd64
    - GIMME_OS=linux GIMME_ARCH=386
    - GIMME_OS=darwin GIMME_ARCH=386

  matrix:
     exclude:
          os: osx
          env: GIMME_OS=darwin GIMME_ARCH=386

before_script:
    - go get -d -v ./...

script:
    - go build -v ./...
    - go test -v ./...
Run Code Online (Sandbox Code Playgroud)

这确实创建了8个构建(每个OS的每个环境变量行)是否有一种方法可以定义仅与.travis.yml文件中的某些部分相关的环境变量(特别是OS部分)

ren*_*tze -1

$TRAVIS_OS_NAME您可以使用osx 或 linux,而不是自己定义操作系统名称。然后, 您的“env”部分将简化为只有两行拱门。

一般来说,无法从 yml 定义操作系统相关变量。解决这个问题的一个好方法是.travis.${TRAVIS_OS_NAME}.env在您的存储库中包含文件,并在第一个构建步骤需要它之前获取这些文件。