Средство запуска оболочки GitLab CI не наследует системные переменные среды - PullRequest
1 голос
/ 08 марта 2019

Есть ли способ запустить процессы с помощью 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 && -r /etc/environment ]] && 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 && -r /etc/environment ]] && 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 Ответ

0 голосов
/ 11 марта 2019

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

...