Мой конвейер не позволит мне подключиться через golang, хотя он работает в среде разработчика - PullRequest
0 голосов
/ 27 июня 2019

У меня есть файл .gitlab-ci.yml, который позже использует изображение golang и изображение MySql в качестве службы ...

gilab-ci.yml ...

stages:
  - test
  - build
  - art

image: golang:1.9.2  



variables:
  BIN_NAME: alltools
  ARTIFACTS_DIR: artifacts
  GO_PROJECT: alltools
  GOPATH: /go


before_script:
  - mkdir -p ${GOPATH}/src/${GO_PROJECT}
  - mkdir -p ${CI_PROJECT_DIR}/${ARTIFACTS_DIR}
  - go get -u github.com/golang/dep/cmd/dep
  - go get -u github.com/fatih/color
  - go get -u github.com/go-sql-driver/mysql
  - cp -r ${CI_PROJECT_DIR}/* ${GOPATH}/src/${GO_PROJECT}/
  - cd ${GOPATH}/src/${GO_PROJECT}
  - env="root:rootroot@tcp(localhost:3306)/TESTDB"

test:
  stage: test
  services:
    - mysql:5.7
  variables:
    # Configure mysql environment variables (https://hub.docker.com/_/mysql/)
    # MYSQL_DATABASE: mydb
    MYSQL_ROOT_PASSWORD: rootroot

  script:
    # Run all tests         

    go test ./...


build:
  stage: build

  script:
    # Compile and name the binary as `hello`
    - go build -o alltools
    - pwd
    - ls -l alltools
    # Execute the binary
    - ./alltools
    # Move to gitlab build directory
    - mv ./alltools ${CI_PROJECT_DIR}
  artifacts:
    paths:
      - ./alltools

У меня также есть тест в моем приложении go, который отлично работает на моей машине dev. Как вы увидите выше, я установил и окружаю varable в файле gitlab-ci.yml (это соответствует моей среде dev.

  • env = "root: rootroot @ tcp (localhost: 3306) / TESTDB"

Но когда я запускаю свой конвейер, я получаю следующую ошибку ...

$ env = "root: rootroot @ tcp (localhost: 3306) / TESTDB" $ go test. / ...?
alltools [нет файлов теста]? Alltools / BBData [нет тестаfiles] dial tcp 127.0.0.1:3306: getsockopt: соединение отклонено

Нужно ли изменять переменную среды в файле gitlab-ci.yml?

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Как уже указывал Седдик, localhost не является хостом, который будет прослушивать сервер MySQL;он будет доступен под именем mysql.

. Кроме того, команда env="root:rootroot@tcp(localhost:3306)/TESTDB" устанавливает локальную переменную в оболочке.Это не влияет на переменные среды.

Чтобы установить переменную среды, либо

  • export локальная переменная
  • , либо используйте словарь variables
  • или установите переменную специально для команды go test:
variables:
  # Set your variable here for all jobs ...
  env: root:rootroot@tcp(mysql:3306)/TESTDB 

before_script:
  # ... or export it here ...
  - export env=root:rootroot@tcp(mysql:3306)/TESTDB

test:
  services:
    - mysql:5.7
  variables:
    # ... or set it here for this job only ...
    env: root:rootroot@tcp(mysql:3306)/TESTDB

  script:
    # ... or set it here for the go command only
    - env=root:rootroot@tcp(mysql:3306)/TESTDB go test ./...


1 голос
/ 27 июня 2019

Вы должны использовать:

MySQL

вместо:

1010 * локальный *

...