簡體   English   中英

從 Gitlab CI 構建 docker 圖像時環境變量丟失

[英]Env vars lost when building docker image from Gitlab CI

我正在嘗試使用 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 部署時,我可以成功構建映像,但是當我運行它時,客戶端中的環境變量為空。

這是我的 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" ]

為什么2個過程有這么大的區別?

根據您在評論中的回答, GitLab CI/CD 環境變量不能解決您的問題。 Gitlab CI 環境僅在構建和/或部署您的應用程序的GitLab Runner的上下文中實際存在。

因此,如果您要將 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"

PS 試試 Gitlab CI 變量

有一種方便的方法可以在代碼之外存儲變量: 自定義環境變量

您可以從 UI 輕松設置它們 這可能非常強大,因為它可以用於編寫腳本而無需指定值本身。

創建自定義環境變量
(來源: gitlab.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM