the*_*pan 10 django gitlab docker gitlab-ci docker-compose
我是使用Gitlab CI/CD 的Docker和 CI/CD新手。我的.env
Django 项目的根目录中有一个文件,其中包含我的环境变量,例如SECRET_KEY=198191891
. 该.env
文件包含在.gitignore
. 我已经在 CI/CD 的 Gitlab 设置中设置了这些变量。但是,Gitlab CI/CD 设置中设置的环境变量似乎不可用
另外,Gitlab CI/CD 自动化过程应该如何创建用户和数据库来连接和运行测试?在我的本地机器上为数据库创建数据库和用户时,我登录到容器docker exec -it <postgres_container_name> /bin/sh
并创建了 Postgres 用户和数据库。
这是我的相关文件。
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:
Run Code Online (Sandbox Code Playgroud)
.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
Run Code Online (Sandbox Code Playgroud)
小智 6
根据我的经验,将环境变量传递给容器 docker 的最佳方法是创建一个环境文件,该文件适用于开发环境和生产环境:
您必须按照以下步骤在 GitLab CI/CD 上创建一个环境文件,在您的项目 GitLab 上您必须转到:
settings
>>CI/CD
Variables
对此你必须创建一个ENV_FILE
演示图片
接下来在构建阶段将.gitlab-ci.yml
ENV_FILE 复制到本地进程
.gitlab-ci.yml
build:
stage: build
script:
- cp $ENV_FILE .env
- echo "Building the app"
- docker-compose build
Run Code Online (Sandbox Code Playgroud)
你Dockerfile
应该保持正常,所以不必改变
Dockerfile
FROM python:3.8.6-slim
# Rest of setup goes here...
COPY .env .env
Run Code Online (Sandbox Code Playgroud)
根据SECRET_KEY
配置,该变量将可用于所有 CI 作业。但是,我在您的 Docker Compose 文件中没有看到任何对它的引用以将其传递给您的一项或多项服务。为了让 Web 服务使用它,您可以像映射其他已有的变量一样将其映射。
web:
build: .
command: /usr/local/bin/gunicorn writer.wsgi:application -w 2 -b :8000
environment:
SECRET_KEY: ${SECRET_KEY}
DEBUG: ${DEBUG}
…
Run Code Online (Sandbox Code Playgroud)
至于创建数据库,你应该将你当前在 postgres 容器中交互运行的任何内容打包到一个 SQL 文件或 shell 脚本中,然后将其绑定挂载到/docker-entrypoint-initdb.d
. 有关更多详细信息,请参阅postgres 图像描述的初始化脚本部分。
归档时间: |
|
查看次数: |
7557 次 |
最近记录: |