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
我的场景: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