Gitlab-ci 和 docker - 环境变量

Gitlab-ci and docker - env variables

我的场景:Gitlab 运行器使用 docker 在 ubuntu 服务器中部署我的 React 应用程序。

我的问题:我想知道如何将在 gitlab 中创建的环境变量传递给 docker compose(或 dockerfile)。为了在构建应用程序时使用它们。

我的文件:

image: docker:latest
services:
    - docker:dind

stages:
    - deploy

step-develop:
    stage: deploy
    only:
        - dev
    tags:
        - dev
    script:
        - echo MY_VAR_FROM_GITLAB # This is working good.
        - sudo docker image prune -f
        - sudo docker-compose -f docker-compose.yml build --no-cache
        - sudo docker-compose -f docker-compose.yml up -d
step-production:
    stage: deploy
    only:
        - prod
    tags:
        - prod
    script:
        - sudo docker image prune -f
        - sudo docker-compose -f docker-compose-prod.yml build --no-cache
        - sudo docker-compose -f docker-compose-prod.yml up -d
#the docker compose file version
version: '3'
# you can run multiple services inside one docker compose file
# define them with their dependencies one after the other
services:
    # service 1 named react-dev
    react-dev:
        # service 1 container name
        container_name: react-dev
        build:
            # the context (working directory) is the current directory
            # change this to the directory containing the dockerfile if in a different place
            context: .
            # the dockerfile to be run
            dockerfile: Dockerfile
        # map the exposed port from the underlying service to a port exposed to the outside
        # in this case  map port 3000 exposed by create react app to also 3000
        # to be used to access the container from the outside
        ports:
            - '3000:80'
        # the mounted volumes (folders which are outside docker but being used by docker)
        # volumes:
        #     - '.:/gt-strapi-react'
        #     - '/gt-strapi-react/node_modules'
        # set the environment to development
        environment:
            - NODE_ENV=development

由于是 React 应用程序,您无法在 运行 时添加环境变量,因此您必须在构建时添加它们。为此,将它们作为参数添加到 docker-compose 文件

build:
  # the context (working directory) is the current directory
  # change this to the directory containing the dockerfile if in a different place
  context: .
  # the dockerfile to be run
  dockerfile: Dockerfile
  args:
    - MY_VAR_FROM_GITLAB=${MY_VAR_FROM_GITLAB}

并且你还需要在docker文件中指定它

ARG MY_VAR_FROM_GITLAB
ENV MY_VAR_FROM_GITLAB $MY_VAR_FROM_GITLAB

编辑

如评论中所述,创建一个 .env 文件,其中包含 docker-compose.yml

touch .env

并在该文件中添加变量

echo "MY_VAR_FROM_GITLAB =$MY_VAR_FROM_GITLAB" >> .env