爲Terraform部署Travis

若是不用Travis作自動打包,如下是你用戶的體驗:
  1. 使用官方自帶版本  ->  可能已是幾周前的版本
  2. 本身下載源碼編譯  ->  畢竟不是全部人都是Golang用戶, 部署go須要好久
  3. 最後都能變成         ->  再見Terraform

Travis不必定是最全能的,目前來看至少應該是跟github銜接最無縫的,
也就是說極可能你都感覺不到CI是在工做的html

1. 通用流程 -> 若是你的場景很簡單,這麼作夠了

# 回頭補,這個教程不少,今天先記錄一下踩過的坑linux

2. 我踩過的坑

2.1 我如何操做組織的項目

問題背景: 我想將組織下的項目關聯上 Travisgit


操做步驟:首先點擊左下角的Organizations, 接着右邊會出現這個組織對應的項目,可是有時候這裏顯示的不全,可能你的組織裏有5個項目,實際這裏只出現了三個。 這個問題出現的緣由是由於Travis沒有組織全部項目的權限。github


點擊右下角的Manage Repo on Github, 若是你在組織中是管理者的權限,你就會直接來到Github上的代碼倉庫權限管理,添加對應倉庫的權限保存windows


固然若是你不是組織的管理者,只是開發者的一員,你可能須要申請這樣的權限,點擊一下灰色的Request,就會發出申請,變成紅色的Cancel Request, 等待管理員審覈api


2.2 什麼是Travis官網啊? 

  • 能夠是 travis-ci.org 
  • 也能夠是 travis-ci.com 


問題的錯誤描述The following repositories cannot be migrated to travis-ci.com at this time because they are currently active on our legacy platform travis-ci.org.bash

這個問題的背景: 我這個項目是fork來的服務器

這個問題的原由: 我進了 travis-ci.com, 嘗試爲個人項目啓用travis,啓用時出現了這樣的報錯ide

問題翻譯一下就是說: 你如今不能在 travis-ci.com上,爲這個項目啓用travis服務,由於這個項目目前正在travis-ci.org上活躍着,你不能從org那邊遷移到com這邊

測試

問題處理方法: 忘記travis-ci.com 接着進入travis-ci.org,  這時候就發現這個項目能夠關聯上了。

這個問題的出現,我認爲是 jdclouddevelopers/terraform-provider-jdcloud 這個項目以前已經被關聯上了 travis-ci.org。 今天我登錄了官網,就覺得能夠順利開工。其實呢,項目關聯的是org官網,但我登錄的是com官網,兩邊實際上是不互通的,我在com這邊是操做不了org的東西的。


2.3 Travis Auto Release - Travis自動發佈

若是你到了這一步,說明你的Travis至少在工做了,你的每一次提交Travis都會按照你的 .travis.yml  來執行全部流程。 如今關心一下我想要打包怎麼作

問題背景: 我但願Travis不只能幫我編譯,還要編譯出 Windows/OSX/Linux 版本. 而後都發布了

script:

    - cd ../.. && mv jdclouddevelopers terraform-providers && cd terraform-providers/terraform-provider-jdcloud
    - make test
    - make vendor-status
    - make vet

    # 編譯 + 打包壓縮
    - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o terraform-provider-jdcloud
    - tar zcvf Linux-amd64.tar.gz terraform-provider-jdcloud
    - CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o terraform-provider-jdcloud
    - tar zcvf OSX-amd64.tar.gz terraform-provider-jdcloud
    - CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o terraform-provider-jdcloud.exe
    - zip Windows-amd64.zip terraform-provider-jdcloud.exe

deploy:  
    provider: releases  
    api_key: ${GITHUB_TOKEN}  
    file:
        # 選擇上傳文件 
        - Linux-amd64.tar.gz    
        - OSX-amd64.tar.gz    
        - Windows-amd64.zip  
    skip_cleanup: true  
    on:    
        tags: true複製代碼

script字段 deploy字段是什麼意思?

首先我在Script字段中規定了一下步驟: 

  • 先執行一些測試,至少證實這份代碼能編譯,也符合go代碼風格規範。
  • 重點-1: 每次Travis工做,都會按照順序編譯出Linux/OSX/Windows版本,而且都作了壓縮,這些打包好的文件都會在根目錄下,如今已經準備就緒了
  • 重點-2:  我在Deploy中描述到,請在 tags = true(我每次發佈新的tag) 的時候,幫我作一下 release(自動發佈), 我但願你能幫我上傳,我剛剛編譯出的三個文件


2.3.1 爲何我須要一個api_key?我怎麼得到?

發佈Release並非任何用戶都能發佈,必須得證實操做者的身份,因此你須要在這裏填上你的Personal Access Token, 你能夠在這裏點擊創造一個 Settings -> Developer settings -> PAT. 

你不用給它不少權限,按照下面的圖這樣填寫就行了,給Token操控項目的權限。按照生成以後必定要保留好這個Token, 網頁一關Token就找不到了


接下來你能夠在 travis.yml 中直接填上這個api_key,可是咱們顯然不推薦這麼作,你能夠像我上面這樣,在Travis中把api_key作爲環境變量,而後在yaml文件中直接引用就行了,作法以下:


點擊項目右側的Settings按鈕,進入之後劃到最下面,有一個"Environment Variables" ,左邊填寫 GITHUB_TOKEN, 右邊填寫Token值,點擊保存,就能夠了

2.3.2 我發了新tag,沒用啊?

背景描述: 一開始個人代碼中有這樣的片斷

branches:  
    only:  
        - master複製代碼

我參考了這個回答,若是你的yaml中也存在這樣的片斷,那麼頗有可能就算你發佈了新tag,仍舊會被忽視掉,彷佛是一個Travis中存在的bug,後續版本中我刪掉了這一行


2.3.3 爲何第一步是 cd ../.. 

背景描述: 這個項目自己是從 terraform-providers 組織 fork 到 jdclouddevelopers 組織下,全部代碼都會有引用,就像下面這樣:

import "github.com/terraform-providers/terraform-provider-jdcloud/jdcloud"複製代碼

若是你clone官方分支:  clone完成之後會創造出這樣一個路徑    

${GOPATH}/src/github.com/terraform-providers/terraform-provider-jdcloud/jdcloud複製代碼

可是若是你clone咱們的分支:  你就會獲得這樣一個路徑

${GOPATH}/src/github.com/jdclouddevelopers/terraform-provider-jdcloud/jdcloud複製代碼

問題出現了,若是你只有一條 jdclouddevelopers的路徑,那麼在引用的時候就會找不到所須要的包,因此我第一步回到上層,修改文件夾名  jdclouddevelopers ->  terraform-providers


2.3.4 測試環節

由於你在剛剛的描述中說到,"請在我發佈新tag的時候,幫我作release" , ok , 那咱們來作tag

# 生成標籤,標籤對應的是當前最新的commit
git tag v0.0.1-travis

# 推送標籤,服務器接收到這個新標籤產生的信號,Travis開始工做
git push origin v0.0.1-travis
複製代碼


進入Release頁面 ,就能看到咱們剛剛想要生成的Linux/OSX/Windows文件,如今用戶終於能夠下下來就用了,並且也不用咱們手動上傳了!

相關文章
相關標籤/搜索