Назад | Перейти на главную страницу

Как установить переменные среды для CI / CD в GitLab при использовании Auto DevOps (с GCP Kubernetes)?

У меня здесь довольно много движущихся частей, поэтому я пока не уверен, что не так. Я установил свою переменную так:

но на этапе сборки я получаю этот сбой (это приложение Django):

   raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
   django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

   !     Error while running '$ python manage.py collectstatic --noinput'.
   See traceback above for details.

   You may need to update application code to resolve this error.
   Or, you can disable collectstatic for this application:

   $ heroku config:set DISABLE_COLLECTSTATIC=1

   https://devcenter.heroku.com/articles/django-assets

Если где-то еще в пользовательском интерфейсе есть подсказка, которую мне не хватает, вот результат:

Я создал общедоступное приложение-скелет, чтобы продемонстрировать и отладить эту проблему: https://gitlab.com/pupeno/example/-/jobs/113402553

Что мне не хватает, чтобы предоставить переменную среды процессу сборки?

Я скопировал Auto DevOps их .gitlab-ci.yml шаблон и добавил:

variables:
  # ...
  SECRET_KEY: $SECRET_KEY

а также жесткое кодирование на случай $SECRET_KEY не работает:

variables:
  # ...
  SECRET_KEY: "12345678901234567890123456789012345678901234567890"

Кроме того, я добавил это на этапе сборки как переменные:

build:
  stage: build
  image: docker:stable-git
  services:
  - docker:stable-dind
  script:
    - setup_docker
    - build
  only:
    - branches
  variables:
    SECRET_KEY: "12345678901234567890123456789012345678901234567890"

или экспорт:

build:
  stage: build
  image: docker:stable-git
  services:
  - docker:stable-dind
  script:
    - export SECRET_KEY="12345678901234567890123456789012345678901234567890"
    - setup_docker
    - build
  only:
    - branches

и переменная по-прежнему недоступна для python manage.py.

Как мне сделать это доступным?

Полный журнал сборки:

[0KRunning with gitlab-runner 11.4.0-rc1 (1ff344e1)
[0;m[0K  on docker-auto-scale fa6cab46
[0;m[0KUsing Docker executor with image docker:stable-git ...
[0;m[0KStarting service docker:stable-dind ...
[0;m[0KPulling docker image docker:stable-dind ...
[0;m[0KUsing docker image sha256:acfec978837639b4230111b35a775a67ccbc2b08b442c1ae2cca4e95c3e6d08a for docker:stable-dind ...
[0;m[0KWaiting for services to be up and running...
[0;m[0KPulling docker image docker:stable-git ...
[0;m[0KUsing docker image sha256:a8a2d0da40bc37344c35ab723d4081a5ef6122d466bf0a0409f742ffc09c43b9 for docker:stable-git ...
[0;msection_start:1540485937:prepare_script
[0KRunning on runner-fa6cab46-project-8991099-concurrent-0 via runner-fa6cab46-srm-1540485878-b0f2f392...
section_end:1540485939:prepare_script
[0Ksection_start:1540485939:get_sources
[0K[32;1mCloning repository...[0;m
Cloning into '/builds/eligibleai/phoenix'...
[32;1mChecking out 4753fd6d as master...[0;m
[32;1mSkipping Git submodules setup[0;m
section_end:1540485940:get_sources
[0Ksection_start:1540485940:restore_cache
[0Ksection_end:1540485942:restore_cache
[0Ksection_start:1540485942:download_artifacts
[0Ksection_end:1540485943:download_artifacts
[0Ksection_start:1540485943:build_script
[0K[32;1m$ # Auto DevOps variables and functions # collapsed multi-line command[0;m
[32;1m$ setup_docker[0;m
[32;1m$ build[0;m
Logging to GitLab Container Registry with CI credentials...
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Building Heroku-based application using gliderlabs/herokuish docker image...
Unable to find image 'gliderlabs/herokuish:latest' locally
latest: Pulling from gliderlabs/herokuish
8ee29e426c26: Pulling fs layer
6e83b260b73b: Pulling fs layer
e26b65fd1143: Pulling fs layer
40dca07f8222: Pulling fs layer
b420ae9e10b3: Pulling fs layer
da73fdbc63c8: Pulling fs layer
06627042f798: Pulling fs layer
91591ee9e53a: Pulling fs layer
16bb228b9f74: Pulling fs layer
5ac34e15ac7b: Pulling fs layer
7ff3cba3e710: Pulling fs layer
8be7609fa05c: Pulling fs layer
28b563a2d870: Pulling fs layer
7d2ba817ef0b: Pulling fs layer
40dca07f8222: Waiting
b420ae9e10b3: Waiting
da73fdbc63c8: Waiting
06627042f798: Waiting
91591ee9e53a: Waiting
16bb228b9f74: Waiting
5ac34e15ac7b: Waiting
7ff3cba3e710: Waiting
8be7609fa05c: Waiting
28b563a2d870: Waiting
7d2ba817ef0b: Waiting
6e83b260b73b: Verifying Checksum
6e83b260b73b: Download complete
e26b65fd1143: Verifying Checksum
e26b65fd1143: Download complete
40dca07f8222: Verifying Checksum
40dca07f8222: Download complete
8ee29e426c26: Verifying Checksum
8ee29e426c26: Download complete
b420ae9e10b3: Verifying Checksum
b420ae9e10b3: Download complete
da73fdbc63c8: Verifying Checksum
da73fdbc63c8: Download complete
91591ee9e53a: Verifying Checksum
91591ee9e53a: Download complete
5ac34e15ac7b: Verifying Checksum
5ac34e15ac7b: Download complete
7ff3cba3e710: Verifying Checksum
7ff3cba3e710: Download complete
16bb228b9f74: Verifying Checksum
16bb228b9f74: Download complete
28b563a2d870: Verifying Checksum
28b563a2d870: Download complete
8be7609fa05c: Verifying Checksum
8be7609fa05c: Download complete
7d2ba817ef0b: Verifying Checksum
7d2ba817ef0b: Download complete
06627042f798: Verifying Checksum
06627042f798: Download complete
8ee29e426c26: Pull complete
6e83b260b73b: Pull complete
e26b65fd1143: Pull complete
40dca07f8222: Pull complete
b420ae9e10b3: Pull complete
da73fdbc63c8: Pull complete
06627042f798: Pull complete
91591ee9e53a: Pull complete
16bb228b9f74: Pull complete
5ac34e15ac7b: Pull complete
7ff3cba3e710: Pull complete
8be7609fa05c: Pull complete
28b563a2d870: Pull complete
7d2ba817ef0b: Pull complete
Digest: sha256:d1581d20408be7a7366b6ea74dc5cddc866f4ad4c573a04251272471c0aa2e56
Status: Downloaded newer image for gliderlabs/herokuish:latest
[1G       [1G-----> Python app detected
[1G-----> Installing python-3.6.6
[1G-----> Installing pip
[1G-----> Installing SQLite3
[1G-----> Installing requirements with pip
[1G       Collecting Django==2.1.2 (from -r /tmp/build/requirements.txt (line 1))
[1G       Downloading https://files.pythonhosted.org/packages/32/ab/22530cc1b2114e6067eece94a333d6c749fa1c56a009f0721e51c181ea53/Django-2.1.2-py3-none-any.whl (7.3MB)
[1G       Collecting django-dotenv==1.4.2 (from -r /tmp/build/requirements.txt (line 2))
[1G       Downloading https://files.pythonhosted.org/packages/e4/af/d9175f2b40a9bcd700db2861610d6ed48c2795ffba46c1d6abf25f7c1dea/django_dotenv-1.4.2-py2.py3-none-any.whl
[1G       Collecting psycopg2==2.7.5 (from -r /tmp/build/requirements.txt (line 3))
[1G       Downloading https://files.pythonhosted.org/packages/5e/d0/9e2b3ed43001ebed45caf56d5bb9d44ed3ebd68e12b87845bfa7bcd46250/psycopg2-2.7.5-cp36-cp36m-manylinux1_x86_64.whl (2.7MB)
[1G       Collecting pytz (from Django==2.1.2->-r /tmp/build/requirements.txt (line 1))
[1G       Downloading https://files.pythonhosted.org/packages/52/8b/876c5745f617630be90cfb8fafe363c6d7204b176dc707d1805d1e9a0a35/pytz-2018.6-py2.py3-none-any.whl (507kB)
[1G       Installing collected packages: pytz, Django, django-dotenv, psycopg2
[1G       Successfully installed Django-2.1.2 django-dotenv-1.4.2 psycopg2-2.7.5 pytz-2018.6
[1G       
[1G-----> $ python manage.py collectstatic --noinput
[1G       Environment variables:
[1G       CPLUS_INCLUDE_PATH: /app/.heroku/vendor/include:/app/.heroku/python/include:
[1G       HOSTNAME: 09751c55b3ac
[1G       EXPORT_PATH: /tmp/buildpacks/04_buildpack-python/bin/../export
[1G       CURL_CONNECT_TIMEOUT: 30
[1G       PROFILE_PATH: /tmp/build/.profile.d/python.sh
[1G       HEROKUISH_VERSION: 0.4.4
[1G       BUILDPACK_LOG_FILE: /dev/null
[1G       LIBRARY_PATH: /app/.heroku/vendor/lib:/app/.heroku/python/lib:
[1G       CACHE_DIR: /tmp/cache
[1G       LATEST_37: python-3.7.0
[1G       PYTHONUNBUFFERED: 1
[1G       LATEST_36: python-3.6.6
[1G       DEFAULT_PYTHON_STACK: cedar-14
[1G       LD_LIBRARY_PATH: /app/.heroku/vendor/lib:/app/.heroku/python/lib:
[1G       BIN_DIR: /tmp/buildpacks/04_buildpack-python/bin
[1G       PATH: /app/.heroku/python/bin:/app/.heroku/vendor/bin::/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/tmp/buildpacks/04_buildpack-python/vendor/:/tmp/buildpacks/04_buildpack-python/vendor/pip-pop
[1G       ENV_DIR: /tmp/env
[1G       SELF: /bin/herokuish
[1G       RECOMMENDED_PYTHON_VERSION: python-3.6.6
[1G       C_INCLUDE_PATH: /app/.heroku/vendor/include:/app/.heroku/python/include:
[1G       APP_DIR: /app
[1G       PWD: /tmp/build
[1G       BPLOG_PREFIX: buildpack.python
[1G       LANG: en_US.UTF-8
[1G       SELF_EXECUTABLE: /bin/herokuish
[1G       CACHED_PYTHON_STACK: heroku-16
[1G       STACK: heroku-16
[1G       REQUEST_ID: build-16345
[1G       HOME: /app
[1G       SHLVL: 3
[1G       LATEST_2: python-2.7.15
[1G       SQLITE3_VERSION: 3.11.0-1ubuntu1
[1G       PIP_UPDATE: 9.0.2
[1G       PYTHONPATH: .
[1G       BUILD_DIR: /tmp/build
[1G       VENDOR_URL: https://lang-python.s3.amazonaws.com/heroku-16
[1G       WARNINGS_LOG: /tmp/tmp.Iy1gH0Xs0X
[1G       DEFAULT_PYTHON_VERSION: python-3.6.6
[1G       CURL_TIMEOUT: 180
[1G       DEBIAN_FRONTEND: noninteractive
[1G       PKG_CONFIG_PATH: /app/.heroku/vendor/lib/pkgconfig:/app/.heroku/vendor/lib/pkg-config:/app/.heroku/python/lib/pkg-config:
[1G       _: /app/.heroku/python/bin/python
[1G       Traceback (most recent call last):
[1G       File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 204, in fetch_command
[1G       app_name = commands[subcommand]
[1G       KeyError: 'collectstatic'
[1G       During handling of the above exception, another exception occurred:
[1G       Traceback (most recent call last):
[1G       File "manage.py", line 23, in <module>
[1G       execute_from_command_line(sys.argv)
[1G       File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
[1G       utility.execute()
[1G       File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
[1G       self.fetch_command(subcommand).run_from_argv(self.argv)
[1G       File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 211, in fetch_command
[1G       settings.INSTALLED_APPS
[1G       File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/__init__.py", line 57, in __getattr__
[1G       self._setup(name)
[1G       File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/__init__.py", line 44, in _setup
[1G       self._wrapped = Settings(settings_module)
[1G       File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/__init__.py", line 126, in __init__
[1G       raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
[1G       django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
[1G       
[1G       !     Error while running '$ python manage.py collectstatic --noinput'.
[1G       See traceback above for details.
[1G       
[1G       You may need to update application code to resolve this error.
[1G       Or, you can disable collectstatic for this application:
[1G       
[1G       $ heroku config:set DISABLE_COLLECTSTATIC=1
[1G       
[1G       https://devcenter.heroku.com/articles/django-assets
section_end:1540486016:build_script
[0Ksection_start:1540486016:after_script
[0Ksection_end:1540486017:after_script
[0Ksection_start:1540486017:upload_artifacts_on_failure
[0Ksection_end:1540486018:upload_artifacts_on_failure
[0K[31;1mERROR: Job failed: exit code 1
[0;m

В моем случае я жестко запрограммировал секретный ключ. Я изменил свой код, чтобы его можно было читать из .env файл. Я забыл добавить переменную в docker-compose.yml как и остальные переменные. Хотя я добавил SECRET_KEY в настройках Gitlab CI / CD, она не была доступна в веб-контейнере. Взгляните сюда: https://stackoverflow.com/questions/57835476/how-to-set-environmental-variables-properly-gitlab-ci-cd-and-docker

Я столкнулся с очень похожей проблемой в Gitlab Auto DevOps.

Мне удалось обойти эту проблему, добавив следующее в settings.py файл.

STATIC_URL = '/static/'
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')

Кредит:

Я сталкиваюсь с теми же проблемами. Похоже, у меня недостаточно репутации, чтобы комментировать, поэтому я просто отвечу ...

Я думаю, эта проблема связана с тем, что dind не передает среду, в которой он запущен. Затем файл docker пытается собрать все, но в django отсутствуют необходимые переменные. Я не нашел хорошего способа заставить это работать без жесткого кодирования значений в настройках. (Ответ Аарона Блайта вообще не связан)