#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
.