Несовместимость типов с папкой поставщика - PullRequest
3 голосов
/ 25 марта 2019

Я развертываю приложение Go через Jenkins и запускаю несколько тестов.

Все мои тесты проходят локально, даже если я удаляю все сторонние библиотеки из моей GOPATH, потому что я заполнил свою папку vendor через godep save.

Однако, когда Дженкинс запускает мои тесты, он сообщает о несовместимости типов между версией 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.)

Как мне это решить?

ОБНОВЛЕНИЕ:

  • Я использую Go 1.12.1 как на своей локальной машине, так и на сервере Jenkins.
  • Я не использую go modules любого рода.

Вот раздел Go моего кода 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 голосов
/ 25 марта 2019

Как и предполагалось, проблема была в моей конфигурации Jenkins (потому что все работало нормально локально).

Оказывается, каждая строка sh представляла новый терминал оболочки, поэтому все, что мне нужно было сделать, это поместить все ввсего один 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
       '''
}

Большое спасибо всем, кто помог!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...