【问题标题】:How to pass GitLab CI file variable to Dockerfile and docker container?如何将 GitLab CI 文件变量传递给 Dockerfile 和 docker 容器?
【发布时间】:2020-03-15 07:04:18
【问题描述】:

GitLab CI 允许向项目添加自定义变量。

它允许使用file 类型的秘密变量,其中我指定一个作为变量名称的密钥和一个作为文件内容的值(例如证书的内容)

然后在管道执行过程中,内容将保存为临时文件,调用变量名将返回创建文件的路径。

最终我需要将此文件复制到构建项目时创建的 Docker 容器中。 (docker build ... 在 yml 中)

在测试变量是否有效时,我在.gitlab-ci.yml 中尝试了echo $VARIABLE,它有效,返回临时文件的路径。但是在Dockerfile 中做RUN echo $VARIABLE 时,它是空的。因此我也不能使用ADD $VARIABLE /tmp/,这是我的目标。

有没有办法解决这个问题并使Dockerfile 可以使用此文件?我是 Docker 和 GitLab 的新手,不知道还能去哪里看。

【问题讨论】:

标签: docker gitlab dockerfile gitlab-ci devops


【解决方案1】:

必须使用 .yml 文件 docker build 参数 --build-arg VARIABLE 并在 Dockerfile 中使用 ARG VARIABLE 所以 Dockerfile 知道它需要使用环境变量。

【讨论】:

    【解决方案2】:

    不幸的是,这是不可能的,因为 CI/CD 变量中的文件在构建时被复制到不在 docker 构建上下文中的 tmp 目录 ($CI_PROJECT_DIR.tmp) 中。但是,ADD 需要在构建上下文中以documented 形式存在的文件

    一种解决方法是在 docker build 命令之前复制当前目录中的文件内容(假设 Dockerfile 在${CI_PROJECT_DIR}):

    cat $VARIABLE > ${CI_PROJECT_DIR}\mynewfile
    

    并参考 Dockerfile 中的文件:

    ADD mynewfile /tmp/
    

    【讨论】:

      【解决方案3】:

      我用 maven 设置做了类似的事情:

      before_script:
        - mkdir -p ${CI_PROJECT_DIR}/.m2/
        - cp $M2_SETTINGS ${CI_PROJECT_DIR}/.m2/settings.xml && chmod 600 ${CI_PROJECT_DIR}/.m2/settings.xml
      

      【讨论】:

        【解决方案4】:

        你应该尝试做这样的事情:

        ADD ${VARIABLE}/tmp

        【讨论】:

        • 这并不准确,就像@robliv 说--build-argARG 是必要的。检查这个anwser
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-04
        • 2019-08-05
        • 1970-01-01
        • 2015-08-10
        • 2017-02-19
        • 2021-11-11
        • 2021-04-17
        相关资源
        最近更新 更多