Мод Go загружается хорошо, но golint не работает с предполагаемыми загруженными зависимостями

В Gitlab CI мне нужно указать GITLAB_DEPLOY_TOKEN, так как у меня есть несколько частных репозиториев. Это хорошо работает на этапе компиляции.

Но когда я запускаю golint, он снова загружает все зависимости и не работает с частными. Я мог бы добавить ту же директиву git config,

изображение: переменные golang: PACKAGE_PATH: /go/src/gitlab.com/company/sam/daemon PACKAGE_API_NAME: registry.gitlab.com/company/sam/daemon REGISTRY_URL: https://registry.gitlab.com DOCKER_DRIVER: оверлей GO111MODULE:" on "

.anchors: - & inject-gopath mkdir -p $ (имя каталога $ {PACKAGE_PATH}) && ln -s $ {CI_PROJECT_DIR} $ {PACKAGE_PATH} && cd $ {PACKAGE_PATH}

compile:
  stage: build
  before_script:
    - *inject-gopath
    - git config --global url."https://oauth:${GITLAB_DEPLOY_TOKEN}@gitlab.com".insteadOf https://gitlab.com
    - go mod tidy
  script: GOOS=linux GOARCH=arm GOARM=7 go build -o release/daemon .
  artifacts:
    name: "binary-$CI_PIPELINE_ID"
    paths:
      - $GOPATH/pkg/mod/
    expire_in: 1 hour

lint:
  stage: test
  before_script:
    - apt install -y curl git
    - go get github.com/golang/lint
    - *inject-gopath
  script:
    - $GOPATH/bin/golint -set_exit_status $(go list ./...)
  allow_failure: true

Я прочитал здесь, что модули go были кэшированы в $GOPATH/pkg/mod, но это не так. похоже, не работает

Есть идеи, как мне это исправить?


person Juliatzin    schedule 24.06.2019    source источник
comment
Вы уверены, что будете использовать сборку модуля? Вы включили GO111MODULE =?   -  person Volker    schedule 24.06.2019
comment
Да, есть, и у меня есть вывод модулей go, так что в этом нет никаких сомнений   -  person Juliatzin    schedule 24.06.2019
comment
Вам может понадобиться gitlab для кэширования зависимостей между заданиями docs .gitlab.com / ee / ci / caching /   -  person georgeok    schedule 24.06.2019
comment
Раньше я делал это с артефактами, с папкой поставщика, и он работал хорошо .... Я мог бы попробовать   -  person Juliatzin    schedule 24.06.2019
comment
Вы уверены, что golint поддерживает модули? (github.com/golang/lint/issues/409)   -  person JimB    schedule 24.06.2019
comment
Ага, похоже, что до сих пор нет полной поддержки модулей с lint   -  person Juliatzin    schedule 24.06.2019
comment
Как выглядит ваш inject-gopath?   -  person Isaac Kleinman    schedule 24.06.2019
comment
@IsaacKleinman Я обновил код с помощью inject-gopath и других переменных   -  person Juliatzin    schedule 25.06.2019


Ответы (1)


Gitlab интерпретирует все пути относительно корня проекта, поэтому, если ваш проект myproject, $GOPATH/pkg/mod/ переводится в myproject/$GOPATH/pkg/mod/, но место, где инструмент go фактически устанавливает пакеты, - это /$GOPATH/pkg/mod/ (непосредственно под корнем).

Вы можете обойти это, установив GOPATH в место в каталоге проекта; например

export GOPATH="$CI_PROJECT_DIR/pkg/mod"

Затем вы можете использовать этот путь во всем своем конвейере.

person Isaac Kleinman    schedule 24.06.2019