2017-05-06 51 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