从Gitlab CI构建Docker映像时环境变量丢失

时间:2019-09-26 11:50:00

标签: docker kubernetes gitlab dockerfile continuous-deployment

我正在尝试使用Docker和Gitlab CI构建我的React / NodeJS项目。

当我手动构建图像时,我使用包含env vars的.env文件,一切都很好。

docker build --no-cache -f client/docker/local/Dockerfile . -t espace_client_client:local
docker build --no-cache -f server/docker/local/Dockerfile . -t espace_client_api:local

但是当使用Gitlab进行部署时,我可以成功构建映像,但是当我运行它时,客户端中的env vars为空。

这是我的gitlab CI:

image: node:10.15
variables:
  REGISTRY_PACKAGE_CLIENT_NAME: registry.gitlab.com/company/espace_client/client
  REGISTRY_PACKAGE_API_NAME: registry.gitlab.com/company/espace_client/api
  REGISTRY_URL: https://registry.gitlab.com
  DOCKER_DRIVER: overlay
  # Client Side
  REACT_APP_API_URL: https://api.espace-client.company.fr
  REACT_APP_DB_NAME: company
  REACT_APP_INFLUX: https://influx-prod.company.fr
  REACT_APP_INFLUX_LOGIN: admin
  REACT_APP_HOUR_GMT: 2


stages:
  - publish

docker-push-client:
  stage: publish
  before_script:
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $REGISTRY_URL
  image: docker:stable
  services:
    - docker:dind
  script:
    - docker build --no-cache -f client/docker/prod/Dockerfile . -t $REGISTRY_PACKAGE_CLIENT_NAME:latest
    - docker push $REGISTRY_PACKAGE_CLIENT_NAME:latest

这是客户端的Dockerfile

FROM node:10.15-alpine
WORKDIR /app
COPY package*.json ./
ENV NODE_ENV production

RUN npm -g install serve && npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD [ "serve", "build", "-l", "3000" ]

为什么两个过程之间有这样的区别?

1 个答案:

答案 0 :(得分:2)

根据您在评论中的回答,GitLab CI/CD environment variables无法解决您的问题。只有在GitLab Runner的上下文中,Gitlab CI环境才是实际的,该上下文构建和/或部署了您的应用程序。

因此,如果要将Env变量传播到应用程序,则有几种方法可以将变量从.gitlab-cy.yml传递到您的应用程序:

ENV指令Dockerfile

例如

FROM node:10.15-alpine
WORKDIR /app
COPY package*.json ./
ENV   NODE_ENV production
ENV   REACT_APP_API_URL: https://api.espace-client.company.fr
ENV   REACT_APP_DB_NAME: company
ENV   REACT_APP_INFLUX: https://influx-prod.company.fr
ENV   REACT_APP_INFLUX_LOGIN: admin
ENV   REACT_APP_HOUR_GMT: 2

RUN npm -g install serve && npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD [ "serve", "build", "-l", "3000" ]

docker-compose environment指令

web:
  environment:
    - NODE_ENV=production
    - REACT_APP_API_URL=https://api.espace-client.company.fr
    - REACT_APP_DB_NAME=company
    - REACT_APP_INFLUX=https://influx-prod.company.fr
    - REACT_APP_INFLUX_LOGIN=admin
    - REACT_APP_HOUR_GMT=2

Docker run -e

  

(不是您的情况,仅供参考)

docker -e REACT_APP_DB_NAME="company"

P.S。尝试使用Gitlab CI变量

有一种方便的方法可以在代码之外存储变量:Custom environment variables

您可以set them up easily from the UI。这可以非常强大,因为它可以用于编写脚本,而无需指定值本身。

creating-a-custom-environment-variable