在 TravisCI 中使用 Docker 时设置秘密变量



我用NodeJS构建了一个后端,并希望使用TravisCI和Docker来运行测试。

在我的代码中,我有一个秘密环境:process.env.SOME_API_KEY

这是我的 Dockerfile.dev

FROM node:alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]

我的码头工人组成:

version: "3"
services:
api:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- /app/node_modules
- .:/app
ports:
- "3000:3000"
depends_on:
- mongo
mongo:
image: mongo:4.0.6
ports:
- "27017:27017"

这是我的特拉维斯

sudo: required
services:
- docker
before_script:
- docker-compose up -d --build
script:
- docker-compose exec api npm run test

我还在我的 travis 设置变量中设置了 SOME_API_KEY='xxx'。但是,容器似乎没有收到SOME_API_KEY。

如何将SOME_API_KEY从 travisCI 传递到 docker?谢谢

容器通常不会继承运行它们的环境。 考虑这样的事情:

export SOMEVARIABLE=somevalue
docker run --rm alpine sh -c 'echo $SOMEVARIABLE'

这永远不会打印出$SOMEVARIABLE的值,因为没有神奇的过程将环境变量从本地 shell 导入到容器中。如果您希望在 docker 容器中公开 travis 环境变量,则需要通过在docker-compose.yml中创建适当的environment块来显式执行此操作。例如,我使用以下docker-compose.yml

version: "3"
services:
example:
image: alpine
command: sh -c 'echo $SOMEVARIABLE'
environment:
SOMEVARIABLE: "${SOMEVARIABLE}"

然后,我可以运行以下内容:

export SOMEVARIABLE=somevalue
docker-compose up

并查看以下输出:

Recreating docker_example_1 ... done
Attaching to docker_example_1
example_1  | somevalue
docker_example_1 exited with code 0

所以你需要写一些类似的东西:

version: "3"
services:
api:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- /app/node_modules
- .:/app
ports:
- "3000:3000"
depends_on:
- mongo
environment:
SOME_API_KEY: "${SOME_API_KEY}"
mongo:
image: mongo:4.0.6
ports:
- "27017:27017"

我有一个类似的问题,并在命令中解决了将环境变量传递给容器docker-compose exec解决。如果变量位于 Travis 环境中,您可以执行以下操作:

sudo: required
services:
- docker
before_script:
- docker-compose up -d --build
script:
- docker-compose exec -e SOME_API_KEY=$SOME_API_KEY api npm run test

最新更新