2019/08/19

如何在 AppVeyor 建置 golang 的 repository

最近因為工作關係開始學習 golang
同時也要練習寫 golang 的 unit test
所以想起了之前寫過兩篇文章
這篇文章就記錄一下怎麼用 AppVeyor 建置 golang 的 repository 吧

其實比想像中的簡單
一開始也是從 NEW PROJECT 的按鈕
把你用 golang 寫的 repository 加進來

AppVeyor 主畫面 [截圖自www.appveyor.com]

然後 AppVeyor 的官網文件有教你怎麼寫 yaml 來 build golang repository
照抄就可以了

  1. # appveyor.yml
  2. build: off
  3.  
  4. clone_folder: c:\gopath\src\github.com\$username\$project
  5.  
  6. environment:
  7. GOPATH: c:\gopath
  8.  
  9. stack: go 1.10
  10.  
  11. before_test:
  12. - go vet ./...
  13.  
  14. test_script:
  15. - go test ./...

這次也是第一次用 AppVeyor 的 yaml 檔
其實比想像中容易很多
而且網頁上的 Settings 裡面
也有 Export YAML 的功能
你可以利用網頁 UI 設定好一些內容後
透過 Export YAML 輸出 appveyor.yml
再放入你自己的 repository 內

Export YAML 畫面 [截圖自www.appveyor.com]

接下來就是測試看看 build 的結果啦

成功的 build 好與執行 unit tests [截圖自www.appveyor.com]

不過 golang 的 unit tests 輸出並非是 AppVeyor 支援的格式
所以我們得透過一個工具 go-junit-report 來做轉換
我查了一下
最後是在我的 appveyor.yml 檔加了兩個部分
一個是 install 的地方先抓下 go-junit-report
接著在執行 unit tests 的地方透過參數把輸出開成 verbose
然後利用 pipe 傳給 go-junit-report
當然最後要用到之前文章學到的
把 report 透過 API 傳到 AppVeyor 上

  1. build: off
  2.  
  3. clone_folder: c:\gopath\src\github.com\LaurenceCheng\testutils
  4.  
  5. environment:
  6. GOPATH: c:\gopath
  7.  
  8. stack: go 1.12
  9.  
  10. install:
  11. - go get -u -v github.com/jstemmer/go-junit-report
  12.  
  13. before_test:
  14. - go vet ./...
  15.  
  16. test_script:
  17. - go test -v ./... 2>&1 | c:\gopath\bin\go-junit-report > tests_report.xml
  18.  
  19. on_finish:
  20. - ps: (new-object net.webclient).UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests_report.xml))

之後就能成功在 Tests 頁面看到失敗與成功的案例了

unit test 成功與失敗的 report [截圖自www.appveyor.com]