与供应商文件夹的类型不兼容

时间:2019-03-25 02:46:09

标签: go jenkins dependency-management vendor

我正在通过Jenkins部署Go应用程序并运行一些测试。

即使我通过vendor填充了godep save文件夹,即使我从GOPATH中删除了所有第三方库,我的所有测试也都通过了本地测试。

但是,当詹金斯(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 Pipeline代码的“转到”部分。可能与此问题有关吗?

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'    
}

1 个答案:

答案 0 :(得分:0)

怀疑,问题出在我的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
       '''
}

非常感谢所有帮助过的人!