Travis CI + Go:为不同 OS 创建特定的构建流程

Travis CI + Go: creating a specific build flow for different OS

我有一个 Go 项目,我想用 Travis-CI 构建并将其部署到特定的提供商。 我熟悉 Gimme project 将使用交叉编译来执行此操作。 但是因为 Travis 已经支持 linux 和 osx 我只需要这个功能来构建 Windows。

当然,最大的动机是避免交叉编译 运行 时间错误,因为时间错误很多。

我的问题是如何在同一个 .travis.yml 文件中创建不同的构建流程:

  1. 原生 linux/os 构建(包含 "os" 部分)。
  2. Windows 使用 Gimmme
  3. 编译

第一个选项的 .travis.yml 文件类似于:

language: go

go: 
  - 1.5.1

branches: 
  only: 
    - master

os:
    - osx
    - linux


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

script:
    - go build -v ./...
    # - go test -v ./...

before_deploy: 
  -  chmod +x ./before_deploy.sh
  - ./before_deploy.sh

第二个选项的 .travis.yml 文件类似于:

language: go

go: 
  - 1.5.1

branches: 
  only: 
    - master

env:
    - GIMME_OS=windows GIMME_ARCH=amd64


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

script:
    - go build -v ./...
    # - go test -v ./...

before_deploy: 
  -  chmod +x ./before_deploy.sh
  - ./before_deploy.sh

是否有一种干净利落的方式将这两者结合起来(使用环境变量或任何其他疯狂的想法)?

它可能很简单,但矩阵环境无法针对特定的 OS ...

然后 select 使用本地环境变量:

language: go
go: 
  - 1.5.1
branches: 
  only: 
    - master
os:
  - osx
  - linux
install:
  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then
        export GIMME_OS=windows;
        export GIMME_ARCH=amd64;
    fi
before_script:
  - go get -d -v ./...
script:
  - go build -v ./...
after_script:
  - go test -v ./...
before_deploy: 
  - ./before_deploy.sh

另一种方式:

language: go
go: 
  - 1.5.1
branches: 
  only: 
    - master
matrix:
  include:
    - os: linux
      env: GIMME_OS=windows; GIMME_ARCH=amd64;
    - os: osx
before_script:
  - go get -d -v ./...
script:
  - go build -v ./...
after_script:
  - go test -v ./...
before_deploy: 
  - ./before_deploy.sh

注意: 命令:- chmod +x ./before_deploy.sh 可以直接在您的存储库中完成并提交...

注意:环境变量可以访问:http://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables或调用\printenv`