1

我使用 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

我什么都得不到。

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

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 推送或手动)。在 shippable.yml 中,它做了一些事情:

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

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

4

1 回答 1

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

于 2016-05-02T02:45:01.597 回答