При сборке кода AWS не передаются переменные среды?

Нам требуются переменные среды в процессе сборки кода. Codebuild позволяет вам устанавливать переменные среды в расширенных настройках, что я и сделал.

Теперь, когда выполняется сборка кода, похоже, что эти переменные среды не передаются вниз.

Я распечатал process.env и вот что у меня получилось:

NAME: '037fga72',
[Container] 2017/02/08 01:55:03 NPM_CONFIG_LOGLEVEL: 'info',
[Container] 2017/02/08 01:55:03 PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
[Container] 2017/02/08 01:55:03 PWD: '/usr/src/app',
[Container] 2017/02/08 01:55:03 SHLVL: '1',
[Container] 2017/02/08 01:55:03 HOME: '/root',
[Container] 2017/02/08 01:55:03 _: '/usr/local/bin/knex' } 'process.env variables...'

Нет ни одной из моих переменных окружения.

Я устанавливаю DB_PASS, DB_USER, DB_NAME, DB_HOST - ни один из них не распечатывается.

Я попытался создать новую сборку кода и добавить переменные среды, но безуспешно.

Обратите внимание, что он создает контейнер докеров, и он не работает, когда я пытаюсь подключиться к моей базе данных postgres, потому что переменные среды не передаются (пароль, хост и т. Д.)

Редактировать

В моем Dockerfile я запускаю следующий файл bash:

#!/bin/bash
echo "running"
function mytest {
    "$@"
    local status=$?
    if [ $status -ne 0 ]; then
        knex migrate:rollback 
      echo "Rolling back knex migrate $1" >&2
      exit 1
    fi
    return $status
}

mytest knex migrate:latest 

При этом выполняется миграция knex (скрипт js). Если это не удается, мы откатываем миграцию и выходим из сборки.


person James111    schedule 08.02.2017    source источник


Ответы (2)


Docker не передает переменные среды уровня хоста контейнерам во время сборки, поэтому переменные среды CodeBuild не будут предоставляться по умолчанию. Однако с помощью аргументов сборки вы можете связать переменные среды с вашим контейнером.

Например, возьмите следующий Dockerfile:

FROM ubuntu:14.04

ARG foo
ENV MYVAR=$foo
RUN echo $MYVAR

Вы можете установить значение MYVAR в контейнере с помощью: docker build -t <tag> --build-arg foo=bar .

Вот пример вывода во время docker build:

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:14.04
 ---> b969ab9f929b
Step 2 : ARG foo
 ---> Using cache
 ---> a6c71d477a6c
Step 3 : ENV MYVAR $foo
 ---> Running in 49efc25c81d9
 ---> ecfc651713b8
Removing intermediate container 49efc25c81d9
Step 4 : RUN echo $MYVAR
 ---> Running in 2fc43629aa44
bar
 ---> 86dd113f6c7b
Removing intermediate container 2fc43629aa44
Successfully built 86dd113f6c7b

Для вашего конкретного случая использования укажите значение переменной среды в вашем docker build --build-arg flag (например, --build-arg db_user=$DB_USER), а затем установите значение arg через ENV в вашем Dockerfile.

person Bri    schedule 13.02.2017

Определенно, упомянутые вами переменные среды не имеют всех переменных среды, которые, как ожидается, будут доступны для сборок, работающих на CodeBuild (включая пользовательские переменные env, которые у вас есть).

Можно ли поделиться дополнительной информацией о своей сборке? Вы запускаете новую оболочку (например, bash) в своих командах сборки (возможно, заменяя существующую среду "/ usr / bin / env")? Какая у вас конфигурация проекта (в частности, образ докера)?

Также вы можете попробовать переопределить команду для одного из проектов и просто запустить env, чтобы убедиться, что вы видите ожидаемые переменные среды. Это просто для того, чтобы исключить, является ли проблема средой или командами.

Спасибо!

person awsnitin    schedule 08.02.2017
comment
Файл .sh запускается Dockerfile, и в этом файле bash запущены некоторые js. Взгляните на мою правку :) - person James111; 09.02.2017