类型与供应商文件夹不兼容
Type Incompatibility With Vendor Folder
我正在通过 Jenkins 和 运行 一些测试部署 Go 应用程序。
即使我从我的 GOPATH 中删除了所有第三方库,我的所有测试都在本地通过,因为我已经通过 godep save
.
填充了我的 vendor
文件夹
然而,当 Jenkins 运行我的测试时,它报告 GitHub 版本和供应商版本之间的类型不兼容:
mypackage/MyFile_test.go:65:22: cannot use MY_VARIABLE
(type "github.com/gocql/gocql".UUID) as type
"myproject/vendor/github.com/gocql/gocql".UUID in assignment
我尝试使用 Dep
(Go 团队的官方供应商经理)代替 godep
,但没有解决问题。
我是否需要告诉我的测试使用 "myproject/vendor/github.com/gocql/gocql" 而不是 "github.com/gocql/gocql"? (更新: 显然这是非法的,会给出错误 must be imported as github.com/gocql/gocql
。)
我该如何解决这个问题?
更新:
- 我在本地机器和 Jenkins 服务器上都使用 Go 1.12.1。
- 我没有使用任何类型的
go modules
。
这是我的 Jenkins 流水线代码的 Go 部分。会不会和这个问题有关?
steps {
// Create our project directory.
sh 'cd ${GOPATH}/src'
sh 'mkdir -p ${GOPATH}/src/myproject'
// Copy all files in our Jenkins workspace to our project directory.
sh 'cp -r ${WORKSPACE}/* ${GOPATH}/src/myproject'
// Copy all files in our "vendor" folder to our "src" folder.
sh 'cp -r ${WORKSPACE}/vendor/* ${GOPATH}/src'
// Build the app.
sh 'go build'
// Remove cached test results.
sh 'go clean -cache'
// Run Unit Tests.
sh 'go test ./... -v -short'
}
正如我怀疑的那样,问题出在我的 Jenkins 配置上(因为在本地一切正常)。
原来每个 sh
行代表一个新的 shell 终端,所以我需要做的就是将所有内容都放在一个 sh
部分中,如下所示:
steps {
// Create our expected project directory inside our GOPATH's src folder.
// Move our project codes (and its vendor folder) to that folder.
// Build and run tests.
sh '''
mkdir -p ${GOPATH}/src/myproject
mv ${WORKSPACE}/* ${GOPATH}/src/myproject
cd ${GOPATH}/src/myproject
go build
go clean -cache
go test ./... -v -short
'''
}
非常感谢所有帮助过的人!
我正在通过 Jenkins 和 运行 一些测试部署 Go 应用程序。
即使我从我的 GOPATH 中删除了所有第三方库,我的所有测试都在本地通过,因为我已经通过 godep save
.
vendor
文件夹
然而,当 Jenkins 运行我的测试时,它报告 GitHub 版本和供应商版本之间的类型不兼容:
mypackage/MyFile_test.go:65:22: cannot use MY_VARIABLE
(type "github.com/gocql/gocql".UUID) as type
"myproject/vendor/github.com/gocql/gocql".UUID in assignment
我尝试使用 Dep
(Go 团队的官方供应商经理)代替 godep
,但没有解决问题。
我是否需要告诉我的测试使用 "myproject/vendor/github.com/gocql/gocql" 而不是 "github.com/gocql/gocql"? (更新: 显然这是非法的,会给出错误 must be imported as github.com/gocql/gocql
。)
我该如何解决这个问题?
更新:
- 我在本地机器和 Jenkins 服务器上都使用 Go 1.12.1。
- 我没有使用任何类型的
go modules
。
这是我的 Jenkins 流水线代码的 Go 部分。会不会和这个问题有关?
steps {
// Create our project directory.
sh 'cd ${GOPATH}/src'
sh 'mkdir -p ${GOPATH}/src/myproject'
// Copy all files in our Jenkins workspace to our project directory.
sh 'cp -r ${WORKSPACE}/* ${GOPATH}/src/myproject'
// Copy all files in our "vendor" folder to our "src" folder.
sh 'cp -r ${WORKSPACE}/vendor/* ${GOPATH}/src'
// Build the app.
sh 'go build'
// Remove cached test results.
sh 'go clean -cache'
// Run Unit Tests.
sh 'go test ./... -v -short'
}
正如我怀疑的那样,问题出在我的 Jenkins 配置上(因为在本地一切正常)。
原来每个 sh
行代表一个新的 shell 终端,所以我需要做的就是将所有内容都放在一个 sh
部分中,如下所示:
steps {
// Create our expected project directory inside our GOPATH's src folder.
// Move our project codes (and its vendor folder) to that folder.
// Build and run tests.
sh '''
mkdir -p ${GOPATH}/src/myproject
mv ${WORKSPACE}/* ${GOPATH}/src/myproject
cd ${GOPATH}/src/myproject
go build
go clean -cache
go test ./... -v -short
'''
}
非常感谢所有帮助过的人!