В моем сценарии GitLab CI я создаю нового пользователя, который затем выполняет команду. Я заметил, что когда команда выполняется от имени этого пользователя, переменные среды CI недоступны.
Вот что я делаю:
before_script:
- useradd -U -d "$CI_PROJECT_DIR" newuser
test-app:
stage: test
image: open-jdk
script:
- echo $MY_CI_VAR #here I can see the env var set in GitLab CI
- su newuser -l -c "grails test-app -unit FooHelper" #in the code it is not available
Вопрос
Есть ли способ передать переменные среды при создании нового пользователя или при выполнении команды от имени этого пользователя.
Проблема в том, что команда, которую вы выполняете, запускается от имени другого пользователя с su
который по умолчанию не приносит вашей среде. Вы указываете -l
опция, которая очистит переменные среды перед переключением на другого пользователя. Вы можете отбросить -l
вариант и использование -m
вместо этого, чтобы сохранить окружающую среду.
Попробуй это: - su newuser -m -c "grails test-app -unit FooHelper"
Возможно, вам потребуется указать полный путь к grails
потому что твой PATH
это переменная среды, которая не будет установлена в newuser
ПУТЬ.
Вы также можете передать его в команду, если вам нужно сохранить оболочку входа в систему. - su newuser -l -c "MY_CI_VAR=$MY_CI_VAR grails test-app -unit FooHelper"