docker-compose的环境variables在Jenkins里面

我有以下设置:

jenkins环境运行docker-compose,但我需要将环境variables传递给yml文件:

示例docker-compose.yml

version: '2' services: logon_server: build: . image: my_server:0.0.1 ports: - "9200:9200" command: ${DOCKER_CMD_EXEC} networks: - my_ntwrk networks: my_ntwrk: 

当我从我的Mac上的shell提示符下运行以下脚本时,我可以传递不同的命令来执行,一切正常。

exec-tests.sh

 #!/bin/bash chmod 755 docker/exec-*.sh # Setup env variables export DOCKER_CMD_EXEC=/ci_e2e.sh # Optional: record current versions docker -v && docker-compose -v echo `whoami` echo `sudo -E -u admin printenv` # Build, deploy and run E2E test cases sudo -E -u admin docker-compose up --no-color --abort-on-container-exit 

当我在我的jenkins工作中运行脚本时,在“构build环境” – >“Execute Shell” – >“Command”下,这里是我正在谈论的一个图像:

shell命令的例子

我得到以下错误:

 The DOCKER_CMD_EXEC variable is not set. Defaulting to a blank string 

我已经尝试作为根运行,并作为jenkins运行的默认用户“pipe理员”。 我试图让环境variables可以inheritance,尝试打印env的,一切看起来不错。

我可以重新生成错误在我的Mac只是取消设置DOCKER_CMD_EXEC,但我不知道为什么发生在jenkins!

任何帮助,将不胜感激!

谢谢。

Ĵ

这是我的解决scheme:

Docker脚本:

 #!/bin/bash export COMPOSE_HTTP_TIMEOUT=120 export DOCKER_CMD_EXEC=/app/docker/ci_run.sh export DOCKER_LINKED_CMD=/app/docker/ci_run.sh export DOCKER_NODE_ENV=staging export DOCKER_IMAGE_TAG=${DOCKER_IMAGE_TAG:=staging} export DOCKER_RELOAD_DB=${PARAM_RELOAD_DB:=true} export DOCKER_HTTP_PROXY='' # Optional: record current versions docker -v && docker-compose -v # Startup container(s) cat compose.yml | envsubst | docker-compose -f - up 

compose.yml文件:

 version: '2' services: app: build: . image: ${DOCKER_IMAGE_TAG} environment: - MONGODB_HOST=mongodb - NODE_ENV=${DOCKER_NODE_ENV} - HTTP_PROXY=${DOCKER_HTTP_PROXY} ports: - "8000:8000" command: ${DOCKER_CMD_EXEC} volumes: - /dev/shm:/dev/shm networks: - server-ntwk networks: server-ntwk: 

bash脚本和撰写文件在同一个目录中:

 ./docker/exec-build.sh