Go Module 匯入到專案內且搭配 Travis CI 或 Drone 工具
相信各位 Go 語言開發者陸陸續續都將專案從各種 Vendor 工具轉換到 Go Module,本篇會帶大家一步一步從舊專案轉換到 Go Module,或是該如何匯入新專案,最後會結合 CI/CD 著名的兩套工具 Travis 或 Drone 搭配 Go Module 測試。
影片介紹
https://www.youtube.com/watch?v=n1CvIb2-D8s
- 舊專案內 vendor 轉換成 go module 設定 (1:15)
- 新專案如何啟用 go module (6:20)
- 在 Travis CI 或 Drone 如何使用 go module (8:31)
- 在開源專案內並存 vendor 及 go module (介紹 Gin 如何使用 vendor 及 go module) (15:00)
更多實戰影片可以參考我的 Udemy 教學系列
舊專案
假設原本的專案有匯入 vendor 工具類似 govendor 或 dep,可以在目錄底下找到 vendor/vendor.json
或 Gopkg.toml
,這時候請在專案目錄底下執行
$ go mod init github.com/appleboy/drone-line
$ go mod download
您會發現 go module 會從 vendor/vendor.json
或 Gopkg.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
紀錄
而在 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 設定
相關文章
- Drone 搭配 Kubernetes 部署 Go 語言專案Go
- [分享] Go 語言開源專案 Drone 搭配 GitLab 安裝GoGitlab
- Go 語言開源 CI/CD 容器 Drone 介紹Go
- 開始使用Travis CI持續整合你的專案吧
- 在windows下匯入react專案並且打包編譯後部署到nginx上WindowsReact編譯Nginx
- golang專案包管理(go module模式)Golang模式
- eclipse專案匯入到IDEAEclipseIdea
- Go-Zero 短鏈專案 DevOps 實戰,利用 Drone CI/CD 打通上雲(Kubernetes)迭代流程Godev
- Travis CI 漏洞致數千個開源專案機密洩露
- objc系列譯文(6.5):為iOS專案搭建Travis CI伺服器OBJiOS伺服器
- 基於Drone實現CI/CD【0到1架構系列】架構
- GraphQL搭配MongoDB入門專案實戰MongoDB
- 使用travis-ci自動部署Hexo到github和codingHexoGithub
- 從 svn 將myeclispe專案匯入到ideaLispIdea
- github建立repo,本地匯入git專案到githubGithub
- 解放雙手,基於github travis-ci docker自動化部署java專案GithubDockerJava
- Drone CI For Github —— 打造自己的CI/CD工作流(一)Github
- Swift 全域性匯入ModuleSwift
- mysql匯入文字或excel檔案MySqlExcel
- DevOps平臺Travis CI漏洞暴露數千個開源專案敏感資料dev
- myeclipse的web專案匯入到eclipse中EclipseWeb
- 持續整合服務 Travis CI 教程
- java怎麼匯入專案?java已有專案如何匯入eclipse?JavaEclipse
- Tomcat匯入專案Tomcat
- Travis CI 配置檔案 .travis.yml 的語法介紹和一些用法舉例
- go語言實戰教程:實戰專案資源匯入和專案框架搭建Go框架
- 文字檔案用sqlldr工具匯入到oracel資料庫中SQL資料庫
- 輕量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流(三)Git
- [譯] 使用 Travis CI 自動釋出 npmNPM
- Travis CI:最小的分散式系統(上)分散式
- 基於官方Drone-CI 的alpine版本asia亞洲時區構建支援. Drone-CI based alpine Timezone BuildUI
- Go的包管理工具(四):Go Module ProxyGo
- 如何實現 node module 模組匯入
- Pycharm匯入python專案PyCharmPython
- 基於Drone+Gogs流水線-全面認識輕量級雲原生CI引擎DroneGo
- Hexo部落格遷移之旅(Coding到騰訊雲COS)+ Travis CI持續整合Hexo
- Android:一個專案提交多個module到JCenterAndroid
- 透過 Drone CLI 手動觸發 CI/CD 流程