我对 Docker 和使用 Gitlab CI/CD 进行持续集成和部署很陌生。我在 Django 项目的根目录下有一个 .env
文件,其中包含我的环境变量,例如 SECRET_KEY=198191891
。该 .env
文件已包含在 .gitignore
中。我在 Gitlab 的 CI/CD 设置中设置了这些变量。但是,似乎无法访问在 Gitlab CI/CD 设置中设置的环境变量。
此外,Gitlab CI/CD 自动化流程如何创建用户和数据库以连接并运行测试?在我的本地机器上为 DB 和用户创建 DB 时,我登录到容器 docker exec -it <postgres_container_name> /bin/sh
并创建了 Postgres 用户和 DB。
以下是相关文件。
docker-compose.yml
version: "3"
services:
postgres:
image: postgres
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data/
web:
build: .
command: /usr/local/bin/gunicorn writer.wsgi:application -w 2 -b :8000
environment:
DEBUG: ${DEBUG}
DB_HOST: ${DB_HOST}
DB_NAME: ${DB_NAME}
DB_USER: ${DB_USER}
DB_PORT: ${DB_PORT}
DB_PASSWORD: ${DB_PASSWORD}
SENDGRID_API_KEY: ${SENDGRID_API_KEY}
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_STORAGE_BUCKET_NAME: ${AWS_STORAGE_BUCKET_NAME}
depends_on:
- postgres
- redis
expose:
- "8000"
volumes:
- .:/writer-api
redis:
image: "redis:alpine"
celery:
build: .
command: celery -A writer worker -l info
volumes:
- .:/writer-api
depends_on:
- postgres
- redis
celery-beat:
build: .
command: celery -A writer beat -l info
volumes:
- .:/writer-api
depends_on:
- postgres
- redis
nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
depends_on:
- web
volumes:
pgdata:
.gitlab-ci.yml
image: tmaier/docker-compose:latest
services:
- docker:dind
before_script:
- docker info
- docker-compose --version
stages:
- build
- test
- deploy
build:
stage: build
script:
- echo "Building the app"
- docker-compose build
test:
stage: test
variables:
script:
- echo "Testing"
- docker-compose run web coverage run manage.py test
deploy-staging:
stage: deploy
only:
- develop
script:
- echo "Deploying staging"
- docker-compose up -d
deploy-production:
stage: deploy
only:
- master
script:
- echo "Deploying production"
- docker-compose up -d
docker-compose.yml
中访问它。这意味着如果您没有在 web 容器中声明变量,则无法在.gitlab-ci.yml
中设置它? - theTypan.env
的环境,我该如何区分开发.env
和生产.env
。我使用了docker-machine创建了一个AWS EC2实例。我创建了一个production.yml
文件,并执行了docker-compose -f production.yml up -d
。EC2机器中的容器捕获了我的开发.env
,这不是我想要的。 - theTypan