環境変数を正しく設定する方法Gitlab CI / CDおよびDocker
DockerとGitlab CI/CDを使用したCI/CDは初めてです。 Djangoプロジェクトのルートディレクトリに_.env
_ファイルがあり、これには環境変数、たとえば_SECRET_KEY=198191891
_が含まれています。 _.env
_ファイルは_.gitignore
_に含まれています。 CI/CDのGitlab設定でこれらの変数を設定しました。ただし、Gitlab CI/CD設定で設定された環境変数は使用できないようです
また、Gitlab CI/CD自動化プロセスは、テストに接続して実行するためのユーザーとDBをどのように作成する必要がありますか?ローカルマシンで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
_
SECRET_KEY
変数は、構成済みのすべてのCIジョブで使用できます。ただし、Docker Composeファイルでそれを参照して1つ以上のサービスに渡すことはできません。 Webサービスで使用するには、すでに持っている他の変数と同じようにマップします。
web:
build: .
command: /usr/local/bin/gunicorn writer.wsgi:application -w 2 -b :8000
environment:
SECRET_KEY: ${SECRET_KEY}
DEBUG: ${DEBUG}
…
データベースの作成に関しては、現在対話的に実行しているものは何でもSQLファイルまたはシェルスクリプトのpostgresコンテナーでラップし、/docker-entrypoint-initdb.d
の下のコンテナーの初期化スクリプトディレクトリにバインドマウントする必要があります。詳細については、postgresイメージの説明の 初期化スクリプト セクションを参照してください。