将变量发送到docker容器以在脚本中使用

时间:2018-04-16 08:52:15

标签: shell variables docker scripting docker-compose

我正在管道的CI / CD中运行脚本。目标是获得一个字符串来使用。
当我得到该结果时,我将其保存到变量中并将结果保存在dockerfile的yaml文件中。

我想将该变量从CI环境传递到docker-compose容器中。所以,我试图将其导出为另一个导出的东西,但是它不起作用:

ci/pdf/jenkins-changes.sh
LOG="$(cat ".log")"
export LOG

我添加了一个如下所示的variables.env文件:

LOG=LOG

然后修改docker-compose.yaml以读取var:

pdf: image: thisimage/this build: context: ../ dockerfile: ./docker/Dockerfile.name args: git_branch: ${GIT_BRANCH} env_file: - variables.env environment: - LOG=${LOG} volumes: - do-build:/src/do-build

在最终运行docker-container的脚本中,我也有 宣布它:     来自ubuntu:16.04 as pdf-builder

ARG log
ENV log=${log}
RUN LOG=${log}
RUN export $LOG

然后,我运行需要变量的script.sh,但是,它返回Unbound变量并中断。

LOG=${log}
echo ${LOG}

1 个答案:

答案 0 :(得分:0)

这个问题的答案是:

ci/pdf/jenkins-changes.sh 
LOG="$(cat ".log")"
export LOG

然后将其作为参数传递,而不是变量:

pdf:
    image: thisimage/this
    build:
    context: ../
    dockerfile: ./docker/Dockerfile.name
    args:
        git_branch: ${GIT_BRANCH}
    env_file:
    - variables.env
    environment:
    - LOG=${LOG}
    volumes:
    - do-build:/src/do-build

然后,在dockerfile中调用它并定义它。

ARG log

这应该让任何脚本都使用它是全局的。