2017-05-06 106 views
1

我已经安装下列方式如何使用来自多个构建矩阵的TravisCI创建github发布?

language: go 

go: 
    - 1.8.x 
    - master 

gobuild_args: -ldflags "-X main.Version=${TRAVIS_TAG} -X main.buildTime=`date -u '+%Y-%m-%d_%I:%M:%S%p'` -X main.commitId=${TRAVIS_COMMIT}" 

env: 
    - GOOS=linux GOARCH=amd64 
    - GOOS=windows GOARCH=amd64 

after_success: 
    - ./build.sh 

matrix: 
    allow_failures: 
    - go: master 

这将从根本上创建4个不同的构建中TravisCI简单的Go代码库和配置TravisCI。这对于构建一个交叉编译项目非常有用,我可以分别构建windows和linux二进制文件。

我一直在努力做的事情是在Github中从这些构建中生成的所有二进制文件中创建一个单一版本?

TravisCI文档说,他们支持发布,但它如何处理这种情况非常模糊。

  • 是不是所有的构建都在不同的虚拟服务器上运行?如果是这样,我如何指定每个文件
  • 如果我设置一个版本,它会运行每个版本? github如何工作,它会失败,因为发布会被尝试创建多次?

有没有人试过这个?

+0

对于Go中的跨平台编译,请查看[gox](https://github.com/mitchellh/gox)。这使得建设所有可能的平台变得轻而易举! –

+1

谢谢,但我特意避免gox,因为我想尽可能保持标准工具。另外我没有问题建立,是发布的问题 – ByteFlinger

+0

是感兴趣的https://github.com/travis-ci/travis-ci/issues/929?也许你可以使用脚本部署并做一些bash技巧来跳过或上传https://docs.travis-ci.com/user/deployment/script/。 –

回答

0

由于您使用的是Golang,请看ghr

我和CircleCI使用它 - 这是简单的:

ghr -t $GITHUB_TOKEN -u $CIRCLE_PROJECT_USERNAME -r $CIRCLE_PROJECT_REPONAME v1.0.$CIRCLE_BUILD_NUM $CIRCLE_ARTIFACTS/ || true

哪里..​​.

$GITHUB_TOKEN是用于发布文件github token。我相信你需要回购阅读权限和用户权限。

$CIRCLE_PROJECT_USERNAME是GitHub的用户

$CIRCLE_PROJECT_REPONAME是在Github上

$CIRCLE_BUILD_NUM你的资料库名称由CircleCI给出的版本号(我喜欢用它作为点释放匹配与构建版本发布版本)

$CIRCLE_ARTIFACTS是CircleCI

生成工件路径

|| true末使确定即使创建发布和上传文件失败,我也不会让整个构建失败。

+0

谢谢,但我认为同样的问题会在那里。不同的二进制文件基于TravisCI的不同版本运行,这意味着它们可以在不同的实例中使用,因此ghr在这种情况下不会解决问题。 – ByteFlinger

+0

因为您使用的是go - 您应该能够在Linux下构建任意平台......或Windows(或MacOS或任何其他受支持的Go平台)。请仔细阅读最后一句。作为一个例子,请参阅我的CircleCI的输出:https://github.com/cagedtornado/centralconfig/releases。所有这些二进制文件都是在Linux上构建的,作为单个构建过程的一部分。 –

+0

谢谢丹但我认为有一个问题。我在构建跨平台的二进制文件方面没有任何问题。我现在已经在这两个地方都建立在Linux上。我的问题是,这是从TravisCI中的不同实例完成的,因为我正在使用它们的构建矩阵功能,我想知道如何将它们聚合在github中创建单个版本。他们拥有github发布功能,但每个实例都会运行,因此每个二进制文件一次,而不是所有二进制文件一次 – ByteFlinger