Travis CI + Go:为不同的操作系统创建特定的构建流程

时间:2015-10-13 19:48:58

标签: go operating-system cross-compiling travis-ci

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

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

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

  1. 原生linux / os构建(带“os”部分)。
  2. 使用Gimmme进行Windows编译
  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
    

    有没有一个很好的清洁方式来组合这两个(与环境变量或任何其他疯狂的想法)?

1 个答案:

答案 0 :(得分:2)

这可能很简单,但是对于特定的操作系统无法进行矩阵环境...

然后只需选择本地环境变量:

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

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

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