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

Posted

技术标签:

【中文标题】Travis CI + Go:为不同的操作系统创建特定的构建流程【英文标题】:Travis CI + Go: creating a specific build flow for different OS 【发布时间】:2015-10-13 19:48:57 【问题描述】:

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

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

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

    原生 linux/os 构建(带有“os”部分)。 使用 Gimmme 进行 Windows 编译

第一个选项的 .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】:

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

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

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`

【讨论】:

谢谢,太好了!

以上是关于Travis CI + Go:为不同的操作系统创建特定的构建流程的主要内容,如果未能解决你的问题,请参考以下文章

为GitHub项目加入Travis-CI的自动集成

travis.ci 上的 Android 构建变体

在对travis-ci的测试期间,它会挂起

使用 Travis-ci 在 pypi 上部署包失败,没有任何错误消息

Travis.ci:“作曲家要求无法解决”,但一切都在当地有效(Yii2)

前端工程化——travis-ci