Назад | Перейти на главную страницу

Можно ли передать переменные среды новому пользователю?

В моем сценарии 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"