将环境变量从Shippable传递到Docker

时间:2016-05-02 00:26:55

标签: python git docker environment-variables shippable-ci

我使用Shippable有两个原因:自动构建docker镜像并传递加密的环境变量。我能够自动化构建,但我无法传递变量。

我首先将环境变量输入项目设置中的Shippable文本框:

SECRET_KEY=123456

我点击'加密'按钮然后再发送:

- secure : hash123abc...

我把这个哈希放到了我的shippable.yml文件中。它看起来像:

language: python

python:
    - 2.7

build_image: myusername/myimagename

env:

 - secure : hash123abc...

build:
 post_ci:
  - docker login -u myusername -p mypassword
  - docker build -t myusername/myimagename:latest .
  - docker push myusername/myimagename:latest

integrations:
 hub:
  - integrationName : myintegrationname
    type: docker
    branches:
     only:
      - master

自动构建工作正常!但如果我尝试:

sudo docker run myusername/myimagename:latest echo $SECRET_KEY

我一无所获。

我设置环境变量的Dockerfile(在本例中为SECRET_KEY)如下所示:

FROM python:2.7.11

RUN apt-get update

RUN apt-get install -y git

RUN get clone https://github.com/myusername/myrepo.git

ENV SECRET_KEY=$SECRET_KEY

在我看来,解释我的逻辑可能会有所帮助。因为我的想法可能是问题,如果它不在代码中:

可发送项目构建(通过repo push或手动)。在shippable.yml中它做了一些事情:

  • 构建初始图片
  • 设置SECRET_KEY环境变量
  • 基于Dockerfile构建新映像
    • Dockerfile: - 将env变量SECRET_KEY设置为前两步.yml设置的SECRET_KEY
  • 推送图片

我想现在我已经在我的图像中设置了一个环境变量,我现在可以访问它了。但我一无所获。这有什么问题?

1 个答案:

答案 0 :(得分:1)

感谢@Alex Hall与我合作!

事实证明,在此设置中使用Docker传递环境变量必须使用一个简单的标志来启动。所以在我的shippable.yml中我改变了:

- docker build -t myusername/myimagename:latest .

- docker build --build-arg SECRET_KEY=$SECRET_KEY -t myusername/myimagename:latest .

然后在我的Dockerfile中我添加了:

ARG SECRET_KEY

RUN echo $SECRET_KEY > env_file

看,钥匙在env_file