Go Module 導入到專案內且搭配 Travis CI 或 Drone 工具


相信各位 Go 語言開發者陸陸續續都將專案從各種 Vendor 工具轉換到 Go Module,本篇會帶大家一步一步從舊專案轉換到 Go Module,或是該如何導入新專案,最後會結合 CI/CD 著名的兩套工具 TravisDrone 搭配 Go Module 測試。



影片介紹




  1. 舊專案內 vendor 轉換成 go module 設定 (1:15)

  2. 新專案如何啟用 go module (6:20)

  3. 在 Travis CI 或 Drone 如何使用 go module (8:31)

  4. 在開源專案內並存 vendor 及 go module (介紹 Gin 如何使用 vendor 及 go module) (15:00)


更多實戰影片可以參考我的 Udemy 教學系列


舊專案


假設原本的專案有導入 vendor 工具類似 govendordep,可以在目錄底下找到 vendor/vendor.jsonGopkg.toml,這時候請在專案目錄底下執行


$ go mod init github.com/appleboy/drone-line
$ go mod download

您會發現 go module 會從 vendor/vendor.jsonGopkg.toml 讀取相關套件資訊,接著寫進去 go.mod 檔案,完成後可以下 go mod dowload 下載所有套件到 $HOME/go/pkg/mod


新專案


新專案只需要兩個步驟就可以把相關套件設定好


$ go mod init github.com/appleboy/drone-line
$ go mod tidy

其中 tidy 可以確保 go.modgo.sum 裡面的內容都跟專案內所以資料同步,假設在程式碼內移除了 package,這樣 tidy 會確保同步性移除相關 package。


整合 Travis 或 Drone


go module 在 1.11 版本預設是不啟動的,那在 Travis 要把 GO111MODULE 環境變數打開


matrix:
fast_finish: true
include:
- go: 1.11.x
env: GO111MODULE=on

完成後可以到 Travis 的環境看到底下 go get 紀錄



而在 Drone 的設定如下:


steps:
- name: testing
image: golang:1.11
pull: true
environment:
GO111MODULE: on
commands:
- make vet
- make lint
- make misspell-check
- make fmt-check
- make build_linux_amd64
- make test


結論


在開源專案內為了相容 Go 舊版本,所以 Gin 同時支援了 govendor 及 go module,其實還蠻難維護的,但是可以透過 travis 環境變數的判斷來達成目的:


language: go
sudo: false
go:
- 1.6.x
- 1.7.x
- 1.8.x
- 1.9.x
- 1.10.x
- 1.11.x
- master

matrix:
fast_finish: true
include:
- go: 1.11.x
env: GO111MODULE=on

git:
depth: 10

before_install:
- if [[ “${GO111MODULE}” = “on” ]]; then mkdir “${HOME}/go”; export GOPATH=“${HOME}/go”; fi

install:
- if [[ “${GO111MODULE}” = “on” ]]; then go mod download; else make install; fi
- if [[ “${GO111MODULE}” = “on” ]]; then export PATH=“${GOPATH}/bin:${GOROOT}/bin:${PATH}“; fi
- if [[ “${GO111MODULE}” = “on” ]]; then make tools; fi


詳細設定請參考 .travis 設定



comments powered by Disqus