Запуск оболочки GitLab CI, не наследующий системные переменные среды

#php #environment-variables #sh #gitlab-ci #gitlab-ci-runner

#php #переменные среды #sh #gitlab-ci #gitlab-ci-runner

Вопрос:

Есть ли способ запустить процессы с помощью GitLab Runner (бегун оболочки), чтобы наследовать переменные, определенные в системной среде ( /etc/environment ) при выполнении заданий в конвейере GitLab CI / CD?

Соответствующая часть .gitlab-ci.yml :

 synchronize data:
    stage: synchronize
    only:
        refs:
            - schedules
    variables:
        GIT_STRATEGY: none
    script:
        - [[ -s /etc/environment amp;amp; -r /etc/environment ]] amp;amp; source /etc/environment
        # - printenv|sort
        - echo $APP_ENV
        - php -r "var_dump(getenv('APP_ENV'));"
  

Это результат выполнения задания:

 Running with gitlab-runner 11.4.2 (cf91d5e1)
  on <redacted> 9b533a38
Using Shell executor...
Running on <redacted>...
Skipping Git repository setup
Skipping Git checkout
Skipping Git submodules setup
$ [[ -s /etc/environment amp;amp; -r /etc/environment ]] amp;amp; source /etc/environment
$ echo $APP_ENV
development
$ php -r "var_dump(getenv('APP_ENV'));"
bool(false)
  

echo Работает только в том случае, если я явно ввожу исходный файл, но PHP по-прежнему не распознает переменную.

На компьютере я запустил это, и gitlab-runner пользователю определенно доступны переменные:

 [@localhost ~]$ sudo -u gitlab-runner -i bash --norc --noprofile  
bash-4.2$ echo $APP_ENV 
development
bash-4.2$ php -r 'var_dump(getenv("APP_ENV"));'
string(11) "development"
  

Я также пробовал bash без --norc --noprofile , а также sh и все они работают из интерактивной оболочки.

Ответ №1:

Проблема в том, что исходный код не экспортирует переменные. Как подробно описано в этом ответе, вы могли бы использовать set -a перед source .