use*_*465 5 bash shell environment-variables jenkins docker
我有以下设置:
Jenkins运行docker-compose的环境,但是我需要将环境变量传递给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:
Run Code Online (Sandbox Code Playgroud)
当我从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
Run Code Online (Sandbox Code Playgroud)
当我在jenkins作业中运行脚本时,在“构建环境”->“执行Shell”->“命令”下,这是我所谈论的图像:
我收到以下错误:
The DOCKER_CMD_EXEC variable is not set. Defaulting to a blank string
Run Code Online (Sandbox Code Playgroud)
我试过以root身份和默认用户'admin'的身份运行它,这就是jenkins的运行方式。我尝试使环境变量可继承,尝试打印环境变量,一切看起来都很好。
我可以通过取消设置DOCKER_CMD_EXEC来在Mac上重现该错误,但我无法弄清为什么詹金斯会发生这种情况!
任何帮助,将不胜感激!
谢谢。
Ĵ
这是我的解决方案:
码头脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
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:
Run Code Online (Sandbox Code Playgroud)
bash 脚本和 compose 文件位于同一目录中:
./docker/exec-build.sh
Run Code Online (Sandbox Code Playgroud)