У меня есть приложение Golang, которое зависит от FTP-сервера.
Итак, в docker compose я создаю службу FTP и ссылаюсь на нее в своих тестах.
Итак, вмой docker-compose.yml у меня есть:
version: '3'
services:
mygoapp:
build:
dockerfile: ./Dockerfile.local
context: ./
volumes:
- ./volume:/go
- ./test_files:/var/test_files
networks:
mygoapp_network:
env_file:
- test.env
tty: true
ftpd-server:
container_name: ftpd-server
image: stilliard/pure-ftpd:hardened
environment:
PUBLICHOST: "0.0.0.0"
FTP_USER_NAME: "julien"
FTP_USER_PASS: "test"
FTP_USER_HOME: "/home/www/julien"
restart: on-failure
networks:
mygoapp_network:
networks:
mygoapp_network:
external: true
В моем gitlab-ci.yml у меня есть
variables:
PACKAGE_PATH: /go/src/gitlab.com/xxx
VOLUME_PATH: /var/test_files
stages:
- test
# A hack to make Golang-in-Gitlab happy
.anchors:
- &inject-gopath
mkdir -p $(dirname ${PACKAGE_PATH})
&& ln -s ${CI_PROJECT_DIR} ${PACKAGE_PATH}
&& cd ${PACKAGE_PATH}
test:
image: docker:18
services:
- docker:dind
stage: test
# only:
# - production
before_script:
- touch test.env
- apk update
- apk upgrade
- apk add --no-cache py-pip
- pip install docker-compose
- docker network create mygoapp_network
- mkdir -p volume/log
script:
- docker-compose -f docker-local.yaml up --build -d
- docker exec project-0_mygoapp_1 ls /var/test_files
- docker exec project-0_mygoapp_1 echo $VOLUME_PATH
- docker exec project-0_mygoapp_1 go test ./... -v
Все мои службы работают
Но когда язапустить
- docker exec project-0_myapp_1 echo $VOLUME_PATH
Я вижу, что $ VOLUME_PATH равен /var/test_files
, но внутри кода, когда я делаю:
os.Getenv("VOLUME_PATH")
переменная пуста
Кроме того, локально, с помощью docker exec, переменная в порядке.
Я также пытался поместить переменные в определение test
, но он все еще не работает
РЕДАКТИРОВАТЬ:Единственный способ сделать это - установить переменные окружения в docker compose, но это не так здорово
Есть идеи, как это исправить?