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

问题描述 投票:0回答:1

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

这是我的TravisCI

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?谢谢

docker travis-ci
1个回答
0
投票

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

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

这将永远不会打印出$SOMEVARIABLE的值,因为没有神奇的过程可以将环境变量从本地Shell导入到容器中。如果要在docker容器内公开travis环境变量,则需要通过在environment中创建适当的docker-compose.yml块来明确地执行此操作。例如,我使用以下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"
© www.soinside.com 2019 - 2024. All rights reserved.