web-dev-qa-db-ja.com

環境変数を正しく設定する方法Gitlab CI / CDおよびDocker

DockerGitlab 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
_

これが私の変数の私の設定ですenter image description here

これが失敗したパイプラインジョブですenter image description here

3
theTypan

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イメージの説明の 初期化スクリプト セクションを参照してください。

0