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

appleboy · 2018年12月31日 · 624 次阅读

> 原文來自:『Go Module 導入到專案內且搭配 Travis CI 或 Drone 工具

<a href='https://photos.google.com/share/AF1QipPZ8MkcLAazbfRWwBrT1CQpipCL8N_1uAcYosJmJ-o6du2XRRHNEokVarxey5Bp8w?key=clctLU9JYVMzcEdHYWR2dUlVTVZ6YnZUUjlYRG9B&ampsource=ctrlq.org'&gt&ltimg; src='https://lh3.googleusercontent.com/Q5CP9S-xtRHxnDRvxDpWWkvBsEVw5C5uRyb5EiBh-UpYkrp_dkZp_oN8yi1WtqwruhSgnwNMB5QjJPxO94ABjG9oLBqmcRjlouNTNmrChIWbQcsAAbuV9eWB1wbsK-x-OY6iolb5ahc=w2400' /></a>

相信各位 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 mode tidy

其中 tidy 可以確保 go.mod 或 go.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 紀錄

<a href='https://photos.google.com/share/AF1QipOdciWDnbJ3B9GsdYMXJqZbjtNE6rVMSvPSSFavowykZXxvZsATX_aA_Tib3q88aw?key=eWFTcDNIeGhjWlRJSzFaVjhKRFZ3a0YyMXlqcm5B&ampsource=ctrlq.org'&gt&ltimg; src='https://lh3.googleusercontent.com/GRLzV6tA4qUB7kBMqf4jJ341-cRfgzVz-0PhhrtO-shEP2S7fijs3gTzdlWHkX8wLUOtYaguHbIUWjYihnXg8G2-w6LJG9V92g1pZlmatre1ZyY6uh5ChPU-CszxUWm1uDxo-Lc6oMI=w2400' /></a>

而在 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 [[ &quot;${GO111MODULE}&quot; = &quot;on&quot; ]]; then mkdir &quot;${HOME}/go&quot;; export GOPATH=&quot;${HOME}/go&quot;; fi

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

詳細設定請參考 .travis 設定

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册